Skip to content
  1. Aug 13, 2008
  2. Aug 06, 2008
  3. Jul 21, 2008
  4. Jul 14, 2008
  5. Jul 07, 2008
    • Evan Cheng's avatar
      Fix two serious LSR bugs. · 03001cb8
      Evan Cheng authored
      1. LSR runOnLoop is always returning false regardless if any transformation is made.
      2. AddUsersIfInteresting can create new instructions that are added to DeadInsts. But there is a later early exit which prevents them from being freed.
      
      llvm-svn: 53193
      03001cb8
  6. Jun 24, 2008
  7. Jun 22, 2008
  8. Jun 18, 2008
  9. Jun 17, 2008
  10. Jun 16, 2008
  11. Jun 13, 2008
  12. Jun 11, 2008
  13. May 24, 2008
  14. May 21, 2008
    • Dan Gohman's avatar
      When LSR is replacing an instruction, call · e62632e0
      Dan Gohman authored
      ScalarEvolution::deleteValueFromRecords on it before doing the
      replaceAllUsesWith, because ScalarEvolution looks at the instruction's
      users to find SCEV references to the instruction's SCEV object in its
      internal maps.
      
      Move all of LSR's loop-related state clearing after processing the loop
      and before cleaning up dead PHI nodes. This eliminates all of LSR's SCEV
      references just before the calls to ScalarEvolution::deleteValueFromRecords
      so that when ScalarEvolution drops its own SCEV references, the reference
      counts will reach zero and the SCEVs will be deleted immediately.
      
      These changes fix some compiler aborts involving ScalarEvolution holding
      onto and reusing SCEV objects for instructions that have been deleted.
      No regression test unfortunately; because the symptoms were due to
      dangling pointers, reduced testcases ended up being fairly arbitrary.
      
      llvm-svn: 51359
      e62632e0
  15. May 20, 2008
  16. May 16, 2008
    • Dan Gohman's avatar
      Fix a bug in LoopStrengthReduce that caused it to emit IR with · 0a0fa7cf
      Dan Gohman authored
      use-before-def. The problem comes up in code with multiple PHIs where
      one PHI is being rewritten in terms of the other, but the other needs
      to be casted first. LLVM rules requre the cast instruction to be
      inserted after any PHI instructions, but when instructions were
      inserted to replace the second PHI value with a function of the first,
      they were ended up going before the cast instruction. Avoid this
      problem by remembering the location of the cast instruction, when one
      is needed, and inserting the expansion of the new value after it.
      
      This fixes a bug that surfaced in 255.vortex on x86-64 when
      instcombine was removed from the middle of the loop optimization
      passes. 
      
      llvm-svn: 51169
      0a0fa7cf
  17. May 13, 2008
  18. Apr 14, 2008
  19. Apr 06, 2008
  20. Mar 19, 2008
  21. Jan 29, 2008
  22. Dec 29, 2007
  23. Dec 20, 2007
  24. Nov 17, 2007
  25. Oct 31, 2007
  26. Oct 30, 2007
  27. Oct 29, 2007
  28. Oct 27, 2007
    • Evan Cheng's avatar
      A number of LSR fixes: · 9dbe99dc
      Evan Cheng authored
      - ChangeCompareStride only reuse stride that is larger than current stride. It
        will let the general reuse mechanism to try to reuse a smaller stride.
      - Watch out for multiplication overflow in ChangeCompareStride.
      - Replace std::set with SmallPtrSet.
      
      llvm-svn: 43408
      9dbe99dc
  29. Oct 26, 2007
  30. Oct 25, 2007
  31. Oct 22, 2007
    • Dan Gohman's avatar
      Strength reduction improvements. · e0c3d9f3
      Dan Gohman authored
       - Avoid attempting stride-reuse in the case that there are users that
         aren't addresses. In that case, there will be places where the
         multiplications won't be folded away, so it's better to try to
         strength-reduce them.
      
       - Several SSE intrinsics have operands that strength-reduction can
         treat as addresses. The previous item makes this more visible, as
         any non-address use of an IV can inhibit stride-reuse.
      
       - Make ValidStride aware of whether there's likely to be a base
         register in the address computation. This prevents it from thinking
         that things like stride 9 are valid on x86 when the base register is
         already occupied.
      
      Also, XFAIL the 2007-08-10-LEA16Use32.ll test; the new logic to avoid
      stride-reuse elimintes the LEA in the loop, so the test is no longer
      testing what it was intended to test.
      
      llvm-svn: 43231
      e0c3d9f3
Loading