blob: 050b76d514d128e1d865fb5e8b4a2868e8d85645 [file] [log] [blame]
Jakob Stoklund Olesenc5ddb742011-04-05 21:40:41 +00001;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
Stephen Hines36b56882014-04-23 16:57:46 -07005;RUN: llc -march=sparcv9 < %s | FileCheck %s -check-prefix=SPARC64
Venkatraman Govindarajua0b34d62013-06-01 20:42:48 +00006
Venkatraman Govindaraju860b64c2011-01-12 05:08:36 +00007
8define i8* @frameaddr() nounwind readnone {
9entry:
Stephen Lincf2ab762013-07-18 22:47:09 +000010;V8-LABEL: frameaddr:
Venkatraman Govindaraju65ca7aa2013-06-02 21:48:17 +000011;V8: save %sp, -96, %sp
Stephen Hines36b56882014-04-23 16:57:46 -070012;V8: ret
Venkatraman Govindaraju65ca7aa2013-06-02 21:48:17 +000013;V8: restore %g0, %fp, %o0
Venkatraman Govindarajufc3faa72011-01-21 22:00:00 +000014
Stephen Lincf2ab762013-07-18 22:47:09 +000015;V9-LABEL: frameaddr:
Venkatraman Govindaraju65ca7aa2013-06-02 21:48:17 +000016;V9: save %sp, -96, %sp
Stephen Hines36b56882014-04-23 16:57:46 -070017;V9: ret
Venkatraman Govindaraju65ca7aa2013-06-02 21:48:17 +000018;V9: restore %g0, %fp, %o0
Stephen Hines36b56882014-04-23 16:57:46 -070019
20;SPARC64-LABEL: frameaddr
21;SPARC64: save %sp, -128, %sp
22;SPARC64: add %fp, 2047, %i0
23;SPARC64: ret
24;SPARC64-NOT: restore %g0, %g0, %g0
25;SPARC64: restore
26
Venkatraman Govindaraju860b64c2011-01-12 05:08:36 +000027 %0 = tail call i8* @llvm.frameaddress(i32 0)
28 ret i8* %0
29}
30
31define i8* @frameaddr2() nounwind readnone {
32entry:
Stephen Lincf2ab762013-07-18 22:47:09 +000033;V8-LABEL: frameaddr2:
Venkatraman Govindarajufc3faa72011-01-21 22:00:00 +000034;V8: ta 3
35;V8: ld [%fp+56], {{.+}}
36;V8: ld [{{.+}}+56], {{.+}}
37;V8: ld [{{.+}}+56], {{.+}}
38
Stephen Lincf2ab762013-07-18 22:47:09 +000039;V9-LABEL: frameaddr2:
Venkatraman Govindarajufc3faa72011-01-21 22:00:00 +000040;V9: flushw
41;V9: ld [%fp+56], {{.+}}
42;V9: ld [{{.+}}+56], {{.+}}
43;V9: ld [{{.+}}+56], {{.+}}
Stephen Hines36b56882014-04-23 16:57:46 -070044
45;SPARC64-LABEL: frameaddr2
46;SPARC64: flushw
47;SPARC64: ldx [%fp+2159], %[[R0:[goli][0-7]]]
48;SPARC64: ldx [%[[R0]]+2159], %[[R1:[goli][0-7]]]
49;SPARC64: ldx [%[[R1]]+2159], %[[R2:[goli][0-7]]]
50;SPARC64: add %[[R2]], 2047, {{.+}}
51
Venkatraman Govindaraju860b64c2011-01-12 05:08:36 +000052 %0 = tail call i8* @llvm.frameaddress(i32 3)
53 ret i8* %0
54}
55
56declare i8* @llvm.frameaddress(i32) nounwind readnone
57
58
59
60define i8* @retaddr() nounwind readnone {
61entry:
Stephen Lincf2ab762013-07-18 22:47:09 +000062;V8-LABEL: retaddr:
Venkatraman Govindarajudd482262013-06-02 02:24:27 +000063;V8: or %g0, %o7, {{.+}}
Venkatraman Govindarajufc3faa72011-01-21 22:00:00 +000064
Stephen Lincf2ab762013-07-18 22:47:09 +000065;V9-LABEL: retaddr:
Venkatraman Govindarajudd482262013-06-02 02:24:27 +000066;V9: or %g0, %o7, {{.+}}
Venkatraman Govindarajua0b34d62013-06-01 20:42:48 +000067
Stephen Hines36b56882014-04-23 16:57:46 -070068;SPARC64-LABEL: retaddr
69;SPARC64: or %g0, %o7, {{.+}}
70
Venkatraman Govindaraju860b64c2011-01-12 05:08:36 +000071 %0 = tail call i8* @llvm.returnaddress(i32 0)
72 ret i8* %0
73}
74
75define i8* @retaddr2() nounwind readnone {
76entry:
Stephen Lincf2ab762013-07-18 22:47:09 +000077;V8-LABEL: retaddr2:
Venkatraman Govindarajufc3faa72011-01-21 22:00:00 +000078;V8: ta 3
79;V8: ld [%fp+56], {{.+}}
80;V8: ld [{{.+}}+56], {{.+}}
81;V8: ld [{{.+}}+60], {{.+}}
82
Stephen Lincf2ab762013-07-18 22:47:09 +000083;V9-LABEL: retaddr2:
Venkatraman Govindarajufc3faa72011-01-21 22:00:00 +000084;V9: flushw
85;V9: ld [%fp+56], {{.+}}
86;V9: ld [{{.+}}+56], {{.+}}
87;V9: ld [{{.+}}+60], {{.+}}
Venkatraman Govindarajua0b34d62013-06-01 20:42:48 +000088
Stephen Hines36b56882014-04-23 16:57:46 -070089;SPARC64-LABEL: retaddr2
90;SPARC64: flushw
91;SPARC64: ldx [%fp+2159], %[[R0:[goli][0-7]]]
92;SPARC64: ldx [%[[R0]]+2159], %[[R1:[goli][0-7]]]
93;SPARC64: ldx [%[[R1]]+2167], {{.+}}
Venkatraman Govindarajua0b34d62013-06-01 20:42:48 +000094
Venkatraman Govindaraju860b64c2011-01-12 05:08:36 +000095 %0 = tail call i8* @llvm.returnaddress(i32 3)
96 ret i8* %0
97}
98
99declare i8* @llvm.returnaddress(i32) nounwind readnone