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
 | 
						|
}
 |