Skip to content
  1. Nov 14, 2010
  2. Nov 13, 2010
    • Duncan Sands's avatar
      Generalize the reassociation transform in SimplifyCommutative (now renamed to · 641baf16
      Duncan Sands authored
      SimplifyAssociativeOrCommutative) "(A op C1) op C2" -> "A op (C1 op C2)",
      which previously was only done if C1 and C2 were constants, to occur whenever
      "C1 op C2" simplifies (a la InstructionSimplify).  Since the simplifying operand
      combination can no longer be assumed to be the right-hand terms, consider all of
      the possible permutations.  When compiling "gcc as one big file", transform 2
      (i.e. using right-hand operands) fires about 4000 times but it has to be said
      that most of the time the simplifying operands are both constants.  Transforms
      3, 4 and 5 each fired once.  Transform 6, which is an existing transform that
      I didn't change, never fired.  With this change, the testcase is now optimized
      perfectly with one run of instcombine (previously it required instcombine +
      reassociate + instcombine, and it may just have been luck that this worked).
      
      llvm-svn: 119002
      641baf16
  3. Nov 12, 2010
    • Duncan Sands's avatar
      Have GVN simplify instructions as it goes. For example, consider · 246b71c5
      Duncan Sands authored
      "%z = %x and %y".  If GVN can prove that %y equals %x, then it turns
      this into "%z = %x and %x".  With the new code, %z will be replaced
      with %x everywhere (and then deleted).  Previously %z would be value
      numbered too, which is a waste of time.  Also, while a clever value
      numbering algorithm would give %z the same value number as %x, our
      current one doesn't do so (at least I don't think it does).  The new
      logic has an essentially equivalent effect to what you would get if
      %z was given the same value number as %x, i.e. it should make value
      numbering smarter.  While there, get hold of target data once at the
      start rather than a gazillion times all over the place.
      
      llvm-svn: 118923
      246b71c5
    • Dan Gohman's avatar
      Enhance DSE to handle the case where a free call makes more than · d4b7fff2
      Dan Gohman authored
      one store dead. This is especially noticeable in
      SingleSource/Benchmarks/Shootout/objinst.
      
      llvm-svn: 118875
      d4b7fff2
  4. Nov 11, 2010
  5. Nov 10, 2010
  6. Nov 09, 2010
  7. Nov 08, 2010
  8. Nov 03, 2010
  9. Nov 01, 2010
  10. Oct 30, 2010
  11. Oct 29, 2010
    • Owen Anderson's avatar
      Give up on doing in-line instruction simplification during correlated value... · 374e1464
      Owen Anderson authored
      Give up on doing in-line instruction simplification during correlated value propagation.  Instruction simplification
      needs to be guaranteed never to be run on an unreachable block.  However, earlier block simplifications may have
      changed the CFG to make block that were reachable when we began our iteration unreachable by the time we try to
      simplify them. (Note that this also means that our depth-first iterators were potentially being invalidated).
      
      This should not have a large impact on code quality, since later runs of instcombine should pick up these simplifications.
      Fixes PR8506.
      
      llvm-svn: 117709
      374e1464
    • John Thompson's avatar
      Inline asm multiple alternative constraints development phase 2 - improved... · e8360b71
      John Thompson authored
      Inline asm multiple alternative constraints development phase 2 - improved basic logic, added initial platform support.
      
      llvm-svn: 117667
      e8360b71
  12. Oct 28, 2010
  13. Oct 25, 2010
  14. Oct 24, 2010
    • Duncan Sands's avatar
      Fix PR8445: a block with no predecessors may be the entry block, in which case · 31c803b2
      Duncan Sands authored
      it isn't unreachable and should not be zapped.  The check for the entry block
      was missing in one case: a block containing a unwind instruction.  While there,
      do some small cleanups: "M" is not a great name for a Function* (it would be
      more appropriate for a Module*), change it to "Fn"; use Fn in more places.
      
      llvm-svn: 117224
      31c803b2
  15. Oct 23, 2010
Loading