Skip to content
  1. Sep 13, 2011
  2. Sep 12, 2011
    • Bill Wendling's avatar
      Introduce a bit of a hack. · ac5a8836
      Bill Wendling authored
      Splitting a landing pad takes considerable care because of PHIs and other
      nasties. The problem is that the jump table needs to jump to the landing pad
      block. However, the landing pad block can be jumped to only by an invoke
      instruction. So we clone the landingpad instruction into its own basic block,
      have the invoke jump to there. The landingpad instruction's basic block's
      successor is now the target for the jump table.
      
      But because of PHI nodes, we need to create another basic block for the jump
      table to jump to. This is definitely a hack, because the values for the PHI
      nodes may not be defined on the edge from the jump table. But that's okay,
      because the jump table is simply a construct to mimic what is happening in the
      CFG. So the values are mysteriously there, even though there is no value for the
      PHI from the jump table's edge (hence calling this a hack).
      
      llvm-svn: 139545
      ac5a8836
    • Jakob Stoklund Olesen's avatar
      Remove the -compact-regions flag. · 45df7e0f
      Jakob Stoklund Olesen authored
      It has been enabled by default for a while, it was only there to allow
      performance comparisons.
      
      llvm-svn: 139501
      45df7e0f
    • Jakob Stoklund Olesen's avatar
      Add an interface for SplitKit complement spill modes. · eecb2fb1
      Jakob Stoklund Olesen authored
      SplitKit always computes a complement live range to cover the places
      where the original live range was live, but no explicit region has been
      allocated.
      
      Currently, the complement live range is created to be as small as
      possible - it never overlaps any of the regions.  This minimizes
      register pressure, but if the complement is going to be spilled anyway,
      that is not very important.  The spiller will eliminate redundant
      spills, and hoist others by making the spill slot live range overlap
      some of the regions created by splitting.  Stack slots are cheap.
      
      This patch adds the interface to enable spill modes in SplitKit.  In
      spill mode, SplitKit will assume that the complement is going to spill,
      so it will allow it to overlap regions in order to avoid back-copies.
      By doing some of the spiller's work early, the complement live range
      becomes simpler.  In some cases, it can become much simpler because no
      extra PHI-defs are required.  This will speed up both splitting and
      spilling.
      
      This is only the interface to enable spill modes, no implementation yet.
      
      llvm-svn: 139500
      eecb2fb1
    • Jakob Stoklund Olesen's avatar
      Update comments to reflect some (not so) recent changes. · 72c0ddfb
      Jakob Stoklund Olesen authored
      llvm-svn: 139498
      72c0ddfb
  3. Sep 10, 2011
  4. Sep 09, 2011
    • Eli Friedman's avatar
      Make the SelectionDAG verify that all the operands of BUILD_VECTOR have the... · b7910b79
      Eli Friedman authored
      Make the SelectionDAG verify that all the operands of BUILD_VECTOR have the same type.  Teach DAGCombiner::visitINSERT_VECTOR_ELT not to make invalid BUILD_VECTORs.  Fixes PR10897.
      
      llvm-svn: 139407
      b7910b79
    • Jakob Stoklund Olesen's avatar
      Reapply r139247: Cache intermediate results during traceSiblingValue. · 278bf025
      Jakob Stoklund Olesen authored
      In some cases such as interpreters using indirectbr, the CFG can be very
      complicated, and live range splitting may be forced to insert a large
      number of phi-defs.  When that happens, traceSiblingValue can spend a
      lot of time zipping around in the CFG looking for defs and reloads.
      
      This patch causes more information to be cached in SibValues, and the
      cached values are used to terminate searches early.  This speeds up
      spilling by 20x in one interpreter test case.  For more typical code,
      this is just a 10% speedup of spilling.
      
      The previous version had bugs that caused miscompilations. They have
      been fixed.
      
      llvm-svn: 139378
      278bf025
    • Devang Patel's avatar
      Directly point debug info to the stack slot of the arugment, instead of trying... · 9d904e1a
      Devang Patel authored
      Directly point debug info to the stack slot of the arugment, instead of trying to keep track of vreg in which it the arugment is copied. The LiveDebugVariable can keep track of variable's ranges.
      
      llvm-svn: 139330
      9d904e1a
  5. Sep 07, 2011
  6. Sep 06, 2011
    • Duncan Sands's avatar
      Add codegen support for vector select (in the IR this means a select · f2641e1b
      Duncan Sands authored
      with a vector condition); such selects become VSELECT codegen nodes.
      This patch also removes VSETCC codegen nodes, unifying them with SETCC
      nodes (codegen was actually often using SETCC for vector SETCC already).
      This ensures that various DAG combiner optimizations kick in for vector
      comparisons.  Passes dragonegg bootstrap with no testsuite regressions
      (nightly testsuite as well as "make check-all").  Patch mostly by
      Nadav Rotem.
      
      llvm-svn: 139159
      f2641e1b
    • Duncan Sands's avatar
      Split the init.trampoline intrinsic, which currently combines GCC's · a098436b
      Duncan Sands authored
      init.trampoline and adjust.trampoline intrinsics, into two intrinsics
      like in GCC.  While having one combined intrinsic is tempting, it is
      not natural because typically the trampoline initialization needs to
      be done in one function, and the result of adjust trampoline is needed
      in a different (nested) function.  To get around this llvm-gcc hacks the
      nested function lowering code to insert an additional parent variable
      holding the adjust.trampoline result that can be accessed from the child
      function.  Dragonegg doesn't have the luxury of tweaking GCC code, so it
      stored the result of adjust.trampoline in the memory GCC set aside for
      the trampoline itself (this is always available in the child function),
      and set up some new memory (using an alloca) to hold the trampoline.
      Unfortunately this breaks Go which allocates trampoline memory on the
      heap and wants to use it even after the parent has exited (!).  Rather
      than doing even more hacks to get Go working, it seemed best to just use
      two intrinsics like in GCC.  Patch mostly by Sanjoy Das.
      
      llvm-svn: 139140
      a098436b
  7. Sep 03, 2011
    • Owen Anderson's avatar
      Fix a truly heinous bug in DAGCombine related to AssertZext. · 40d756ea
      Owen Anderson authored
      If we have a chain of zext -> assert_zext -> zext -> use, the first zext would get simplified away because of the later zext, and then the later zext would get simplified away because of the assert.  The solution is to teach SimplifyDemandedBits that assert_zext demands all of the high bits of its input, rather than only those demanded by its users.  No testcase because the only example I have manifests as llvm-gcc miscompiling LLVM, and I haven't found a smaller case that reproduces this problem.
      Fixes <rdar://problem/10063365>.
      
      llvm-svn: 139059
      40d756ea
  8. Sep 02, 2011
  9. Sep 01, 2011
  10. Aug 31, 2011
  11. Aug 30, 2011
    • Rafael Espindola's avatar
      Emit segmented-stack specific code into function prologues for · c2174211
      Rafael Espindola authored
      X86. Modify the pass added in the previous patch to call this new
      code.
      
      This new prologues generated will call a libgcc routine (__morestack)
      to allocate more stack space from the heap when required
      
      Patch by Sanjoy Das.
      
      llvm-svn: 138812
      c2174211
    • Evan Cheng's avatar
      Follow up to r138791. · e6fba779
      Evan Cheng authored
      Add a instruction flag: hasPostISelHook which tells the pre-RA scheduler to
      call a target hook to adjust the instruction. For ARM, this is used to
      adjust instructions which may be setting the 's' flag. ADC, SBC, RSB, and RSC
      instructions have implicit def of CPSR (required since it now uses CPSR physical
      register dependency rather than "glue"). If the carry flag is used, then the
      target hook will *fill in* the optional operand with CPSR. Otherwise, the hook
      will remove the CPSR implicit def from the MachineInstr.
      
      llvm-svn: 138810
      e6fba779
    • Bob Wilson's avatar
      Do not try to rematerialize a value from a partial definition. · 358a5f6a
      Bob Wilson authored
      I don't currently have a good testcase for this; will try to get one
      tomorrow.  <rdar://problem/10032939>
      
      llvm-svn: 138794
      358a5f6a
    • Jim Grosbach's avatar
      Thumb2 parsing and encoding for IT blocks. · ed16ec42
      Jim Grosbach authored
      llvm-svn: 138773
      ed16ec42
  12. Aug 28, 2011
  13. Aug 27, 2011
  14. Aug 26, 2011
Loading