Skip to content
  1. Jul 26, 2013
    • Manman Ren's avatar
      Debug Info Verifier: enable verification of DICompileUnit. · cc4e4d80
      Manman Ren authored
      We used to call Verify before adding DICompileUnit to the list, and now we
      remove the check and always add DICompileUnit to the list in DebugInfoFinder,
      so we can verify them later on.
      
      llvm-svn: 187237
      cc4e4d80
    • Akira Hatanaka's avatar
    • Akira Hatanaka's avatar
      [mips] Fix floating point branch, comparison, and conditional move instructions · 55f69b30
      Akira Hatanaka authored
      to have register FCC0 (the first floating point condition code register) in
      their Uses/Defs list.
      
      No intended functionality change.
      
      llvm-svn: 187233
      55f69b30
    • Akira Hatanaka's avatar
      [mips] Delete register print method MipsInstPrinter::printCPURegs that is not · 0b40014d
      Akira Hatanaka authored
      needed. The generic method printOperand will do.
      
      No functionality change.
      
      llvm-svn: 187231
      0b40014d
    • Akira Hatanaka's avatar
      [mips] Print instructions "beq", "bne" and "or" using assembler pseudo · 53900e51
      Akira Hatanaka authored
      instructions "beqz", "bnez" and "move", when possible.
      
      beq $2, $zero, $L1 => beqz $2, $L1
      bne $2, $zero, $L1 => bnez $2, $L1
      or  $2, $3, $zero  => move $2, $3
      
      llvm-svn: 187229
      53900e51
    • Stephen Lin's avatar
    • Eric Christopher's avatar
      Collapse conditional and add an assert for unhandled scope types. · 299b8782
      Eric Christopher authored
      llvm-svn: 187224
      299b8782
    • Matt Arsenault's avatar
      Re-add DataLayout pointer size convenience functions. · 6f4be905
      Matt Arsenault authored
      These were reverted in r167222 along with the rest
      of the last different address space pointer size attempt.
      These will be used in later commits.
      
      llvm-svn: 187223
      6f4be905
    • Eric Christopher's avatar
      Add preliminary support for hashing DIEs and breaking them into · 67646438
      Eric Christopher authored
      type units.
      
      Initially this support is used in the computation of an ODR checker
      for C++. For now we're attaching it to the DIE, but in the future
      it will be attached to the type unit.
      
      This also starts breaking out types into the separation for type
      units, but without actually splitting the DIEs.
      
      In preparation for hashing the DIEs this adds a DIEString type
      that contains a StringRef with the string contained at the label.
      
      llvm-svn: 187213
      67646438
    • Eric Christopher's avatar
      Add a way to get the context of any particular scope. · feea95c8
      Eric Christopher authored
      llvm-svn: 187212
      feea95c8
    • Reid Kleckner's avatar
      Remove dead or useless header checks from cmake and autoconf · 37f69de1
      Reid Kleckner authored
      On Windows, this improves clean cmake configuration time on my
      workstation from 1m58s to 1m32s, which is pretty significant.  There's
      probably more that can be done here, but this is the low hanging fruit.
      
      Eric volunteered to regenerate ./configure for me.
      
      llvm-svn: 187209
      37f69de1
    • Rafael Espindola's avatar
      Extend the lifetime of the strings passed to posix_spawn_file_actions_addopen. · 70d98f44
      Rafael Espindola authored
      Thanks to Hal Finkel for finding the bug and for the initial patch.
      
      llvm-svn: 187208
      70d98f44
    • Rafael Espindola's avatar
      Improve our error handling on windows. · 05e53fc0
      Rafael Espindola authored
      * Remove LLVM_ENABLE_CRT_REPORT. LLVM_DISABLE_CRASH_REPORT made it redundant.
      * set Return to 1, so that we get a stack trace on failure.
      * don't call _exit, so that we get a negative exit value and "not --crash"
        correctly differentiates crashes and regular errors.
      
      This is a bit experimental since the documentation on this interface is sparse.
      It doesn't bring up a dialog on my windows setup, but feel free to revert
      if it causes problem for your setup (and let me know what it is so that I
      can try to fix this patch).
      
      llvm-svn: 187206
      05e53fc0
    • Justin Holewinski's avatar
      Add a target legalize hook for SplitVectorOperand (again) · d3f2035a
      Justin Holewinski authored
      CustomLowerNode was not being called during SplitVectorOperand,
      meaning custom legalization could not be used by targets.
      
      This also adds a test case for NVPTX that depends on this custom
      legalization.
      
      Differential Revision: http://llvm-reviews.chandlerc.com/D1195
      
      Attempt to fix the buildbots by making the X86 test I just added platform independent
      
      llvm-svn: 187202
      d3f2035a
    • Rafael Espindola's avatar
      Revert "Add a target legalize hook for SplitVectorOperand" · 1d812728
      Rafael Espindola authored
      This reverts commit 187198. It broke the bots.
      
      The soft float test probably needs a -triple because of name differences.
      On the hard float test I am getting a "roundss $1, %xmm0, %xmm0", instead of
      "vroundss $1, %xmm0, %xmm0, %xmm0".
      
      llvm-svn: 187201
      1d812728
    • Justin Holewinski's avatar
      Add a target legalize hook for SplitVectorOperand · f848a24e
      Justin Holewinski authored
      CustomLowerNode was not being called during SplitVectorOperand,
      meaning custom legalization could not be used by targets.
      
      This also adds a test case for NVPTX that depends on this custom
      legalization.
      
      Differential Revision: http://llvm-reviews.chandlerc.com/D1195
      
      llvm-svn: 187198
      f848a24e
    • Richard Osborne's avatar
      test commit · 240d480c
      Richard Osborne authored
      llvm-svn: 187195
      240d480c
    • Richard Osborne's avatar
      [XCore] Add TODO regarding byval structs · 2d0d8da2
      Richard Osborne authored
      llvm-svn: 187193
      2d0d8da2
    • Chandler Carruth's avatar
      Re-implement the analysis of uses in mem2reg to be significantly more · 9af38fc2
      Chandler Carruth authored
      robust. It now uses an InstVisitor and worklist to actually walk the
      uses of the Alloca transitively and detect the pattern which we can
      directly promote: loads & stores of the whole alloca and instructions we
      can completely ignore.
      
      Also, with this new implementation teach both the predicate for testing
      whether we can promote and the promotion engine itself to use the same
      code so we no longer have strange divergence between the two code paths.
      
      I've added some silly test cases to demonstrate that we can handle
      slightly more degenerate code patterns now. See the below for why this
      is even interesting.
      
      Performance impact: roughly 1% regression in the performance of SROA or
      ScalarRepl on a large C++-ish test case where most of the allocas are
      basically ready for promotion. The reason is because of silly redundant
      work that I've left FIXMEs for and which I'll address in the next
      commit. I wanted to separate this commit as it changes the behavior.
      Once the redundant work in removing the dead uses of the alloca is
      fixed, this code appears to be faster than the old version. =]
      
      So why is this useful? Because the previous requirement for promotion
      required a *specific* visit pattern of the uses of the alloca to verify:
      we *had* to look for no more than 1 intervening use. The end goal is to
      have SROA automatically detect when an alloca is already promotable and
      directly hand it to the mem2reg machinery rather than trying to
      partition and rewrite it. This is a 25% or more performance improvement
      for SROA, and a significant chunk of the delta between it and
      ScalarRepl. To get there, we need to make mem2reg actually capable of
      promoting allocas which *look* promotable to SROA without have SROA do
      tons of work to massage the code into just the right form.
      
      This is actually the tip of the iceberg. There are tremendous potential
      savings we can realize here by de-duplicating work between mem2reg and
      SROA.
      
      llvm-svn: 187191
      9af38fc2
    • Craig Topper's avatar
    • Tobias Grosser's avatar
      Make .bc en/decoding of AttrKind stable · 0a8e12fd
      Tobias Grosser authored
      The bitcode representation attribute kinds are encoded into / decoded from
      should be independent of the current set of LLVM attributes and their position
      in the AttrKind enum. This patch explicitly encodes attributes to fixed bitcode
      values.
      
      With this patch applied, LLVM does not silently misread attributes written by
      LLVM 3.3. We also enhance the decoding slightly such that an error message is
      printed if an unknown AttrKind encoding was dected.
      
      Bonus: Dropping bitcode attributes from AttrKind is now easy, as old AttrKinds
             do not need to be kept to support the Bitcode reader.
      llvm-svn: 187186
      0a8e12fd
    • Craig Topper's avatar
    • Bill Schmidt's avatar
      [PowerPC] Support powerpc64le as a syntax-checking target. · 0a9170d9
      Bill Schmidt authored
      This patch provides basic support for powerpc64le as an LLVM target.
      However, use of this target will not actually generate little-endian
      code.  Instead, use of the target will cause the correct little-endian
      built-in defines to be generated, so that code that tests for
      __LITTLE_ENDIAN__, for example, will be correctly parsed for
      syntax-only testing.  Code generation will otherwise be the same as
      powerpc64 (big-endian), for now.
      
      The patch leaves open the possibility of creating a little-endian
      PowerPC64 back end, but there is no immediate intent to create such a
      thing.
      
      The LLVM portions of this patch simply add ppc64le coverage everywhere
      that ppc64 coverage currently exists.  There is nothing of any import
      worth testing until such time as little-endian code generation is
      implemented.  In the corresponding Clang patch, there is a new test
      case variant to ensure that correct built-in defines for little-endian
      code are generated.
      
      llvm-svn: 187179
      0a9170d9
  2. Jul 25, 2013
    • Roman Divacky's avatar
      PPC32 va_list is an actual structure so va_copy needs to copy the whole · c3825df8
      Roman Divacky authored
      structure not just a pointer. This implements that and thus fixes va_copy
      on PPC32. Fixes #15286. Both bug and patch by Florian Zeitz!
      
      llvm-svn: 187158
      c3825df8
    • Manman Ren's avatar
      Debug Info: update comments and add a FIXME. · 13b63e89
      Manman Ren authored
      llvm-svn: 187157
      13b63e89
    • Manman Ren's avatar
      Debug Info: improve the verifier to check field types. · 58737702
      Manman Ren authored
      Make sure the context field of DIType is MDNode.
      Fix testing cases to make them pass the verifier.
      
      llvm-svn: 187150
      58737702
    • Rafael Espindola's avatar
      72986667
    • Andrew Trick's avatar
      RegAllocGreedy comment. · f4b1ee34
      Andrew Trick authored
      llvm-svn: 187141
      f4b1ee34
    • Andrew Trick's avatar
      Evict local live ranges if they can be reassigned. · 8bb0a251
      Andrew Trick authored
      The previous change to local live range allocation also suppressed
      eviction of local ranges. In rare cases, this could result in more
      expensive register choices. This commit actually revives a feature
      that I added long ago: check if live ranges can be reassigned before
      eviction. But now it only happens in rare cases of evicting a local
      live range because another local live range wants a cheaper register.
      
      The benefit is improved code size for some benchmarks on x86 and armv7.
      
      I measured no significant compile time increase and performance
      changes are noise.
      
      llvm-svn: 187140
      8bb0a251
    • Andrew Trick's avatar
      Allocate local registers in order for optimal coloring. · 8485257d
      Andrew Trick authored
      Also avoid locals evicting locals just because they want a cheaper register.
      
      Problem: MI Sched knows exactly how many registers we have and assumes
      they can be colored. In cases where we have large blocks, usually from
      unrolled loops, greedy coloring fails. This is a source of
      "regressions" from the MI Scheduler on x86. I noticed this issue on
      x86 where we have long chains of two-address defs in the same live
      range. It's easy to see this in matrix multiplication benchmarks like
      IRSmk and even the unit test misched-matmul.ll.
      
      A fundamental difference between the LLVM register allocator and
      conventional graph coloring is that in our model a live range can't
      discover its neighbors, it can only verify its neighbors. That's why
      we initially went for greedy coloring and added eviction to deal with
      the hard cases. However, for singly defined and two-address live
      ranges, we can optimally color without visiting neighbors simply by
      processing the live ranges in instruction order.
      
      Other beneficial side effects:
      
      It is much easier to understand and debug regalloc for large blocks
      when the live ranges are allocated in order. Yes, global allocation is
      still very confusing, but it's nice to be able to comprehend what
      happened locally.
      
      Heuristics could be added to bias register assignment based on
      instruction locality (think late register pairing, banks...).
      
      Intuituvely this will make some test cases that are on the threshold
      of register pressure more stable.
      
      llvm-svn: 187139
      8485257d
    • Bill Wendling's avatar
      Add a way to add a kind-value string pair to an attribute. · 3b2f6106
      Bill Wendling authored
      llvm-svn: 187138
      3b2f6106
    • Adrian Prantl's avatar
      typo. · e4daf52a
      Adrian Prantl authored
      llvm-svn: 187135
      e4daf52a
    • Tim Northover's avatar
      AArch64: fix even more JIT failures · caaf2385
      Tim Northover authored
      The last patch corrected some issues, but constant-pool entries had actual
      codegen bugs in the large memory model (which MCJIT uses).
      
      llvm-svn: 187126
      caaf2385
    • Rafael Espindola's avatar
      Don't end a file name with a dot. It looks odd. · d3c89041
      Rafael Espindola authored
      llvm-svn: 187124
      d3c89041
    • Tim Northover's avatar
      AArch64: don't mask off shift bits when processing JIT relocations. · ca8a0079
      Tim Northover authored
      This should actually make the MCJIT tests pass again on AArch64. I don't know
      how I missed their failure before.
      
      llvm-svn: 187120
      ca8a0079
    • Richard Sandiford's avatar
      [SystemZ] Rework compare and branch support · c3f85d73
      Richard Sandiford authored
      Before the patch we took advantage of the fact that the compare and
      branch are glued together in the selection DAG and fused them together
      (where possible) while emitting them.  This seemed to work well in practice.
      However, fusing the compare so early makes it harder to remove redundant
      compares in cases where CC already has a suitable value.  This patch
      therefore uses the peephole analyzeCompare/optimizeCompareInstr pair of
      functions instead.
      
      No behavioral change intended, but it paves the way for a later patch.
      
      llvm-svn: 187116
      c3f85d73
    • Richard Sandiford's avatar
      [SystemZ] Add LOCR and LOCGR · f2404164
      Richard Sandiford authored
      llvm-svn: 187113
      f2404164
    • Richard Sandiford's avatar
      [SystemZ] Add LOC and LOCG · 09a8cf36
      Richard Sandiford authored
      As with the stores, these instructions can trap when the condition is false,
      so they are only used for things like (cond ? x : *ptr).
      
      llvm-svn: 187112
      09a8cf36
    • Richard Sandiford's avatar
      [SystemZ] Add STOC and STOCG · a68e6f56
      Richard Sandiford authored
      These instructions are allowed to trap even if the condition is false,
      so for now they are only used for "*ptr = (cond ? x : *ptr)"-style
      constructs.
      
      llvm-svn: 187111
      a68e6f56
    • Andrew Trick's avatar
      MI Sched: Register pressure heuristics. · 401b6959
      Andrew Trick authored
      Consider which set is being increased or decreased before comparing.
      
      llvm-svn: 187110
      401b6959
Loading