llvm-6502/lib
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
..
Analysis 'Pass' should now not be derived from by clients. Instead, they should derive 2004-09-20 04:48:05 +00:00
Archive Changes For Bug 352 2004-09-01 22:55:40 +00:00
AsmParser Okay, the list of link-time passes wasn't such a hot idea. Its prone to 2004-09-14 05:43:23 +00:00
Bytecode Fix doxygen comment 2004-09-28 16:57:46 +00:00
CodeGen Add includes and use std:: for standard library calls to make code 2004-09-28 14:42:44 +00:00
Debugger Changes For Bug 352 2004-09-01 22:55:40 +00:00
ExecutionEngine Convert code to compile with vc7.1. 2004-09-15 17:06:42 +00:00
Linker Implement support for dependent libraries. The "source" module's dependent 2004-09-11 04:25:17 +00:00
Support Add includes and use std:: for standard library calls to make code 2004-09-28 14:42:44 +00:00
System Updated to reflect changes in the interface of TimeValue::now(). 2004-09-25 08:32:37 +00:00
Target Add support for the isLoad and isStore flags, needed by the instruction scheduler 2004-09-28 21:29:00 +00:00
Transforms Fold (and (setcc X, C1), (setcc X, C2)) 2004-09-28 21:48:02 +00:00
VMCore 'Pass' should now not be derived from by clients. Instead, they should derive 2004-09-20 04:48:05 +00:00
Makefile Wrap long line 2004-09-15 01:34:42 +00:00