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