Skip to content
  1. Sep 30, 2004
  2. Sep 29, 2004
  3. Sep 28, 2004
    • Chris Lattner's avatar
      Fold (and (setcc X, C1), (setcc X, C2)) · 623826c8
      Chris Lattner authored
      This is important for several reasons:
      
      1. Benchmarks have lots of code that looks like this (perlbmk in particular):
      
        %tmp.2.i = setne int %tmp.0.i, 128              ; <bool> [#uses=1]
        %tmp.6343 = seteq int %tmp.0.i, 1               ; <bool> [#uses=1]
        %tmp.63 = and bool %tmp.2.i, %tmp.6343          ; <bool> [#uses=1]
      
         we now fold away the setne, a clear improvement.
      
      2. In the more important cases, such as (X >= 10) & (X < 20), we now produce
         smaller code: (X-10) < 10.
      
      3. Perhaps the nicest effect of this patch is that it really helps out the
         code generators.  In particular, for a 'range test' like the above,
         instead of generating this on X86 (the difference on PPC is even more
         pronounced):
      
              cmp %EAX, 50
              setge %CL
              cmp %EAX, 100
              setl %AL
              and %CL, %AL
              cmp %CL, 0
      
         we now generate this:
      
              add %EAX, -50
              cmp %EAX, 50
      
         Furthermore, this causes setcc's to be folded into branches more often.
      
      These combinations trigger dozens of times in the spec benchmarks, particularly
      in 176.gcc, 186.crafty, 253.perlbmk, 254.gap, & 099.go.
      
      llvm-svn: 16559
      623826c8
    • Nate Begeman's avatar
    • Chris Lattner's avatar
      Capture delay slot info · 6652223b
      Chris Lattner authored
      llvm-svn: 16551
      6652223b
Loading