llvm-6502/lib/Transforms/Scalar
Chris Lattner 955f331a77 Fold (and (setcc X, C1), (setcc X, C2))
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.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16559 91177308-0d34-0410-b5e6-96231b3b80d8
2004-09-28 21:48:02 +00:00
..
ADCE.cpp Prototype these functions more accurately 2004-09-20 04:43:15 +00:00
BasicBlockPlacement.cpp Changes For Bug 352 2004-09-01 22:55:40 +00:00
ConstantProp.cpp Prototype these functions more accurately 2004-09-20 04:43:15 +00:00
CorrelatedExprs.cpp Prototype these functions more accurately 2004-09-20 04:43:15 +00:00
DCE.cpp Prototype these functions more accurately 2004-09-20 04:43:15 +00:00
DeadStoreElimination.cpp Prototype these functions more accurately 2004-09-20 04:43:15 +00:00
DecomposeMultiDimRefs.cpp Changes For Bug 352 2004-09-01 22:55:40 +00:00
GCSE.cpp Changes For Bug 352 2004-09-01 22:55:40 +00:00
IndVarSimplify.cpp Prototype these functions more accurately 2004-09-20 04:43:15 +00:00
InstructionCombining.cpp Fold (and (setcc X, C1), (setcc X, C2)) 2004-09-28 21:48:02 +00:00
LICM.cpp Fix a bug in the previous checkin that broke 255.vortex 2004-09-15 02:34:40 +00:00
LoopUnroll.cpp Convert code to compile with vc7.1. 2004-09-15 17:06:42 +00:00
LoopUnswitch.cpp Fixes to make LLVM compile with vc7.1. 2004-09-03 18:19:51 +00:00
LowerConstantExprs.cpp Fix #includes of i*.h => Instructions.h as per PR403. 2004-07-29 17:05:13 +00:00
LowerGC.cpp Update GC intrinsics to take a pointer to the object as well as a pointer 2004-07-22 05:51:13 +00:00
LowerPacked.cpp Changes For Bug 352 2004-09-01 22:55:40 +00:00
Makefile Added LLVM copyright notice to Makefiles. 2003-10-20 22:26:57 +00:00
PRE.cpp Changes For Bug 352 2004-09-01 22:55:40 +00:00
Reassociate.cpp Changes For Bug 352 2004-09-01 22:55:40 +00:00
ScalarReplAggregates.cpp Prototype these functions more accurately 2004-09-20 04:43:15 +00:00
SCCP.cpp Prototype these functions more accurately 2004-09-20 04:43:15 +00:00
SimplifyCFG.cpp Changes For Bug 352 2004-09-01 22:55:40 +00:00
SymbolStripping.cpp Prototype these functions more accurately 2004-09-20 04:43:15 +00:00
TailDuplication.cpp Prototype these functions more accurately 2004-09-20 04:43:15 +00:00
TailRecursionElimination.cpp Changes For Bug 352 2004-09-01 22:55:40 +00:00