forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			LLVM
		
	
	
	
| ; 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]
 | |
| 
 | |
| ; 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
 | |
| }
 | |
| 
 | |
| define internal i32 @foo() {
 | |
|         %DEAD = load i32* @P            ; <i32> [#uses=1]
 | |
|         ret i32 %DEAD
 | |
| }
 | |
| 
 | |
| define internal i32 @id(i32 %X) {
 | |
|         ret i32 %X
 | |
| }
 | |
| 
 | |
| 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 
 | |
| }
 | |
| 
 | |
| 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
 | |
| }
 |