blob: fb9b4ac57edda502ad8307510b729055c9a91b50 [file] [log] [blame]
Tim Northovere3d42362013-02-01 11:40:47 +00001; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu -tailcallopt | FileCheck %s -check-prefix CHECK-TAIL
Jiangning Liu09cc5642014-05-15 01:33:17 +00002; RUN: llc -verify-machineinstrs < %s -mtriple=arm64-none-linux-gnu -tailcallopt | FileCheck %s -check-prefix CHECK-ARM64-TAIL
Tim Northovere3d42362013-02-01 11:40:47 +00003; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu | FileCheck %s
Jiangning Liu09cc5642014-05-15 01:33:17 +00004; RUN: llc -verify-machineinstrs < %s -mtriple=arm64-none-linux-gnu | FileCheck --check-prefix=CHECK-ARM64 %s
Tim Northovere0e3aef2013-01-31 12:12:40 +00005
6; Without tailcallopt fastcc still means the caller cleans up the
7; stack, so try to make sure this is respected.
8
9define fastcc void @func_stack0() {
Stephen Lind24ab202013-07-14 06:24:09 +000010; CHECK-LABEL: func_stack0:
Tim Northovere0e3aef2013-01-31 12:12:40 +000011; CHECK: sub sp, sp, #48
12
Jiangning Liu09cc5642014-05-15 01:33:17 +000013; CHECK-ARM64-LABEL: func_stack0:
14; CHECK-ARM64: stp x29, x30, [sp, #-16]!
15; CHECK-ARM64-NEXT: mov x29, sp
16; CHECK-ARM64-NEXT: sub sp, sp, #32
17
Stephen Lind24ab202013-07-14 06:24:09 +000018; CHECK-TAIL-LABEL: func_stack0:
Tim Northovere0e3aef2013-01-31 12:12:40 +000019; CHECK-TAIL: sub sp, sp, #48
20
Jiangning Liu09cc5642014-05-15 01:33:17 +000021; CHECK-ARM64-TAIL-LABEL: func_stack0:
22; CHECK-ARM64-TAIL: stp x29, x30, [sp, #-16]!
23; CHECK-ARM64-TAIL-NEXT: mov x29, sp
24; CHECK-ARM64-TAIL-NEXT: sub sp, sp, #32
25
Tim Northovere0e3aef2013-01-31 12:12:40 +000026
27 call fastcc void @func_stack8([8 x i32] undef, i32 42)
28; CHECK: bl func_stack8
29; CHECK-NOT: sub sp, sp,
30
Jiangning Liu09cc5642014-05-15 01:33:17 +000031; CHECK-ARM64: bl func_stack8
32; CHECK-ARM64-NOT: sub sp, sp,
33
Tim Northovere0e3aef2013-01-31 12:12:40 +000034; CHECK-TAIL: bl func_stack8
35; CHECK-TAIL: sub sp, sp, #16
36
Jiangning Liu09cc5642014-05-15 01:33:17 +000037; CHECK-ARM64-TAIL: bl func_stack8
38; CHECK-ARM64-TAIL: sub sp, sp, #16
39
Tim Northovere0e3aef2013-01-31 12:12:40 +000040
41 call fastcc void @func_stack32([8 x i32] undef, i128 0, i128 9)
42; CHECK: bl func_stack32
43; CHECK-NOT: sub sp, sp,
44
Jiangning Liu09cc5642014-05-15 01:33:17 +000045; CHECK-ARM64: bl func_stack32
46; CHECK-ARM64-NOT: sub sp, sp,
47
Tim Northovere0e3aef2013-01-31 12:12:40 +000048; CHECK-TAIL: bl func_stack32
49; CHECK-TAIL: sub sp, sp, #32
50
Jiangning Liu09cc5642014-05-15 01:33:17 +000051; CHECK-ARM64-TAIL: bl func_stack32
52; CHECK-ARM64-TAIL: sub sp, sp, #32
53
Tim Northovere0e3aef2013-01-31 12:12:40 +000054
55 call fastcc void @func_stack0()
56; CHECK: bl func_stack0
57; CHECK-NOT: sub sp, sp
58
Jiangning Liu09cc5642014-05-15 01:33:17 +000059; CHECK-ARM64: bl func_stack0
60; CHECK-ARM64-NOT: sub sp, sp
61
Tim Northovere0e3aef2013-01-31 12:12:40 +000062; CHECK-TAIL: bl func_stack0
63; CHECK-TAIL-NOT: sub sp, sp
64
Jiangning Liu09cc5642014-05-15 01:33:17 +000065; CHECK-ARM64-TAIL: bl func_stack0
66; CHECK-ARM64-TAIL-NOT: sub sp, sp
67
Tim Northovere0e3aef2013-01-31 12:12:40 +000068 ret void
69; CHECK: add sp, sp, #48
70; CHECK-NEXT: ret
71
Jiangning Liu09cc5642014-05-15 01:33:17 +000072; CHECK-ARM64: mov sp, x29
73; CHECK-ARM64-NEXT: ldp x29, x30, [sp], #16
74; CHECK-ARM64-NEXT: ret
75
Tim Northovere0e3aef2013-01-31 12:12:40 +000076; CHECK-TAIL: add sp, sp, #48
77; CHECK-TAIL-NEXT: ret
78
Jiangning Liu09cc5642014-05-15 01:33:17 +000079; CHECK-ARM64-TAIL: mov sp, x29
80; CHECK-ARM64-TAIL-NEXT: ldp x29, x30, [sp], #16
81; CHECK-ARM64-TAIL-NEXT: ret
Tim Northovere0e3aef2013-01-31 12:12:40 +000082}
83
84define fastcc void @func_stack8([8 x i32], i32 %stacked) {
Stephen Lind24ab202013-07-14 06:24:09 +000085; CHECK-LABEL: func_stack8:
Tim Northovere0e3aef2013-01-31 12:12:40 +000086; CHECK: sub sp, sp, #48
87
Jiangning Liu09cc5642014-05-15 01:33:17 +000088; CHECK-ARM64-LABEL: func_stack8:
89; CHECK-ARM64: stp x29, x30, [sp, #-16]!
90; CHECK-ARM64: mov x29, sp
91; CHECK-ARM64: sub sp, sp, #32
92
Stephen Lind24ab202013-07-14 06:24:09 +000093; CHECK-TAIL-LABEL: func_stack8:
Tim Northovere0e3aef2013-01-31 12:12:40 +000094; CHECK-TAIL: sub sp, sp, #48
95
Jiangning Liu09cc5642014-05-15 01:33:17 +000096; CHECK-ARM64-TAIL-LABEL: func_stack8:
97; CHECK-ARM64-TAIL: stp x29, x30, [sp, #-16]!
98; CHECK-ARM64-TAIL: mov x29, sp
99; CHECK-ARM64-TAIL: sub sp, sp, #32
100
Tim Northovere0e3aef2013-01-31 12:12:40 +0000101
102 call fastcc void @func_stack8([8 x i32] undef, i32 42)
103; CHECK: bl func_stack8
104; CHECK-NOT: sub sp, sp,
105
Jiangning Liu09cc5642014-05-15 01:33:17 +0000106; CHECK-ARM64: bl func_stack8
107; CHECK-ARM64-NOT: sub sp, sp,
108
Tim Northovere0e3aef2013-01-31 12:12:40 +0000109; CHECK-TAIL: bl func_stack8
110; CHECK-TAIL: sub sp, sp, #16
111
Jiangning Liu09cc5642014-05-15 01:33:17 +0000112; CHECK-ARM64-TAIL: bl func_stack8
113; CHECK-ARM64-TAIL: sub sp, sp, #16
114
Tim Northovere0e3aef2013-01-31 12:12:40 +0000115
116 call fastcc void @func_stack32([8 x i32] undef, i128 0, i128 9)
117; CHECK: bl func_stack32
118; CHECK-NOT: sub sp, sp,
119
Jiangning Liu09cc5642014-05-15 01:33:17 +0000120; CHECK-ARM64: bl func_stack32
121; CHECK-ARM64-NOT: sub sp, sp,
122
Tim Northovere0e3aef2013-01-31 12:12:40 +0000123; CHECK-TAIL: bl func_stack32
124; CHECK-TAIL: sub sp, sp, #32
125
Jiangning Liu09cc5642014-05-15 01:33:17 +0000126; CHECK-ARM64-TAIL: bl func_stack32
127; CHECK-ARM64-TAIL: sub sp, sp, #32
128
Tim Northovere0e3aef2013-01-31 12:12:40 +0000129
130 call fastcc void @func_stack0()
131; CHECK: bl func_stack0
132; CHECK-NOT: sub sp, sp
133
Jiangning Liu09cc5642014-05-15 01:33:17 +0000134; CHECK-ARM64: bl func_stack0
135; CHECK-ARM64-NOT: sub sp, sp
136
Tim Northovere0e3aef2013-01-31 12:12:40 +0000137; CHECK-TAIL: bl func_stack0
138; CHECK-TAIL-NOT: sub sp, sp
139
Jiangning Liu09cc5642014-05-15 01:33:17 +0000140; CHECK-ARM64-TAIL: bl func_stack0
141; CHECK-ARM64-TAIL-NOT: sub sp, sp
142
Tim Northovere0e3aef2013-01-31 12:12:40 +0000143 ret void
144; CHECK: add sp, sp, #48
145; CHECK-NEXT: ret
146
Jiangning Liu09cc5642014-05-15 01:33:17 +0000147; CHECK-ARM64: mov sp, x29
148; CHECK-ARM64-NEXT: ldp x29, x30, [sp], #16
149; CHECK-ARM64-NEXT: ret
150
Tim Northovere0e3aef2013-01-31 12:12:40 +0000151; CHECK-TAIL: add sp, sp, #64
152; CHECK-TAIL-NEXT: ret
Jiangning Liu09cc5642014-05-15 01:33:17 +0000153
154; CHECK-ARM64-TAIL: mov sp, x29
155; CHECK-ARM64-TAIL-NEXT: ldp x29, x30, [sp], #16
156; CHECK-ARM64-TAIL-NEXT: ret
Tim Northovere0e3aef2013-01-31 12:12:40 +0000157}
158
159define fastcc void @func_stack32([8 x i32], i128 %stacked0, i128 %stacked1) {
Stephen Lind24ab202013-07-14 06:24:09 +0000160; CHECK-LABEL: func_stack32:
Tim Northovere0e3aef2013-01-31 12:12:40 +0000161; CHECK: sub sp, sp, #48
162
Jiangning Liu09cc5642014-05-15 01:33:17 +0000163; CHECK-ARM64-LABEL: func_stack32:
164; CHECK-ARM64: mov x29, sp
165
Stephen Lind24ab202013-07-14 06:24:09 +0000166; CHECK-TAIL-LABEL: func_stack32:
Tim Northovere0e3aef2013-01-31 12:12:40 +0000167; CHECK-TAIL: sub sp, sp, #48
168
Jiangning Liu09cc5642014-05-15 01:33:17 +0000169; CHECK-ARM64-TAIL-LABEL: func_stack32:
170; CHECK-ARM64-TAIL: mov x29, sp
171
Tim Northovere0e3aef2013-01-31 12:12:40 +0000172
173 call fastcc void @func_stack8([8 x i32] undef, i32 42)
174; CHECK: bl func_stack8
175; CHECK-NOT: sub sp, sp,
176
Jiangning Liu09cc5642014-05-15 01:33:17 +0000177; CHECK-ARM64: bl func_stack8
178; CHECK-ARM64-NOT: sub sp, sp,
179
Tim Northovere0e3aef2013-01-31 12:12:40 +0000180; CHECK-TAIL: bl func_stack8
181; CHECK-TAIL: sub sp, sp, #16
182
Jiangning Liu09cc5642014-05-15 01:33:17 +0000183; CHECK-ARM64-TAIL: bl func_stack8
184; CHECK-ARM64-TAIL: sub sp, sp, #16
185
Tim Northovere0e3aef2013-01-31 12:12:40 +0000186
187 call fastcc void @func_stack32([8 x i32] undef, i128 0, i128 9)
188; CHECK: bl func_stack32
189; CHECK-NOT: sub sp, sp,
190
Jiangning Liu09cc5642014-05-15 01:33:17 +0000191; CHECK-ARM64: bl func_stack32
192; CHECK-ARM64-NOT: sub sp, sp,
193
Tim Northovere0e3aef2013-01-31 12:12:40 +0000194; CHECK-TAIL: bl func_stack32
195; CHECK-TAIL: sub sp, sp, #32
196
Jiangning Liu09cc5642014-05-15 01:33:17 +0000197; CHECK-ARM64-TAIL: bl func_stack32
198; CHECK-ARM64-TAIL: sub sp, sp, #32
199
Tim Northovere0e3aef2013-01-31 12:12:40 +0000200
201 call fastcc void @func_stack0()
202; CHECK: bl func_stack0
203; CHECK-NOT: sub sp, sp
204
Jiangning Liu09cc5642014-05-15 01:33:17 +0000205; CHECK-ARM64: bl func_stack0
206; CHECK-ARM64-NOT: sub sp, sp
207
Tim Northovere0e3aef2013-01-31 12:12:40 +0000208; CHECK-TAIL: bl func_stack0
209; CHECK-TAIL-NOT: sub sp, sp
210
Jiangning Liu09cc5642014-05-15 01:33:17 +0000211; CHECK-ARM64-TAIL: bl func_stack0
212; CHECK-ARM64-TAIL-NOT: sub sp, sp
213
Tim Northovere0e3aef2013-01-31 12:12:40 +0000214 ret void
215; CHECK: add sp, sp, #48
216; CHECK-NEXT: ret
217
Jiangning Liu09cc5642014-05-15 01:33:17 +0000218; CHECK-ARM64: mov sp, x29
219; CHECK-ARM64-NEXT: ldp x29, x30, [sp], #16
220; CHECK-ARM64-NEXT: ret
221
Tim Northovere0e3aef2013-01-31 12:12:40 +0000222; CHECK-TAIL: add sp, sp, #80
223; CHECK-TAIL-NEXT: ret
Jiangning Liu09cc5642014-05-15 01:33:17 +0000224
225; CHECK-ARM64-TAIL: mov sp, x29
226; CHECK-ARM64-TAIL-NEXT: ldp x29, x30, [sp], #16
227; CHECK-ARM64-TAIL-NEXT: ret
Tim Northovere0e3aef2013-01-31 12:12:40 +0000228}