[PGO] Use %t as the temporary profdata filename in the test cases.
[oota-llvm.git] / test / Transforms / DeadArgElim / deadretval2.ll
index 76ce84dad87b451efcbcd23538edfa1c6651176e..b0d2428fbdc0186c797beba1e482e0961b88f42b 100644 (file)
@@ -1,4 +1,6 @@
-; 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 i32                ; <i32*> [#uses=1]
 
@@ -18,7 +20,7 @@ define void @test3(i32 %X) {
 }
 
 define internal i32 @foo() {
-        %DEAD = load i32* @P            ; <i32> [#uses=1]
+        %DEAD = load i32, i32* @P            ; <i32> [#uses=1]
         ret i32 %DEAD
 }
 
@@ -31,3 +33,27 @@ define void @test4() {
         %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 
+}
+
+define i32 @test6() {
+  %LIVE = call i32 @test5()
+  ret i32 %LIVE
+}
+
+define i32 @test7() {
+  %LIVE = call i32 @test8()
+  ret i32 %LIVE
+}
+
+define internal i32 @test8() {
+  ret i32 124
+}