1 ; RUN: llc -march=sparc -O0 <%s 2 ; RUN: llc -march=sparc <%s | FileCheck %s --check-prefix=V8 3 ; RUN: llc -march=sparcv9 <%s | FileCheck %s --check-prefix=V9 4 5 ; V8-LABEL: test 6 ; V8: save %sp 7 ; V8: call foo 8 ; V8-NEXT: nop 9 ; V8: call bar 10 ; V8-NEXT: nop 11 ; V8: ret 12 ; V8-NEXT: restore 13 14 ; V9-LABEL: test 15 ; V9: save %sp 16 ; V9: call foo 17 ; V9-NEXT: nop 18 ; V9: call bar 19 ; V9-NEXT: nop 20 ; V9: ret 21 ; V9-NEXT: restore 22 23 define void @test() nounwind { 24 entry: 25 %0 = tail call i32 (...) @foo() nounwind 26 tail call void (...) @bar() nounwind 27 ret void 28 } 29 30 declare i32 @foo(...) 31 32 declare void @bar(...) 33 34 35 ; V8-LABEL: test_tail_call_with_return 36 ; V8: save %sp 37 ; V8: call foo 38 ; V8-NEXT: nop 39 ; V8: ret 40 ; V8-NEXT: restore %g0, %o0, %o0 41 42 ; V9-LABEL: test_tail_call_with_return 43 ; V9: save %sp 44 ; V9: call foo 45 ; V9-NEXT: nop 46 ; V9: ret 47 ; V9-NEXT: restore %g0, %o0, %o0 48 49 define i32 @test_tail_call_with_return() nounwind { 50 entry: 51 %0 = tail call i32 (...) @foo() nounwind 52 ret i32 %0 53 } 54