Skip to content
  1. Sep 10, 2011
    • Andrew Trick's avatar
      [disable-iv-rewrite] Allow WidenIV to handle NSW/NUW operations · c7868bf0
      Andrew Trick authored
      better.
      
      Don't immediately give up when an add operation can't be trivially
      sign/zero-extended within a loop. If it has NSW/NUW flags, generate a
      new expression with sign extended (non-recurrent) operand. As before,
      if SCEV says that all sign extends are loop invariant, then we can
      widen the operation.
      
      llvm-svn: 139453
      c7868bf0
  2. Sep 09, 2011
  3. Sep 06, 2011
    • Andrew Trick's avatar
      1eee7f12
    • Devang Patel's avatar
      Use IRBuilder. · c10e52a0
      Devang Patel authored
      llvm-svn: 139156
      c10e52a0
    • Owen Anderson's avatar
      Try again at r138809 (make DSE more aggressive in removing dead stores at the... · 58704ee4
      Owen Anderson authored
      Try again at r138809 (make DSE more aggressive in removing dead stores at the end of a function), now with less deleting stores before memcpy's.
      
      llvm-svn: 139150
      58704ee4
    • 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
  4. Sep 05, 2011
  5. Sep 04, 2011
  6. Sep 02, 2011
    • Bill Wendling's avatar
      Update comments to reflect reality. · a336e705
      Bill Wendling authored
      llvm-svn: 139023
      a336e705
    • Andrew Trick's avatar
      Enable SCEV-based unrolling by default. · 31b941a6
      Andrew Trick authored
      This changes loop unrolling to use the same mechanism for trip count
      computation as indvars. This is a stronger check that tends to unroll
      more loops. A very common side-effect is that many single iteration
      loops will be removed sooner. The real goal was simply to remove
      dependence on canonical IVs.
      
      x86 is break even.
      ARM performance changes to expect (+ is good):
      External/SPEC/CFP2000/183.equake/183.equake +13%
      SingleSource/Benchmarks/Dhrystone/fldry     +21%
      MultiSource/Applications/spiff/spiff         +3%
      SingleSource/Benchmarks/Stanford/Puzzle     -14%
      
      The Puzzle regression is actually an improvement in loop optimization
      that defeats GVN: rdar://problem/10065079.
      
      llvm-svn: 139009
      31b941a6
    • Jakub Staszak's avatar
      Compare type size instead of type _store_ size to make sure that BitCastInst · 7470fb01
      Jakub Staszak authored
      will be valid. This fixes PR10820.
      
      llvm-svn: 139005
      7470fb01
  7. Sep 01, 2011
  8. Aug 31, 2011
  9. Aug 30, 2011
  10. Aug 29, 2011
  11. Aug 28, 2011
  12. Aug 26, 2011
    • Bill Wendling's avatar
      Don't sink landingpad instructions during ind-var simplification. · eed1e890
      Bill Wendling authored
      llvm-svn: 138651
      eed1e890
    • Benjamin Kramer's avatar
      Address review comments. · 0655b78c
      Benjamin Kramer authored
      - Reword comments.
      - Allow undefined behavior interfering with undefined behavior.
      - Add address space checks.
      
      llvm-svn: 138619
      0655b78c
    • Benjamin Kramer's avatar
      SimplifyCFG: If we have a PHI node that can evaluate to NULL and do a load or... · fb212a63
      Benjamin Kramer authored
      SimplifyCFG: If we have a PHI node that can evaluate to NULL and do a load or store to the address returned by the PHI node then we can consider this incoming value as dead and remove the edge pointing there, unless there are instructions that can affect control flow executed in between.
      
      In theory this could be extended to other instructions, eg. division by zero, but it's likely that it will "miscompile" some code because people depend on div by zero not trapping. NULL pointer dereference usually leads to a crash so we should be on the safe side.
      
      This shrinks the size of a Release clang by 16k on x86_64.
      
      llvm-svn: 138618
      fb212a63
  13. Aug 25, 2011
  14. Aug 24, 2011
  15. Aug 22, 2011
  16. Aug 20, 2011
  17. Aug 19, 2011
    • Bill Wendling's avatar
      26e19288
    • Benjamin Kramer's avatar
      Make a bunch of symbols private. · 4938edb0
      Benjamin Kramer authored
      llvm-svn: 138025
      4938edb0
    • Benjamin Kramer's avatar
      C API functions must be able to see their extern "C" definitions, or it will... · 5a656883
      Benjamin Kramer authored
      C API functions must be able to see their extern "C" definitions, or it will be impossible to call them from C.
      
      llvm-svn: 138022
      5a656883
    • Dan Gohman's avatar
      Track a retain+release nesting level independently of the · b3894013
      Dan Gohman authored
      known-incremented level, because the two concepts can be used
      to prove the saftey of a retain+release removal in different
      ways.
      
      llvm-svn: 138016
      b3894013
    • Bill Wendling's avatar
      Intelligently split the landing pad block. · c61f7659
      Bill Wendling authored
      We have to be careful when splitting the landing pad block, because the
      landingpad instruction is required to remain as the first non-PHI of an invoke's
      unwind edge. To retain this, we split the block into two blocks, moving the
      predecessors within the loop to one block and the remaining predecessors to the
      other. The landingpad instruction is cloned into the new blocks.
      
      llvm-svn: 138015
      c61f7659
    • Bill Wendling's avatar
      Add SplitLandingPadPredecessors(). · ca7d3096
      Bill Wendling authored
      SplitLandingPadPredecessors is similar to SplitBlockPredecessors in that it
      splits the current block and attaches a set of predecessors to the new basic
      block. However, it differs from SplitBlockPredecessors in that it's specifically
      designed to handle landing pad blocks.
      
      Two new basic blocks are created: one that is has the vector of predecessors as
      its predecessors and one that has the remaining predecessors as its
      predecessors. Those two new blocks then receive a cloned copy of the landingpad
      instruction from the original block. The landingpad instructions are joined in a
      PHI, etc. Like SplitBlockPredecessors, it updates the LLVM IR, AliasAnalysis,
      DominatorTree, DominanceFrontier, LoopInfo, and LCCSA analyses.
      
      llvm-svn: 138014
      ca7d3096
Loading