Skip to content
  1. Nov 10, 2005
  2. Nov 05, 2005
    • Nate Begeman's avatar
      Add support alignment of allocation instructions. · 848622f8
      Nate Begeman authored
      Add support for specifying alignment and size of setjmp jmpbufs.
      
      No targets currently do anything with this information, nor is it presrved
      in the bytecode representation.  That's coming up next.
      
      llvm-svn: 24196
      848622f8
    • Chris Lattner's avatar
      Implement Transforms/TailCallElim/return-undef.ll, a trivial case · 16b29e95
      Chris Lattner authored
      that has been sitting in my inbox since May 18. :)
      
      llvm-svn: 24194
      16b29e95
    • Chris Lattner's avatar
      Turn sdiv into udiv if both operands have a clear sign bit. This occurs · dd0c1740
      Chris Lattner authored
      a few times in crafty:
      
      OLD:    %tmp.36 = div int %tmp.35, 8            ; <int> [#uses=1]
      NEW:    %tmp.36 = div uint %tmp.35, 8           ; <uint> [#uses=0]
      OLD:    %tmp.19 = div int %tmp.18, 8            ; <int> [#uses=1]
      NEW:    %tmp.19 = div uint %tmp.18, 8           ; <uint> [#uses=0]
      OLD:    %tmp.117 = div int %tmp.116, 8          ; <int> [#uses=1]
      NEW:    %tmp.117 = div uint %tmp.116, 8         ; <uint> [#uses=0]
      OLD:    %tmp.92 = div int %tmp.91, 8            ; <int> [#uses=1]
      NEW:    %tmp.92 = div uint %tmp.91, 8           ; <uint> [#uses=0]
      
      Which all turn into shrs.
      
      llvm-svn: 24190
      dd0c1740
    • Chris Lattner's avatar
      Turn srem -> urem when neither input has their sign bit set. This triggers · e9ff0eaf
      Chris Lattner authored
      8 times in vortex, allowing the srems to be turned into shrs:
      
      OLD:    %tmp.104 = rem int %tmp.5.i37, 16               ; <int> [#uses=1]
      NEW:    %tmp.104 = rem uint %tmp.5.i37, 16              ; <uint> [#uses=0]
      OLD:    %tmp.98 = rem int %tmp.5.i24, 16                ; <int> [#uses=1]
      NEW:    %tmp.98 = rem uint %tmp.5.i24, 16               ; <uint> [#uses=0]
      OLD:    %tmp.91 = rem int %tmp.5.i19, 8         ; <int> [#uses=1]
      NEW:    %tmp.91 = rem uint %tmp.5.i19, 8                ; <uint> [#uses=0]
      OLD:    %tmp.88 = rem int %tmp.5.i14, 8         ; <int> [#uses=1]
      NEW:    %tmp.88 = rem uint %tmp.5.i14, 8                ; <uint> [#uses=0]
      OLD:    %tmp.85 = rem int %tmp.5.i9, 1024               ; <int> [#uses=2]
      NEW:    %tmp.85 = rem uint %tmp.5.i9, 1024              ; <uint> [#uses=0]
      OLD:    %tmp.82 = rem int %tmp.5.i, 512         ; <int> [#uses=2]
      NEW:    %tmp.82 = rem uint %tmp.5.i1, 512               ; <uint> [#uses=0]
      OLD:    %tmp.48.i = rem int %tmp.5.i.i161, 4            ; <int> [#uses=1]
      NEW:    %tmp.48.i = rem uint %tmp.5.i.i161, 4           ; <uint> [#uses=0]
      OLD:    %tmp.20.i2 = rem int %tmp.5.i.i, 4              ; <int> [#uses=1]
      NEW:    %tmp.20.i2 = rem uint %tmp.5.i.i, 4             ; <uint> [#uses=0]
      
      it also occurs 9 times in gcc, but with odd constant divisors (1009 and 61)
      so the payoff isn't as great.
      
      llvm-svn: 24189
      e9ff0eaf
  3. Nov 02, 2005
  4. Oct 31, 2005
  5. Oct 29, 2005
  6. Oct 28, 2005
  7. Oct 27, 2005
  8. Oct 26, 2005
  9. Oct 24, 2005
  10. Oct 23, 2005
    • Jeff Cohen's avatar
      When a function takes a variable number of pointer arguments, with a zero · 11e26b52
      Jeff Cohen authored
      pointer marking the end of the list, the zero *must* be cast to the pointer
      type.  An un-cast zero is a 32-bit int, and at least on x86_64, gcc will
      not extend the zero to 64 bits, thus allowing the upper 32 bits to be
      random junk.
      
      The new END_WITH_NULL macro may be used to annotate a such a function
      so that GCC (version 4 or newer) will detect the use of un-casted zero
      at compile time.
      
      llvm-svn: 23888
      11e26b52
  11. Oct 21, 2005
  12. Oct 20, 2005
    • Chris Lattner's avatar
      Do NOT touch FP ops with LSR. This fixes a testcase Nate sent me from an · 0c0b38bb
      Chris Lattner authored
      inner loop like this:
      
      LBB_RateConvertMono8AltiVec_2:  ; no_exit
              lis r2, ha16(.CPI_RateConvertMono8AltiVec_0)
              lfs f3, lo16(.CPI_RateConvertMono8AltiVec_0)(r2)
              fmr f3, f3
              fadd f0, f2, f0
              fadd f3, f0, f3
              fcmpu cr0, f3, f1
              bge cr0, LBB_RateConvertMono8AltiVec_2  ; no_exit
      
      to an inner loop like this:
      
      LBB_RateConvertMono8AltiVec_1:  ; no_exit
              fsub f2, f2, f1
              fcmpu cr0, f2, f1
              fmr f0, f2
              bge cr0, LBB_RateConvertMono8AltiVec_1  ; no_exit
      
      Doh! good catch!
      
      llvm-svn: 23838
      0c0b38bb
  13. Oct 17, 2005
  14. Oct 11, 2005
  15. Oct 10, 2005
  16. Oct 09, 2005
  17. Oct 07, 2005
  18. Oct 03, 2005
    • Chris Lattner's avatar
      Make IVUseShouldUsePostIncValue more aggressive when the use is a PHI. In · f07a587c
      Chris Lattner authored
      particular, it should realize that phi's use their values in the pred block
      not the phi block itself.  This change turns our em3d loop from this:
      
      _test:
              cmpwi cr0, r4, 0
              bgt cr0, LBB_test_2     ; entry.no_exit_crit_edge
      LBB_test_1:     ; entry.loopexit_crit_edge
              li r2, 0
              b LBB_test_6    ; loopexit
      LBB_test_2:     ; entry.no_exit_crit_edge
              li r6, 0
      LBB_test_3:     ; no_exit
              or r2, r6, r6
              lwz r6, 0(r3)
              cmpw cr0, r6, r5
              beq cr0, LBB_test_6     ; loopexit
      LBB_test_4:     ; endif
              addi r3, r3, 4
              addi r6, r2, 1
              cmpw cr0, r6, r4
              blt cr0, LBB_test_3     ; no_exit
      LBB_test_5:     ; endif.loopexit.loopexit_crit_edge
              addi r3, r2, 1
              blr
      LBB_test_6:     ; loopexit
              or r3, r2, r2
              blr
      
      into:
      
      _test:
              cmpwi cr0, r4, 0
              bgt cr0, LBB_test_2     ; entry.no_exit_crit_edge
      LBB_test_1:     ; entry.loopexit_crit_edge
              li r2, 0
              b LBB_test_5    ; loopexit
      LBB_test_2:     ; entry.no_exit_crit_edge
              li r6, 0
      LBB_test_3:     ; no_exit
              lwz r2, 0(r3)
              cmpw cr0, r2, r5
              or r2, r6, r6
              beq cr0, LBB_test_5     ; loopexit
      LBB_test_4:     ; endif
              addi r3, r3, 4
              addi r6, r6, 1
              cmpw cr0, r6, r4
              or r2, r6, r6
              blt cr0, LBB_test_3     ; no_exit
      LBB_test_5:     ; loopexit
              or r3, r2, r2
              blr
      
      
      Unfortunately, this is actually worse code, because the register coallescer
      is getting confused somehow.  If it were doing its job right, it could turn the
      code into this:
      
      _test:
              cmpwi cr0, r4, 0
              bgt cr0, LBB_test_2     ; entry.no_exit_crit_edge
      LBB_test_1:     ; entry.loopexit_crit_edge
              li r6, 0
              b LBB_test_5    ; loopexit
      LBB_test_2:     ; entry.no_exit_crit_edge
              li r6, 0
      LBB_test_3:     ; no_exit
              lwz r2, 0(r3)
              cmpw cr0, r2, r5
              beq cr0, LBB_test_5     ; loopexit
      LBB_test_4:     ; endif
              addi r3, r3, 4
              addi r6, r6, 1
              cmpw cr0, r6, r4
              blt cr0, LBB_test_3     ; no_exit
      LBB_test_5:     ; loopexit
              or r3, r6, r6
              blr
      
      ... which I'll work on next. :)
      
      llvm-svn: 23604
      f07a587c
Loading