Skip to content
  1. Jun 16, 2008
  2. Jun 13, 2008
  3. Jun 11, 2008
  4. May 24, 2008
  5. 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
  6. May 20, 2008
  7. 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
  8. May 13, 2008
  9. Apr 14, 2008
  10. Apr 06, 2008
  11. Mar 19, 2008
  12. Jan 29, 2008
  13. Dec 29, 2007
  14. Dec 20, 2007
  15. Nov 17, 2007
  16. Oct 31, 2007
  17. Oct 30, 2007
  18. Oct 29, 2007
  19. 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
  20. Oct 26, 2007
  21. Oct 25, 2007
  22. 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
    • Dan Gohman's avatar
      Move the SCEV object factors from being static members of the individual · a37eaf2b
      Dan Gohman authored
      SCEV subclasses to being non-static member functions of the ScalarEvolution
      class.
      
      llvm-svn: 43224
      a37eaf2b
  23. Oct 02, 2007
  24. Aug 02, 2007
  25. Aug 01, 2007
  26. Jul 31, 2007
  27. Jun 19, 2007
    • Dan Gohman's avatar
      Rename ScalarEvolution::deleteInstructionFromRecords to · 32f53bbd
      Dan Gohman authored
      deleteValueFromRecords and loosen the types to all it to accept
      Value* instead of just Instruction*, since this is what
      ScalarEvolution uses internally anyway. This allows more flexibility
      for future uses.
      
      llvm-svn: 37657
      32f53bbd
  28. Jun 15, 2007
    • Dan Gohman's avatar
      Add a SCEV class and supporting code for sign-extend expressions. · cb9e09ad
      Dan Gohman authored
      This created an ambiguity for expandInTy to decide when to use
      sign-extension or zero-extension, but it turns out that most of its callers
      don't actually need a type conversion, now that LLVM types don't have
      explicit signedness. Drop expandInTy in favor of plain expand, and change
      the few places that actually need a type conversion to do it themselves.
      
      llvm-svn: 37591
      cb9e09ad
  29. Jun 07, 2007
  30. Jun 06, 2007
Loading