aboutsummaryrefslogtreecommitdiffstats
path: root/test/Transforms/DeadArgElim
diff options
context:
space:
mode:
Diffstat (limited to 'test/Transforms/DeadArgElim')
-rw-r--r--test/Transforms/DeadArgElim/2006-06-27-struct-ret.ll13
-rw-r--r--test/Transforms/DeadArgElim/2007-02-07-FuncRename.ll11
-rw-r--r--test/Transforms/DeadArgElim/basictest.ll37
-rw-r--r--test/Transforms/DeadArgElim/dead_vaargs.ll12
-rw-r--r--test/Transforms/DeadArgElim/deadretval.ll19
-rw-r--r--test/Transforms/DeadArgElim/deadretval2.ll36
-rw-r--r--test/Transforms/DeadArgElim/dg.exp3
7 files changed, 131 insertions, 0 deletions
diff --git a/test/Transforms/DeadArgElim/2006-06-27-struct-ret.ll b/test/Transforms/DeadArgElim/2006-06-27-struct-ret.ll
new file mode 100644
index 0000000..2a7b3a1
--- /dev/null
+++ b/test/Transforms/DeadArgElim/2006-06-27-struct-ret.ll
@@ -0,0 +1,13 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -deadargelim -disable-output
+
+implementation
+
+internal csretcc void %build_delaunay({int}* %agg.result) {
+ ret void
+}
+
+void %test() {
+ call csretcc void %build_delaunay({int}* null)
+ ret void
+}
+
diff --git a/test/Transforms/DeadArgElim/2007-02-07-FuncRename.ll b/test/Transforms/DeadArgElim/2007-02-07-FuncRename.ll
new file mode 100644
index 0000000..2b3a2ea
--- /dev/null
+++ b/test/Transforms/DeadArgElim/2007-02-07-FuncRename.ll
@@ -0,0 +1,11 @@
+; RUN: llvm-as < %s | opt -deadargelim | llvm-dis | grep {@test(}
+; RUN: llvm-as < %s | opt -deadargelim | llvm-dis | not grep dead
+
+define internal i32 @test(i32 %X, i32 %dead) {
+ ret i32 %X
+}
+
+define i32 @caller() {
+ %A = call i32 @test(i32 123, i32 456)
+ ret i32 %A
+}
diff --git a/test/Transforms/DeadArgElim/basictest.ll b/test/Transforms/DeadArgElim/basictest.ll
new file mode 100644
index 0000000..a3a4235
--- /dev/null
+++ b/test/Transforms/DeadArgElim/basictest.ll
@@ -0,0 +1,37 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -deadargelim | llvm-dis | not grep DEADARG
+
+implementation
+
+; test - an obviously dead argument
+internal int %test(int %v, int %DEADARG1, int* %p) {
+ store int %v, int* %p
+ ret int %v
+}
+
+; hardertest - an argument which is only used by a call of a function with a
+; dead argument.
+internal int %hardertest(int %DEADARG2) {
+ %p = alloca int
+ %V = call int %test(int 5, int %DEADARG2, int* %p)
+ ret int %V
+}
+
+; evenhardertest - recursive dead argument...
+internal void %evenhardertest(int %DEADARG3) {
+ call void %evenhardertest(int %DEADARG3)
+ ret void
+}
+
+internal void %needarg(int %TEST) {
+ call int %needarg2(int %TEST)
+ ret void
+}
+
+internal int %needarg2(int %TEST) {
+ ret int %TEST
+}
+
+internal void %needarg3(int %TEST3) {
+ call void %needarg(int %TEST3)
+ ret void
+}
diff --git a/test/Transforms/DeadArgElim/dead_vaargs.ll b/test/Transforms/DeadArgElim/dead_vaargs.ll
new file mode 100644
index 0000000..ecb84cc
--- /dev/null
+++ b/test/Transforms/DeadArgElim/dead_vaargs.ll
@@ -0,0 +1,12 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -deadargelim | llvm-dis | not grep 47
+; RUN: llvm-upgrade < %s | llvm-as | opt -deadargelim | llvm-dis | not grep 1.0
+
+int %bar(int %A) {
+ %tmp4 = tail call int (int, ...)* %foo( int %A, int %A, int %A, int %A, ulong 47, double 1.000000e+00 )
+ ret int %tmp4
+}
+
+internal int %foo(int %X, ...) {
+ ret int %X
+}
+
diff --git a/test/Transforms/DeadArgElim/deadretval.ll b/test/Transforms/DeadArgElim/deadretval.ll
new file mode 100644
index 0000000..ccfbc2f
--- /dev/null
+++ b/test/Transforms/DeadArgElim/deadretval.ll
@@ -0,0 +1,19 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -deadargelim | llvm-dis | not grep DEAD
+
+implementation
+
+internal int %test(int %DEADARG) { ; Dead arg only used by dead retval
+ ret int %DEADARG
+}
+
+int %test2(int %A) {
+ %DEAD = call int %test(int %A)
+ ret int 123
+}
+
+int %test3() {
+ %X = call int %test2(int 3232)
+ %Y = add int %X, -123
+ ret int %Y
+}
+
diff --git a/test/Transforms/DeadArgElim/deadretval2.ll b/test/Transforms/DeadArgElim/deadretval2.ll
new file mode 100644
index 0000000..4f129ab
--- /dev/null
+++ b/test/Transforms/DeadArgElim/deadretval2.ll
@@ -0,0 +1,36 @@
+; RUN: llvm-upgrade < %s | llvm-as | opt -deadargelim -die | llvm-dis | not grep DEAD
+
+%P = external global int
+
+implementation
+
+
+internal int %test(int %DEADARG) { ; Dead arg only used by dead retval
+ ret int %DEADARG
+}
+
+internal int %test2(int %DEADARG) {
+ %DEADRETVAL = call int %test(int %DEADARG)
+ ret int %DEADRETVAL
+}
+
+void %test3(int %X) {
+ %DEADRETVAL = call int %test2(int %X)
+ ret void
+}
+
+internal int %foo() {
+ %DEAD = load int* %P
+ ret int %DEAD
+}
+
+internal int %id(int %X) {
+ ret int %X
+}
+
+void %test4() {
+ %DEAD = call int %foo()
+ %DEAD2 = call int %id(int %DEAD)
+ ret void
+}
+
diff --git a/test/Transforms/DeadArgElim/dg.exp b/test/Transforms/DeadArgElim/dg.exp
new file mode 100644
index 0000000..879685c
--- /dev/null
+++ b/test/Transforms/DeadArgElim/dg.exp
@@ -0,0 +1,3 @@
+load_lib llvm.exp
+
+RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,llx,c,cpp,tr}]]