Fix test.
[oota-llvm.git] / test / Transforms / DeadArgElim / deadretval2.ll
index 2596fa66fa2bb80a1c469aa90c84b02c01deb4a0..dcdc36e319a3cde2339dfc734579fd9151e69ec3 100644 (file)
@@ -1,36 +1,59 @@
-; RUN: llvm-as < %s | opt -deadargelim -die | llvm-dis | not grep DEAD
+; RUN: opt < %s -deadargelim -die -S > %t
+; RUN: cat %t | not grep DEAD
+; RUN: cat %t | grep LIVE | count 4
 
-%P = external global int 
+@P = external global i32                ; <i32*> [#uses=1]
 
-implementation
+; Dead arg only used by dead retval
+define internal i32 @test(i32 %DEADARG) {
+        ret i32 %DEADARG
+}
+
+define internal i32 @test2(i32 %DEADARG) {
+        %DEADRETVAL = call i32 @test( i32 %DEADARG )            ; <i32> [#uses=1]
+        ret i32 %DEADRETVAL
+}
 
+define void @test3(i32 %X) {
+        %DEADRETVAL = call i32 @test2( i32 %X )         ; <i32> [#uses=0]
+        ret void
+}
 
-internal int %test(int %DEADARG) {  ; Dead arg only used by dead retval
-        ret int %DEADARG
+define internal i32 @foo() {
+        %DEAD = load i32* @P            ; <i32> [#uses=1]
+        ret i32 %DEAD
 }
 
-internal int %test2(int %DEADARG) {
-       %DEADRETVAL = call int %test(int %DEADARG)
-       ret int %DEADRETVAL
+define internal i32 @id(i32 %X) {
+        ret i32 %X
 }
 
-void %test3(int %X) {
-       %DEADRETVAL = call int %test2(int %X)
-       ret void
+define void @test4() {
+        %DEAD = call i32 @foo( )                ; <i32> [#uses=1]
+        %DEAD2 = call i32 @id( i32 %DEAD )              ; <i32> [#uses=0]
+        ret void
+}
+
+; These test if returning another functions return value properly marks that
+; other function's return value as live. We do this twice, with the functions in
+; different orders (ie, first the caller, than the callee and first the callee
+; and then the caller) since DAE processes functions one by one and handles
+; these cases slightly different.
+
+define internal i32 @test5() {
+  ret i32 123 
 }
 
-internal int %foo() {
-       %DEAD = load int* %P
-       ret int %DEAD
+define i32 @test6() {
+  %LIVE = call i32 @test5()
+  ret i32 %LIVE
 }
 
-internal int %id(int %X) {
-       ret int %X
+define i32 @test7() {
+  %LIVE = call i32 @test8()
+  ret i32 %LIVE
 }
 
-void %test4() {
-       %DEAD = call int %foo()
-       %DEAD2 = call int %id(int %DEAD)
-       ret void
+define internal i32 @test8() {
+  ret i32 124
 }
-