forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			54 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			LLVM
		
	
	
	
| ; RUN: llc -march=sparc -O0 <%s
 | |
| ; RUN: llc -march=sparc   <%s | FileCheck %s --check-prefix=V8
 | |
| ; RUN: llc -march=sparcv9 <%s | FileCheck %s --check-prefix=V9
 | |
| 
 | |
| ; V8-LABEL: test
 | |
| ; V8:       save %sp
 | |
| ; V8:       call foo
 | |
| ; V8-NEXT:  nop
 | |
| ; V8:       call bar
 | |
| ; V8-NEXT:  nop
 | |
| ; V8:       ret
 | |
| ; V8-NEXT:  restore
 | |
| 
 | |
| ; V9-LABEL: test
 | |
| ; V9:       save %sp
 | |
| ; V9:       call foo
 | |
| ; V9-NEXT:  nop
 | |
| ; V9:       call bar
 | |
| ; V9-NEXT:  nop
 | |
| ; V9:       ret
 | |
| ; V9-NEXT:  restore
 | |
| 
 | |
| define void @test() nounwind {
 | |
| entry:
 | |
|  %0 = tail call i32 (...) @foo() nounwind
 | |
|  tail call void (...) @bar() nounwind
 | |
|  ret void
 | |
| }
 | |
| 
 | |
| declare i32 @foo(...)
 | |
| 
 | |
| declare void @bar(...)
 | |
| 
 | |
| 
 | |
| ; V8-LABEL: test_tail_call_with_return
 | |
| ; V8:       save %sp
 | |
| ; V8:       call foo
 | |
| ; V8-NEXT:  nop
 | |
| ; V8:       ret
 | |
| ; V8-NEXT:  restore %g0, %o0, %o0
 | |
| 
 | |
| ; V9-LABEL: test_tail_call_with_return
 | |
| ; V9:       save %sp
 | |
| ; V9:       call foo
 | |
| ; V9-NEXT:  nop
 | |
| ; V9:       ret
 | |
| ; V9-NEXT:  restore %g0, %o0, %o0
 | |
| 
 | |
| define i32 @test_tail_call_with_return() nounwind {
 | |
| entry:
 | |
|  %0 = tail call i32 (...) @foo() nounwind
 | |
|  ret i32 %0
 | |
| }
 |