1 ;RUN: llc -march=sparc < %s | FileCheck %s -check-prefix=V8
2 ;RUN: llc -march=sparc -mattr=v9 < %s | FileCheck %s -check-prefix=V9
3 ;RUN: llc -march=sparc -regalloc=basic < %s | FileCheck %s -check-prefix=V8
4 ;RUN: llc -march=sparc -regalloc=basic -mattr=v9 < %s | FileCheck %s -check-prefix=V9
7 define i8* @frameaddr() nounwind readnone {
10 ;V8: save %sp, -96, %sp
12 ;V8: restore %g0, %fp, %o0
15 ;V9: save %sp, -96, %sp
17 ;V9: restore %g0, %fp, %o0
18 %0 = tail call i8* @llvm.frameaddress(i32 0)
22 define i8* @frameaddr2() nounwind readnone {
24 ;V8-LABEL: frameaddr2:
26 ;V8: ld [%fp+56], {{.+}}
27 ;V8: ld [{{.+}}+56], {{.+}}
28 ;V8: ld [{{.+}}+56], {{.+}}
30 ;V9-LABEL: frameaddr2:
32 ;V9: ld [%fp+56], {{.+}}
33 ;V9: ld [{{.+}}+56], {{.+}}
34 ;V9: ld [{{.+}}+56], {{.+}}
35 %0 = tail call i8* @llvm.frameaddress(i32 3)
39 declare i8* @llvm.frameaddress(i32) nounwind readnone
43 define i8* @retaddr() nounwind readnone {
46 ;V8: or %g0, %o7, {{.+}}
49 ;V9: or %g0, %o7, {{.+}}
51 %0 = tail call i8* @llvm.returnaddress(i32 0)
55 define i8* @retaddr2() nounwind readnone {
59 ;V8: ld [%fp+56], {{.+}}
60 ;V8: ld [{{.+}}+56], {{.+}}
61 ;V8: ld [{{.+}}+60], {{.+}}
65 ;V9: ld [%fp+56], {{.+}}
66 ;V9: ld [{{.+}}+56], {{.+}}
67 ;V9: ld [{{.+}}+60], {{.+}}
69 ;V8LEAF-LABEL: retaddr2:
71 ;V8LEAF: ld [%fp+56], %[[R:[goli][0-7]]]
72 ;V8LEAF: ld [%[[R]]+56], %[[R1:[goli][0-7]]]
73 ;V8LEAF: ld [%[[R1]]+60], {{.+}}
75 ;V9LEAF-LABEL: retaddr2:
77 ;V9LEAF: ld [%fp+56], %[[R:[goli][0-7]]]
78 ;V9LEAF: ld [%[[R]]+56], %[[R1:[goli][0-7]]]
79 ;V9LEAF: ld [%[[R1]]+60], {{.+}}
81 %0 = tail call i8* @llvm.returnaddress(i32 3)
85 declare i8* @llvm.returnaddress(i32) nounwind readnone