Skip to content
  1. Oct 05, 2011
    • Duncan Sands's avatar
      GVN does simple propagation of conditions: when it sees a conditional · f4f47ccd
      Duncan Sands authored
      branch "br i1 %x, label %if_true, label %if_false" then it replaces
      "%x" with "true" in places only reachable via the %if_true arm, and
      with "false" in places only reachable via the %if_false arm.  Except
      that actually it doesn't: if value numbering shows that %y is equal
      to %x then, yes, %y will be turned into true/false in this way, but
      any occurrences of %x itself are not transformed.  Fix this.  What's
      more, it's often the case that %x is an equality comparison such as
      "%x = icmp eq %A, 0", in which case every occurrence of %A that is
      only reachable via the %if_true arm can be replaced with 0.  Implement
      this and a few other variations on this theme.  This reduces the number
      of lines of LLVM IR in "GCC as one big file" by 0.2%.  It has a bigger
      impact on Ada code, typically reducing the number of lines of bitcode
      by around 0.4% by removing repeated compiler generated checks.  Passes
      the LLVM nightly testsuite and the Ada ACATS testsuite.
      
      llvm-svn: 141177
      f4f47ccd
    • Duncan Sands's avatar
      Generalize GVN's conditional propagation logic slightly: · e90dd058
      Duncan Sands authored
      it's OK for the false/true destination to have multiple
      predecessors as long as the extra ones are dominated by
      the branch destination.
      
      llvm-svn: 141176
      e90dd058
  2. Oct 04, 2011
  3. Oct 01, 2011
    • Andrew Trick's avatar
      Inlining and unrolling heuristics should be aware of free truncs. · f7656015
      Andrew Trick authored
      We want heuristics to be based on accurate data, but more importantly
      we don't want llvm to behave randomly. A benign trunc inserted by an
      upstream pass should not cause a wild swings in optimization
      level. See PR11034. It's a general problem with threshold-based
      heuristics, but we can make it less bad.
      
      llvm-svn: 140919
      f7656015
  4. Sep 30, 2011
  5. Sep 29, 2011
    • Andrew Trick's avatar
      typo + pasto · 168dfffd
      Andrew Trick authored
      llvm-svn: 140769
      168dfffd
    • Andrew Trick's avatar
      LSR: rewrite inner loops only. · bc6de90a
      Andrew Trick authored
      Rewriting the entire loop nest now requires -enable-lsr-nested.
      See PR11035 for some performance data.
      A few unit tests specifically test nested LSR, and are now under a flag.
      
      llvm-svn: 140762
      bc6de90a
  6. Sep 28, 2011
  7. Sep 27, 2011
  8. Sep 24, 2011
    • Andrew Trick's avatar
      LSR minor bug fix in RateRegister. · 8b2fe2f7
      Andrew Trick authored
      No test case. Noticed by inspection and I doubt it ever affects the
      outcome of the overall heuristic, let alone final codegen.
      
      llvm-svn: 140431
      8b2fe2f7
  9. Sep 22, 2011
  10. Sep 21, 2011
  11. Sep 15, 2011
  12. Sep 14, 2011
  13. Sep 13, 2011
  14. Sep 12, 2011
  15. 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
  16. Sep 09, 2011
  17. Sep 06, 2011
  18. Sep 04, 2011
  19. 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
  20. Sep 01, 2011
  21. Aug 31, 2011
    • Bill Wendling's avatar
      Make sure we aren't deleting the landingpad instruction. · 770d0f07
      Bill Wendling authored
      The landingpad instruction is required in the landing pad block. Because we're
      not deleting terminating instructions, the invoke may still jump to here (see
      Transforms/SCCP/2004-11-16-DeadInvoke.ll). Remove all uses of the landingpad
      instruction, but keep it around until code-gen can remove the basic block.
      
      llvm-svn: 138890
      770d0f07
Loading