blob: 1c55966e6dd0c9d09fe2f102686fcc42c130fdc3 [file] [log] [blame]
Daniel Cederman92a700a2018-07-16 12:28:26 +00001;RUN: llc -march=sparc -show-mc-encoding < %s | FileCheck %s -check-prefix=V8
Jakob Stoklund Olesen1ec41e22011-04-05 21:40:41 +00002;RUN: llc -march=sparc -mattr=v9 < %s | FileCheck %s -check-prefix=V9
Daniel Cederman92a700a2018-07-16 12:28:26 +00003;RUN: llc -march=sparc -show-mc-encoding -regalloc=basic < %s | FileCheck %s -check-prefix=V8
Jakob Stoklund Olesen1ec41e22011-04-05 21:40:41 +00004;RUN: llc -march=sparc -regalloc=basic -mattr=v9 < %s | FileCheck %s -check-prefix=V9
Venkatraman Govindaraju96ab3bc2014-01-04 07:17:21 +00005;RUN: llc -march=sparcv9 < %s | FileCheck %s -check-prefix=SPARC64
Venkatraman Govindaraju28e2cd02013-06-01 20:42:48 +00006
Venkatraman Govindarajud9645802011-01-12 05:08:36 +00007
8define i8* @frameaddr() nounwind readnone {
9entry:
Stephen Lin6f36b452013-07-18 22:47:09 +000010;V8-LABEL: frameaddr:
Venkatraman Govindaraju0bbe1b22013-06-02 21:48:17 +000011;V8: save %sp, -96, %sp
Venkatraman Govindarajuad40dfc2014-01-10 02:55:27 +000012;V8: ret
Venkatraman Govindaraju0bbe1b22013-06-02 21:48:17 +000013;V8: restore %g0, %fp, %o0
Venkatraman Govindarajuef8cf452011-01-21 22:00:00 +000014
Stephen Lin6f36b452013-07-18 22:47:09 +000015;V9-LABEL: frameaddr:
Venkatraman Govindaraju0bbe1b22013-06-02 21:48:17 +000016;V9: save %sp, -96, %sp
Venkatraman Govindarajuad40dfc2014-01-10 02:55:27 +000017;V9: ret
Venkatraman Govindaraju0bbe1b22013-06-02 21:48:17 +000018;V9: restore %g0, %fp, %o0
Venkatraman Govindaraju96ab3bc2014-01-04 07:17:21 +000019
20;SPARC64-LABEL: frameaddr
21;SPARC64: save %sp, -128, %sp
22;SPARC64: add %fp, 2047, %i0
Venkatraman Govindarajuad40dfc2014-01-10 02:55:27 +000023;SPARC64: ret
Venkatraman Govindarajuf7eecf82014-03-01 01:04:26 +000024;SPARC64-NOT: restore %g0, %g0, %g0
25;SPARC64: restore
Venkatraman Govindaraju96ab3bc2014-01-04 07:17:21 +000026
Venkatraman Govindarajud9645802011-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 Lin6f36b452013-07-18 22:47:09 +000033;V8-LABEL: frameaddr2:
Daniel Cederman92a700a2018-07-16 12:28:26 +000034;V8: ta 3 ! encoding: [0x91,0xd0,0x20,0x03]
Venkatraman Govindarajuef8cf452011-01-21 22:00:00 +000035;V8: ld [%fp+56], {{.+}}
36;V8: ld [{{.+}}+56], {{.+}}
37;V8: ld [{{.+}}+56], {{.+}}
38
Stephen Lin6f36b452013-07-18 22:47:09 +000039;V9-LABEL: frameaddr2:
Venkatraman Govindarajuef8cf452011-01-21 22:00:00 +000040;V9: flushw
41;V9: ld [%fp+56], {{.+}}
42;V9: ld [{{.+}}+56], {{.+}}
43;V9: ld [{{.+}}+56], {{.+}}
Venkatraman Govindaraju96ab3bc2014-01-04 07:17:21 +000044
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 Govindarajud9645802011-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 Lin6f36b452013-07-18 22:47:09 +000062;V8-LABEL: retaddr:
Tim Northover5896b062014-05-16 09:42:04 +000063;V8: mov %o7, {{.+}}
Venkatraman Govindarajuef8cf452011-01-21 22:00:00 +000064
Stephen Lin6f36b452013-07-18 22:47:09 +000065;V9-LABEL: retaddr:
Tim Northover5896b062014-05-16 09:42:04 +000066;V9: mov %o7, {{.+}}
Venkatraman Govindaraju28e2cd02013-06-01 20:42:48 +000067
Venkatraman Govindaraju96ab3bc2014-01-04 07:17:21 +000068;SPARC64-LABEL: retaddr
Tim Northover5896b062014-05-16 09:42:04 +000069;SPARC64: mov %o7, {{.+}}
Venkatraman Govindaraju96ab3bc2014-01-04 07:17:21 +000070
Venkatraman Govindarajud9645802011-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 Lin6f36b452013-07-18 22:47:09 +000077;V8-LABEL: retaddr2:
Venkatraman Govindarajuef8cf452011-01-21 22:00:00 +000078;V8: ta 3
79;V8: ld [%fp+56], {{.+}}
80;V8: ld [{{.+}}+56], {{.+}}
81;V8: ld [{{.+}}+60], {{.+}}
82
Stephen Lin6f36b452013-07-18 22:47:09 +000083;V9-LABEL: retaddr2:
Venkatraman Govindarajuef8cf452011-01-21 22:00:00 +000084;V9: flushw
85;V9: ld [%fp+56], {{.+}}
86;V9: ld [{{.+}}+56], {{.+}}
87;V9: ld [{{.+}}+60], {{.+}}
Venkatraman Govindaraju28e2cd02013-06-01 20:42:48 +000088
Venkatraman Govindaraju96ab3bc2014-01-04 07:17:21 +000089;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 Govindaraju28e2cd02013-06-01 20:42:48 +000094
Venkatraman Govindarajud9645802011-01-12 05:08:36 +000095 %0 = tail call i8* @llvm.returnaddress(i32 3)
96 ret i8* %0
97}
98
Daniel Cederman7d3e08f2018-08-17 09:18:31 +000099define i8* @retaddr3() nounwind readnone {
100entry:
101;V8-LABEL: retaddr3:
102;V8: ta 3
103;V8: ld [%fp+60], {{.+}}
104
105;V9-LABEL: retaddr3:
106;V9: flushw
107;V9: ld [%fp+60], {{.+}}
108
109;SPARC64-LABEL: retaddr3
110;SPARC64: flushw
111;SPARC64: ldx [%fp+2167], %[[R0:[goli][0-7]]]
112
113 %0 = tail call i8* @llvm.returnaddress(i32 1)
114 ret i8* %0
115}
116
Venkatraman Govindarajud9645802011-01-12 05:08:36 +0000117declare i8* @llvm.returnaddress(i32) nounwind readnone