diff options
| author | Reid Spencer <rspencer@reidspencer.com> | 2007-01-17 07:59:14 +0000 |
|---|---|---|
| committer | Reid Spencer <rspencer@reidspencer.com> | 2007-01-17 07:59:14 +0000 |
| commit | 83b3d8267225d585678d5d3af9bba5735f4b415d (patch) | |
| tree | 9d6c2ad7bfd568186e83a39e6f03e1c0bf415715 /llvm/test/Transforms/InstCombine/sub.ll | |
| parent | 100602d7561ca5e245db6194bddae86357d203d4 (diff) | |
| download | bcm5719-llvm-83b3d8267225d585678d5d3af9bba5735f4b415d.tar.gz bcm5719-llvm-83b3d8267225d585678d5d3af9bba5735f4b415d.zip | |
Regression is gone, don't try to find it on clean target.
llvm-svn: 33296
Diffstat (limited to 'llvm/test/Transforms/InstCombine/sub.ll')
| -rw-r--r-- | llvm/test/Transforms/InstCombine/sub.ll | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/sub.ll b/llvm/test/Transforms/InstCombine/sub.ll new file mode 100644 index 00000000000..be38da97e1d --- /dev/null +++ b/llvm/test/Transforms/InstCombine/sub.ll @@ -0,0 +1,140 @@ +; This test makes sure that these instructions are properly eliminated. +; + +; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ +; RUN: grep -v 'sub i32 %Cok.s, %Bok.s' | not grep sub + +implementation + +int %test1(int %A) { + %B = sub int %A, %A ; ISA constant 0 + ret int %B +} + +int %test2(int %A) { + %B = sub int %A, 0 + ret int %B +} + +int %test3(int %A) { + %B = sub int 0, %A ; B = -A + %C = sub int 0, %B ; C = -B = A + ret int %C +} + +int %test4(int %A, int %x) { + %B = sub int 0, %A + %C = sub int %x, %B + ret int %C +} + +int %test5(int %A, int %Bok, int %Cok) { + %D = sub int %Bok, %Cok + %E = sub int %A, %D + ret int %E +} + +int %test6(int %A, int %B) { + %C = and int %A, %B ; A - (A & B) => A & ~B + %D = sub int %A, %C + ret int %D +} + +int %test7(int %A) { + %B = sub int -1, %A ; B = ~A + ret int %B +} + +int %test8(int %A) { + %B = mul int 9, %A + %C = sub int %B, %A ; C = 9*A-A == A*8 == A << 3 + ret int %C +} + +int %test9(int %A) { + %B = mul int 3, %A + %C = sub int %A, %B ; C = A-3*A == A*-2 + ret int %C +} + +int %test10(int %A, int %B) { ; -A*-B == A*B + %C = sub int 0, %A + %D = sub int 0, %B + %E = mul int %C, %D + ret int %E +} + +int %test10(int %A) { ; -A *c1 == A * -c1 + %C = sub int 0, %A + %E = mul int %C, 7 + ret int %E +} + +bool %test11(ubyte %A, ubyte %B) { + %C = sub ubyte %A, %B + %cD = setne ubyte %C, 0 ; == setne A, B + ret bool %cD +} + +int %test12(int %A) { + %B = shr int %A, ubyte 31 + %C = sub int 0, %B ; == ushr A, 31 + ret int %C +} + +uint %test13(uint %A) { + %B = shr uint %A, ubyte 31 + %C = sub uint 0, %B ; == sar A, 31 + ret uint %C +} + +int %test14(uint %A) { + %B = shr uint %A, ubyte 31 + %C = cast uint %B to int + %D = sub int 0, %C + ret int %D +} + +int %test15(int %A, int %B) { + %C = sub int 0, %A + %D = rem int %B, %C ;; X % -Y === X % Y + ret int %D +} + +int %test16(int %A) { + %X = div int %A, 1123 + %Y = sub int 0, %X + ret int %Y +} + +int %test17(int %A) { + %B = sub int 0, %A + %C = div int %B, 1234 + ret int %C +} + +long %test18(long %Y) { + %tmp.4 = shl long %Y, ubyte 2 + %tmp.12 = shl long %Y, ubyte 2 + %tmp.8 = sub long %tmp.4, %tmp.12 ;; 0 + ret long %tmp.8 +} + +int %test19(int %X, int %Y) { + %Z = sub int %X, %Y + %Q = add int %Z, %Y + ret int %Q +} + +bool %test20(int %g, int %h) { + %tmp.2 = sub int %g, %h + %tmp.4 = setne int %tmp.2, %g + ret bool %tmp.4 +} + +bool %test21(int %g, int %h) { + %tmp.2 = sub int %g, %h + %tmp.4 = setne int %tmp.2, %g + ret bool %tmp.4 +} + |

