Home | History | Annotate | Download | only in SPARC
      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