[llvm-commits] CVS: llvm/test/Transforms/SCCP/apint-array.ll apint-basictest.ll apint-basictest2.ll apint-basictest3.ll apint-basictest4.ll apint-bigarray.ll apint-bigint.ll apint-bigint2.ll apint-ipsccp1.ll apint-ipsccp2.ll apint-ipsccp3.ll apint-ipsccp4.ll apint-load.ll apint-phi.ll apint-select.ll

Reid Spencer reid at x10sys.com
Fri Apr 13 15:33:27 PDT 2007



Changes in directory llvm/test/Transforms/SCCP:

apint-array.ll added (r1.1)
apint-basictest.ll added (r1.1)
apint-basictest2.ll added (r1.1)
apint-basictest3.ll added (r1.1)
apint-basictest4.ll added (r1.1)
apint-bigarray.ll added (r1.1)
apint-bigint.ll added (r1.1)
apint-bigint2.ll added (r1.1)
apint-ipsccp1.ll added (r1.1)
apint-ipsccp2.ll added (r1.1)
apint-ipsccp3.ll added (r1.1)
apint-ipsccp4.ll added (r1.1)
apint-load.ll added (r1.1)
apint-phi.ll added (r1.1)
apint-select.ll added (r1.1)
---
Log message:

Add the SCCP regression tests for APInt expressions. These test cases 
turned up some regressions that have since been fixed. We don't want to
loose the regression tests.

Test cases by Guoling Han.


---
Diffs of the changes:  (+360 -0)

 apint-array.ll      |   23 +++++++++++++++++++++++
 apint-basictest.ll  |   17 +++++++++++++++++
 apint-basictest2.ll |   18 ++++++++++++++++++
 apint-basictest3.ll |   24 ++++++++++++++++++++++++
 apint-basictest4.ll |   26 ++++++++++++++++++++++++++
 apint-bigarray.ll   |   24 ++++++++++++++++++++++++
 apint-bigint.ll     |   10 ++++++++++
 apint-bigint2.ll    |   19 +++++++++++++++++++
 apint-ipsccp1.ll    |   23 +++++++++++++++++++++++
 apint-ipsccp2.ll    |   21 +++++++++++++++++++++
 apint-ipsccp3.ll    |   24 ++++++++++++++++++++++++
 apint-ipsccp4.ll    |   51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 apint-load.ll       |   38 ++++++++++++++++++++++++++++++++++++++
 apint-phi.ll        |   20 ++++++++++++++++++++
 apint-select.ll     |   22 ++++++++++++++++++++++
 15 files changed, 360 insertions(+)


Index: llvm/test/Transforms/SCCP/apint-array.ll
diff -c /dev/null llvm/test/Transforms/SCCP/apint-array.ll:1.1
*** /dev/null	Fri Apr 13 17:33:20 2007
--- llvm/test/Transforms/SCCP/apint-array.ll	Fri Apr 13 17:33:10 2007
***************
*** 0 ****
--- 1,23 ----
+ ; RUN: llvm-as < %s | opt -sccp | llvm-dis | grep 'ret i101 12'
+ 
+ @Y = constant [6 x i101] [ i101 12, i101 123456789000000, i101 -12,i101 
+ -123456789000000, i101 0,i101 9123456789000000]
+ 
+ define i101 @array()
+ {
+ Head:
+    %A = getelementptr [6 x i101]* @Y, i32 0, i32 1
+ 
+    %B = load i101* %A
+    %C = icmp sge i101 %B, 1
+    br i1 %C, label %True, label %False
+ True:
+    %D = and i101 %B, 1
+    %E = trunc i101 %D to i32
+    %F = getelementptr [6 x i101]* @Y, i32 0, i32 %E
+    %G = load i101* %F
+    br label %False
+ False:
+    %H = phi i101 [%G, %True], [-1, %Head]
+    ret i101 %H
+ }


Index: llvm/test/Transforms/SCCP/apint-basictest.ll
diff -c /dev/null llvm/test/Transforms/SCCP/apint-basictest.ll:1.1
*** /dev/null	Fri Apr 13 17:33:27 2007
--- llvm/test/Transforms/SCCP/apint-basictest.ll	Fri Apr 13 17:33:10 2007
***************
*** 0 ****
--- 1,17 ----
+ ; This is a basic sanity check for constant propogation.  The add instruction 
+ ; should be eliminated.
+ 
+ ; RUN: llvm-as < %s | opt -sccp | llvm-dis -o /dev/null -f &&
+ ; RUN: llvm-as < %s | opt -sccp | llvm-dis | not grep add
+ 
+ define i128 @test(i1 %B) {
+ 	br i1 %B, label %BB1, label %BB2
+ BB1:
+ 	%Val = add i128 0, 1
+ 	br label %BB3
+ BB2:
+ 	br label %BB3
+ BB3:
+ 	%Ret = phi i128 [%Val, %BB1], [2, %BB2]
+ 	ret i128 %Ret
+ }


Index: llvm/test/Transforms/SCCP/apint-basictest2.ll
diff -c /dev/null llvm/test/Transforms/SCCP/apint-basictest2.ll:1.1
*** /dev/null	Fri Apr 13 17:33:27 2007
--- llvm/test/Transforms/SCCP/apint-basictest2.ll	Fri Apr 13 17:33:10 2007
***************
*** 0 ****
--- 1,18 ----
+ ; This is a basic sanity check for constant propogation.  The add instruction 
+ ; and phi instruction should be eliminated.
+ 
+ ; RUN: llvm-as < %s | opt -sccp | llvm-dis -o /dev/null -f &&
+ ; RUN: llvm-as < %s | opt -sccp | llvm-dis | not grep phi
+ ; RUN: llvm-as < %s | opt -sccp | llvm-dis | not grep add
+ 
+ define i128 @test(i1 %B) {
+ 	br i1 %B, label %BB1, label %BB2
+ BB1:
+ 	%Val = add i128 0, 1
+ 	br label %BB3
+ BB2:
+ 	br label %BB3
+ BB3:
+ 	%Ret = phi i128 [%Val, %BB1], [1, %BB2]
+ 	ret i128 %Ret
+ }


Index: llvm/test/Transforms/SCCP/apint-basictest3.ll
diff -c /dev/null llvm/test/Transforms/SCCP/apint-basictest3.ll:1.1
*** /dev/null	Fri Apr 13 17:33:27 2007
--- llvm/test/Transforms/SCCP/apint-basictest3.ll	Fri Apr 13 17:33:10 2007
***************
*** 0 ****
--- 1,24 ----
+ ; This is a basic sanity check for constant propogation.  It tests the basic 
+ ; arithmatic operations.
+ 
+ 
+ ; RUN: llvm-as < %s | opt -sccp | llvm-dis -o /dev/null -f &&
+ ; RUN: llvm-as < %s | opt -sccp | llvm-dis | not grep mul
+ ; RUN: llvm-as < %s | opt -sccp | llvm-dis | not grep umod
+ 
+ define i128 @test(i1 %B) {
+ 	br i1 %B, label %BB1, label %BB2
+ BB1:
+ 	%t1 = add i128 0, 1
+         %t2 = sub i128 0, %t1
+         %t3 = mul i128 %t2, -1
+ 	br label %BB3
+ BB2:
+         %f1 = udiv i128 -1, 1
+         %f2 = add i128 %f1, 1
+         %f3 = umod i128 %f2, 2121
+ 	br label %BB3
+ BB3:
+ 	%Ret = phi i128 [%t3, %BB1], [%f3, %BB2]
+ 	ret i128 %Ret
+ }


Index: llvm/test/Transforms/SCCP/apint-basictest4.ll
diff -c /dev/null llvm/test/Transforms/SCCP/apint-basictest4.ll:1.1
*** /dev/null	Fri Apr 13 17:33:27 2007
--- llvm/test/Transforms/SCCP/apint-basictest4.ll	Fri Apr 13 17:33:10 2007
***************
*** 0 ****
--- 1,26 ----
+ ; This is a basic sanity check for constant propogation.  It tests the basic 
+ ; logic operations.
+ 
+ 
+ ; RUN: llvm-as < %s | opt -sccp | llvm-dis -o /dev/null -f &&
+ ; RUN: llvm-as < %s | opt -sccp | llvm-dis | not grep and
+ ; RUN: llvm-as < %s | opt -sccp | llvm-dis | not grep trunc
+ ; RUN: llvm-as < %s | opt -sccp | llvm-dis | grep "ret i100 -1"
+ 
+ define i100 @test(i133 %A) {
+         %B = and i133 0, %A
+         %C = icmp sgt i133 %B, 0
+ 	br i1 %C, label %BB1, label %BB2
+ BB1:
+         %t3 = xor i133 %B, -1
+         %t4 = trunc i133 %t3 to i100
+ 	br label %BB3
+ BB2:
+         %f1 = or i133 -1, %A
+         %f2 = lshr i133 %f1, 33
+         %f3 = trunc i133 %f2 to i100
+ 	br label %BB3
+ BB3:
+ 	%Ret = phi i100 [%t4, %BB1], [%f3, %BB2]
+ 	ret i100 %Ret
+ }


Index: llvm/test/Transforms/SCCP/apint-bigarray.ll
diff -c /dev/null llvm/test/Transforms/SCCP/apint-bigarray.ll:1.1
*** /dev/null	Fri Apr 13 17:33:27 2007
--- llvm/test/Transforms/SCCP/apint-bigarray.ll	Fri Apr 13 17:33:10 2007
***************
*** 0 ****
--- 1,24 ----
+ ; RUN: llvm-as < %s | opt -sccp | llvm-dis -o /dev/null -f &&
+ ; RUN: llvm-as < %s | opt -sccp | llvm-dis | not grep '%X'
+ 
+ @G =  global [1000000 x i10000] zeroinitializer
+ 
+ define internal i10000* @test(i10000 %Arg) {
+ 	%X = getelementptr [1000000 x i10000]* @G, i32 0, i32 999
+         store i10000 %Arg, i10000* %X
+ 	ret i10000* %X
+ }
+ 
+ define i10000 @caller()
+ {
+         %Y = call i10000* @test(i10000 -1)
+         %Z = load i10000* %Y
+         ret i10000 %Z 
+ }
+ 
+ define i10000 @caller2()
+ {
+         %Y = call i10000* @test(i10000 1)
+         %Z = load i10000* %Y
+         ret i10000 %Z 
+ }


Index: llvm/test/Transforms/SCCP/apint-bigint.ll
diff -c /dev/null llvm/test/Transforms/SCCP/apint-bigint.ll:1.1
*** /dev/null	Fri Apr 13 17:33:27 2007
--- llvm/test/Transforms/SCCP/apint-bigint.ll	Fri Apr 13 17:33:10 2007
***************
*** 0 ****
--- 1,10 ----
+ ; RUN:  llvm-as < %s | opt -sccp | llvm-dis -o /dev/null -f &&
+ ; RUN:  llvm-as < %s | opt -sccp | llvm-dis | not grep xor
+ 
+ define i11129 @test1() {
+         %B = shl i11129 1, 11128 
+         %C = sub i11129 %B, 1
+         %D = xor i11129 %B, %C
+         
+ 	ret i11129 %D
+ }


Index: llvm/test/Transforms/SCCP/apint-bigint2.ll
diff -c /dev/null llvm/test/Transforms/SCCP/apint-bigint2.ll:1.1
*** /dev/null	Fri Apr 13 17:33:27 2007
--- llvm/test/Transforms/SCCP/apint-bigint2.ll	Fri Apr 13 17:33:10 2007
***************
*** 0 ****
--- 1,19 ----
+ ; RUN:  llvm-as < %s | opt -sccp | llvm-dis -o /dev/null -f &&
+ ; RUN:  llvm-as < %s | opt -sccp | llvm-dis | not grep load
+ 
+ @Y = constant [6 x i101] [ i101 12, i101 123456789000000, i101 -12,
+                            i101 -123456789000000, i101 0,i101 9123456789000000]
+ 
+ define i101 @array()
+ {
+ Head:
+    %A = getelementptr [6 x i101]* @Y, i32 0, i32 1
+    %B = load i101* %A
+    %D = and i101 %B, 1
+    %DD = or i101 %D, 1
+    %E = trunc i101 %DD to i32
+    %F = getelementptr [6 x i101]* @Y, i32 0, i32 %E
+    %G = load i101* %F
+  
+    ret i101 %G
+ }


Index: llvm/test/Transforms/SCCP/apint-ipsccp1.ll
diff -c /dev/null llvm/test/Transforms/SCCP/apint-ipsccp1.ll:1.1
*** /dev/null	Fri Apr 13 17:33:27 2007
--- llvm/test/Transforms/SCCP/apint-ipsccp1.ll	Fri Apr 13 17:33:10 2007
***************
*** 0 ****
--- 1,23 ----
+ ; RUN: llvm-as < %s | opt -ipsccp | llvm-dis | grep -v 'ret i512 undef' | grep 'ret i8 2'
+ 
+ define internal i512 @test(i1 %B) {
+ 	br i1 %B, label %BB1, label %BB2
+ BB1:
+ 	%Val = add i512 0, 1
+ 	br label %BB3
+ BB2:
+ 	br label %BB3
+ BB3:
+ 	%Ret = phi i512 [%Val, %BB1], [2, %BB2]
+ 	ret i512 %Ret
+ }
+ 
+ define i8 @caller()
+ {
+     %t1 = and i2 2, 1
+     %t11 = trunc i2 %t1 to i1
+     %t2 = call i512 @test(i1 %t11)
+     %t3 = trunc i512 %t2 to i8
+     ret i8 %t3
+ }
+ 


Index: llvm/test/Transforms/SCCP/apint-ipsccp2.ll
diff -c /dev/null llvm/test/Transforms/SCCP/apint-ipsccp2.ll:1.1
*** /dev/null	Fri Apr 13 17:33:27 2007
--- llvm/test/Transforms/SCCP/apint-ipsccp2.ll	Fri Apr 13 17:33:10 2007
***************
*** 0 ****
--- 1,21 ----
+ ; RUN: llvm-as < %s | opt -ipsccp | llvm-dis -o /dev/null -f &&
+ ; RUN: llvm-as < %s | opt -ipsccp | llvm-dis | grep -v 'ret i101 0' | \
+ ; RUN:    grep -v 'ret i101 undef' | not grep ret
+ 
+ 
+ 
+ define internal i101 @bar(i101 %A) {
+ 	%x = icmp eq i101 %A, 0
+ 	br i1 %x, label %T, label %F
+ T:
+ 	%B = call i101 @bar(i101 0)
+ 	ret i101 0
+ F:      ; unreachable
+ 	%C = call i101 @bar(i101 1)
+ 	ret i101 %C
+ }
+ 
+ define i101 @foo() {
+ 	%X = call i101 @bar(i101 0)
+ 	ret i101 %X
+ }


Index: llvm/test/Transforms/SCCP/apint-ipsccp3.ll
diff -c /dev/null llvm/test/Transforms/SCCP/apint-ipsccp3.ll:1.1
*** /dev/null	Fri Apr 13 17:33:27 2007
--- llvm/test/Transforms/SCCP/apint-ipsccp3.ll	Fri Apr 13 17:33:10 2007
***************
*** 0 ****
--- 1,24 ----
+ ; RUN:  llvm-as < %s | opt -ipsccp | llvm-dis -o /dev/null -f &&
+ ; RUN:  llvm-as < %s | opt -ipsccp | llvm-dis | not grep global
+ 
+ @G = internal global i66 undef
+ 
+ 
+ 
+ define void @foo() {
+ 	%X = load i66* @G
+ 	store i66 %X, i66* @G
+ 	ret void
+ }
+ 
+ define i66 @bar() {
+ 	%V = load i66* @G
+ 	%C = icmp eq i66 %V, 17
+ 	br i1 %C, label %T, label %F
+ T:
+ 	store i66 17, i66* @G
+ 	ret i66 %V
+ F:
+ 	store i66 123, i66* @G
+ 	ret i66 0
+ }


Index: llvm/test/Transforms/SCCP/apint-ipsccp4.ll
diff -c /dev/null llvm/test/Transforms/SCCP/apint-ipsccp4.ll:1.1
*** /dev/null	Fri Apr 13 17:33:27 2007
--- llvm/test/Transforms/SCCP/apint-ipsccp4.ll	Fri Apr 13 17:33:10 2007
***************
*** 0 ****
--- 1,51 ----
+ ; This test makes sure that these instructions are properly constant propagated.
+ ;
+ 
+ ; RUN: llvm-as < %s | opt -ipsccp | llvm-dis -o /dev/null -f &&
+ ; RUN: llvm-as < %s | opt -ipsccp | llvm-dis | not grep load
+ ; RUN: llvm-as < %s | opt -ipsccp | llvm-dis | not grep add
+ ; RUN: llvm-as < %s | opt -ipsccp | llvm-dis | not grep phi
+ 
+ 
+ @Y = constant [2 x { i212, float }] [ { i212, float } { i212 12, float 1.0 }, 
+                                      { i212, float } { i212 37, float 2.0 } ]
+ 
+ define internal float @test2() {
+ 	%A = getelementptr [2 x { i212, float}]* @Y, i32 0, i32 1, i32 1
+ 	%B = load float* %A
+ 	ret float %B
+ }
+ 
+ define internal float  @test3() {
+ 	%A = getelementptr [2 x { i212, float}]* @Y, i32 0, i32 0, i32 1
+ 	%B = load float* %A
+ 	ret float %B
+ }
+ 
+ define internal float @test()
+ {
+    %A = call float @test2()
+    %B = call float @test3()
+ 
+    %E = fdiv float %B, %A
+    ret float %E
+ }
+ 
+ define float @All()
+ {
+   %A = call float @test()
+   %B = fcmp oge float %A, 1.0
+   br i1 %B, label %T, label %F
+ T:
+   %C = add float %A, 1.0
+   br label %exit
+ F:
+   %D = add float %A, 2.0
+   br label %exit
+ exit:
+   %E = phi float [%C, %T], [%D, %F]
+   ret float %E
+ }
+ 
+ 
+ 


Index: llvm/test/Transforms/SCCP/apint-load.ll
diff -c /dev/null llvm/test/Transforms/SCCP/apint-load.ll:1.1
*** /dev/null	Fri Apr 13 17:33:27 2007
--- llvm/test/Transforms/SCCP/apint-load.ll	Fri Apr 13 17:33:10 2007
***************
*** 0 ****
--- 1,38 ----
+ ; This test makes sure that these instructions are properly constant propagated.
+ ;
+ 
+ ; RUN: llvm-as < %s | opt -ipsccp | llvm-dis -o /dev/null -f &&
+ ; RUN: llvm-as < %s | opt -ipsccp | llvm-dis | not grep load
+ ; RUN: llvm-as < %s | opt -ipsccp | llvm-dis | not grep fdiv
+ 
+ @X = constant i212 42
+ @Y = constant [2 x { i212, float }] [ { i212, float } { i212 12, float 1.0 }, 
+                                      { i212, float } { i212 37, float 1.2312 } ]
+ define i212 @test1() {
+ 	%B = load i212* @X
+ 	ret i212 %B
+ }
+ 
+ define internal float @test2() {
+ 	%A = getelementptr [2 x { i212, float}]* @Y, i32 0, i32 1, i32 1
+ 	%B = load float* %A
+ 	ret float %B
+ }
+ 
+ define internal i212 @test3() {
+ 	%A = getelementptr [2 x { i212, float}]* @Y, i32 0, i32 0, i32 0
+ 	%B = load i212* %A
+ 	ret i212 %B
+ }
+ 
+ define float @All()
+ {
+    %A = call float @test2()
+    %B = call i212 @test3()
+    %C = mul i212 %B, -1234567
+    %D = sitofp i212 %C to float
+    %E = fdiv float %A, %D
+    ret float %E
+ }
+ 
+ 


Index: llvm/test/Transforms/SCCP/apint-phi.ll
diff -c /dev/null llvm/test/Transforms/SCCP/apint-phi.ll:1.1
*** /dev/null	Fri Apr 13 17:33:27 2007
--- llvm/test/Transforms/SCCP/apint-phi.ll	Fri Apr 13 17:33:10 2007
***************
*** 0 ****
--- 1,20 ----
+ ; RUN: llvm-as < %s | opt -sccp | llvm-dis -o /dev/null -f &&
+ ; RUN: llvm-as < %s | opt -sccp | llvm-dis | not grep phi
+ 
+ define i999 @test(i999%A, i1 %c) {
+ bb1:
+ 	br label %BB2
+ BB2:
+ 	%V = phi i999 [2, %bb1], [%A, %BB4]
+ 	br label %BB3
+ 
+ BB3:
+         %E = trunc i999 %V to i1
+         %F = and i1 %E, %c
+ 	br i1 %F, label %BB4, label %BB5
+ BB4:
+ 	br label %BB2
+ 
+ BB5:
+ 	ret i999 %V
+ }


Index: llvm/test/Transforms/SCCP/apint-select.ll
diff -c /dev/null llvm/test/Transforms/SCCP/apint-select.ll:1.1
*** /dev/null	Fri Apr 13 17:33:27 2007
--- llvm/test/Transforms/SCCP/apint-select.ll	Fri Apr 13 17:33:10 2007
***************
*** 0 ****
--- 1,22 ----
+ ; RUN:  llvm-as < %s | opt -sccp | llvm-dis -o /dev/null -f &&
+ ; RUN:  llvm-as < %s | opt -sccp | llvm-dis | not grep select
+ 
+ @A = constant i32 10
+ 
+ define i712 @test1() {
+         %P = getelementptr i32* @A, i32 0
+         %B = ptrtoint i32* %P to i64
+         %BB = and i64 %B, undef
+         %C = icmp sge i64 %BB, 0
+ 	%X = select i1 %C, i712 0, i712 1
+ 	ret i712 %X
+ }
+ 
+ 
+ 
+ define i712 @test2(i1 %C) {
+ 	%X = select i1 %C, i712 0, i712 undef
+ 	ret i712 %X
+ }
+ 
+ 






More information about the llvm-commits mailing list