diff options
author | Chris Lattner <sabre@nondot.org> | 2004-09-28 21:48:02 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2004-09-28 21:48:02 +0000 |
commit | 955f331a7732876f6c2d7f5f73a337f6af4149f2 (patch) | |
tree | 398c3bc22eab75a1850af3f7f390ace002335128 /test | |
parent | 7f12bbbc92611c2fe5d83926a25e544d3dafb849 (diff) | |
download | external_llvm-955f331a7732876f6c2d7f5f73a337f6af4149f2.zip external_llvm-955f331a7732876f6c2d7f5f73a337f6af4149f2.tar.gz external_llvm-955f331a7732876f6c2d7f5f73a337f6af4149f2.tar.bz2 |
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
Diffstat (limited to 'test')
0 files changed, 0 insertions, 0 deletions