summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/InstCombine/sub.ll
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2007-01-17 07:59:14 +0000
committerReid Spencer <rspencer@reidspencer.com>2007-01-17 07:59:14 +0000
commit83b3d8267225d585678d5d3af9bba5735f4b415d (patch)
tree9d6c2ad7bfd568186e83a39e6f03e1c0bf415715 /llvm/test/Transforms/InstCombine/sub.ll
parent100602d7561ca5e245db6194bddae86357d203d4 (diff)
downloadbcm5719-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.ll140
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
+}
+
OpenPOWER on IntegriCloud