[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / llvm / test / CodeGen / RISCV / stack-realignment.ll
blob18cb7dd22d45a8094fc873b77cafa75565de8a65
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \
3 ; RUN:   | FileCheck %s -check-prefix=RV32I
4 ; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
5 ; RUN:   | FileCheck %s -check-prefix=RV64I
7 declare void @callee(i8*)
9 define void @caller32() {
10 ; RV32I-LABEL: caller32:
11 ; RV32I:       # %bb.0:
12 ; RV32I-NEXT:    addi sp, sp, -32
13 ; RV32I-NEXT:    .cfi_def_cfa_offset 32
14 ; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
15 ; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
16 ; RV32I-NEXT:    .cfi_offset ra, -4
17 ; RV32I-NEXT:    .cfi_offset s0, -8
18 ; RV32I-NEXT:    addi s0, sp, 32
19 ; RV32I-NEXT:    .cfi_def_cfa s0, 0
20 ; RV32I-NEXT:    andi sp, sp, -32
21 ; RV32I-NEXT:    mv a0, sp
22 ; RV32I-NEXT:    call callee@plt
23 ; RV32I-NEXT:    addi sp, s0, -32
24 ; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
25 ; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
26 ; RV32I-NEXT:    addi sp, sp, 32
27 ; RV32I-NEXT:    ret
29 ; RV64I-LABEL: caller32:
30 ; RV64I:       # %bb.0:
31 ; RV64I-NEXT:    addi sp, sp, -32
32 ; RV64I-NEXT:    .cfi_def_cfa_offset 32
33 ; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
34 ; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
35 ; RV64I-NEXT:    .cfi_offset ra, -8
36 ; RV64I-NEXT:    .cfi_offset s0, -16
37 ; RV64I-NEXT:    addi s0, sp, 32
38 ; RV64I-NEXT:    .cfi_def_cfa s0, 0
39 ; RV64I-NEXT:    andi sp, sp, -32
40 ; RV64I-NEXT:    mv a0, sp
41 ; RV64I-NEXT:    call callee@plt
42 ; RV64I-NEXT:    addi sp, s0, -32
43 ; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
44 ; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
45 ; RV64I-NEXT:    addi sp, sp, 32
46 ; RV64I-NEXT:    ret
47   %1 = alloca i8, align 32
48   call void @callee(i8* %1)
49   ret void
52 define void @caller_no_realign32() "no-realign-stack" {
53 ; RV32I-LABEL: caller_no_realign32:
54 ; RV32I:       # %bb.0:
55 ; RV32I-NEXT:    addi sp, sp, -16
56 ; RV32I-NEXT:    .cfi_def_cfa_offset 16
57 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
58 ; RV32I-NEXT:    .cfi_offset ra, -4
59 ; RV32I-NEXT:    mv a0, sp
60 ; RV32I-NEXT:    call callee@plt
61 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
62 ; RV32I-NEXT:    addi sp, sp, 16
63 ; RV32I-NEXT:    ret
65 ; RV64I-LABEL: caller_no_realign32:
66 ; RV64I:       # %bb.0:
67 ; RV64I-NEXT:    addi sp, sp, -16
68 ; RV64I-NEXT:    .cfi_def_cfa_offset 16
69 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
70 ; RV64I-NEXT:    .cfi_offset ra, -8
71 ; RV64I-NEXT:    mv a0, sp
72 ; RV64I-NEXT:    call callee@plt
73 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
74 ; RV64I-NEXT:    addi sp, sp, 16
75 ; RV64I-NEXT:    ret
76   %1 = alloca i8, align 32
77   call void @callee(i8* %1)
78   ret void
81 define void @caller64() {
82 ; RV32I-LABEL: caller64:
83 ; RV32I:       # %bb.0:
84 ; RV32I-NEXT:    addi sp, sp, -64
85 ; RV32I-NEXT:    .cfi_def_cfa_offset 64
86 ; RV32I-NEXT:    sw ra, 60(sp) # 4-byte Folded Spill
87 ; RV32I-NEXT:    sw s0, 56(sp) # 4-byte Folded Spill
88 ; RV32I-NEXT:    .cfi_offset ra, -4
89 ; RV32I-NEXT:    .cfi_offset s0, -8
90 ; RV32I-NEXT:    addi s0, sp, 64
91 ; RV32I-NEXT:    .cfi_def_cfa s0, 0
92 ; RV32I-NEXT:    andi sp, sp, -64
93 ; RV32I-NEXT:    mv a0, sp
94 ; RV32I-NEXT:    call callee@plt
95 ; RV32I-NEXT:    addi sp, s0, -64
96 ; RV32I-NEXT:    lw ra, 60(sp) # 4-byte Folded Reload
97 ; RV32I-NEXT:    lw s0, 56(sp) # 4-byte Folded Reload
98 ; RV32I-NEXT:    addi sp, sp, 64
99 ; RV32I-NEXT:    ret
101 ; RV64I-LABEL: caller64:
102 ; RV64I:       # %bb.0:
103 ; RV64I-NEXT:    addi sp, sp, -64
104 ; RV64I-NEXT:    .cfi_def_cfa_offset 64
105 ; RV64I-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
106 ; RV64I-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
107 ; RV64I-NEXT:    .cfi_offset ra, -8
108 ; RV64I-NEXT:    .cfi_offset s0, -16
109 ; RV64I-NEXT:    addi s0, sp, 64
110 ; RV64I-NEXT:    .cfi_def_cfa s0, 0
111 ; RV64I-NEXT:    andi sp, sp, -64
112 ; RV64I-NEXT:    mv a0, sp
113 ; RV64I-NEXT:    call callee@plt
114 ; RV64I-NEXT:    addi sp, s0, -64
115 ; RV64I-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
116 ; RV64I-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
117 ; RV64I-NEXT:    addi sp, sp, 64
118 ; RV64I-NEXT:    ret
119   %1 = alloca i8, align 64
120   call void @callee(i8* %1)
121   ret void
124 define void @caller_no_realign64() "no-realign-stack" {
125 ; RV32I-LABEL: caller_no_realign64:
126 ; RV32I:       # %bb.0:
127 ; RV32I-NEXT:    addi sp, sp, -16
128 ; RV32I-NEXT:    .cfi_def_cfa_offset 16
129 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
130 ; RV32I-NEXT:    .cfi_offset ra, -4
131 ; RV32I-NEXT:    mv a0, sp
132 ; RV32I-NEXT:    call callee@plt
133 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
134 ; RV32I-NEXT:    addi sp, sp, 16
135 ; RV32I-NEXT:    ret
137 ; RV64I-LABEL: caller_no_realign64:
138 ; RV64I:       # %bb.0:
139 ; RV64I-NEXT:    addi sp, sp, -16
140 ; RV64I-NEXT:    .cfi_def_cfa_offset 16
141 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
142 ; RV64I-NEXT:    .cfi_offset ra, -8
143 ; RV64I-NEXT:    mv a0, sp
144 ; RV64I-NEXT:    call callee@plt
145 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
146 ; RV64I-NEXT:    addi sp, sp, 16
147 ; RV64I-NEXT:    ret
148   %1 = alloca i8, align 64
149   call void @callee(i8* %1)
150   ret void
153 define void @caller128() {
154 ; RV32I-LABEL: caller128:
155 ; RV32I:       # %bb.0:
156 ; RV32I-NEXT:    addi sp, sp, -128
157 ; RV32I-NEXT:    .cfi_def_cfa_offset 128
158 ; RV32I-NEXT:    sw ra, 124(sp) # 4-byte Folded Spill
159 ; RV32I-NEXT:    sw s0, 120(sp) # 4-byte Folded Spill
160 ; RV32I-NEXT:    .cfi_offset ra, -4
161 ; RV32I-NEXT:    .cfi_offset s0, -8
162 ; RV32I-NEXT:    addi s0, sp, 128
163 ; RV32I-NEXT:    .cfi_def_cfa s0, 0
164 ; RV32I-NEXT:    andi sp, sp, -128
165 ; RV32I-NEXT:    mv a0, sp
166 ; RV32I-NEXT:    call callee@plt
167 ; RV32I-NEXT:    addi sp, s0, -128
168 ; RV32I-NEXT:    lw ra, 124(sp) # 4-byte Folded Reload
169 ; RV32I-NEXT:    lw s0, 120(sp) # 4-byte Folded Reload
170 ; RV32I-NEXT:    addi sp, sp, 128
171 ; RV32I-NEXT:    ret
173 ; RV64I-LABEL: caller128:
174 ; RV64I:       # %bb.0:
175 ; RV64I-NEXT:    addi sp, sp, -128
176 ; RV64I-NEXT:    .cfi_def_cfa_offset 128
177 ; RV64I-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
178 ; RV64I-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
179 ; RV64I-NEXT:    .cfi_offset ra, -8
180 ; RV64I-NEXT:    .cfi_offset s0, -16
181 ; RV64I-NEXT:    addi s0, sp, 128
182 ; RV64I-NEXT:    .cfi_def_cfa s0, 0
183 ; RV64I-NEXT:    andi sp, sp, -128
184 ; RV64I-NEXT:    mv a0, sp
185 ; RV64I-NEXT:    call callee@plt
186 ; RV64I-NEXT:    addi sp, s0, -128
187 ; RV64I-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
188 ; RV64I-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
189 ; RV64I-NEXT:    addi sp, sp, 128
190 ; RV64I-NEXT:    ret
191   %1 = alloca i8, align 128
192   call void @callee(i8* %1)
193   ret void
196 define void @caller_no_realign128() "no-realign-stack" {
197 ; RV32I-LABEL: caller_no_realign128:
198 ; RV32I:       # %bb.0:
199 ; RV32I-NEXT:    addi sp, sp, -16
200 ; RV32I-NEXT:    .cfi_def_cfa_offset 16
201 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
202 ; RV32I-NEXT:    .cfi_offset ra, -4
203 ; RV32I-NEXT:    mv a0, sp
204 ; RV32I-NEXT:    call callee@plt
205 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
206 ; RV32I-NEXT:    addi sp, sp, 16
207 ; RV32I-NEXT:    ret
209 ; RV64I-LABEL: caller_no_realign128:
210 ; RV64I:       # %bb.0:
211 ; RV64I-NEXT:    addi sp, sp, -16
212 ; RV64I-NEXT:    .cfi_def_cfa_offset 16
213 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
214 ; RV64I-NEXT:    .cfi_offset ra, -8
215 ; RV64I-NEXT:    mv a0, sp
216 ; RV64I-NEXT:    call callee@plt
217 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
218 ; RV64I-NEXT:    addi sp, sp, 16
219 ; RV64I-NEXT:    ret
220   %1 = alloca i8, align 128
221   call void @callee(i8* %1)
222   ret void
225 define void @caller256() {
226 ; RV32I-LABEL: caller256:
227 ; RV32I:       # %bb.0:
228 ; RV32I-NEXT:    addi sp, sp, -256
229 ; RV32I-NEXT:    .cfi_def_cfa_offset 256
230 ; RV32I-NEXT:    sw ra, 252(sp) # 4-byte Folded Spill
231 ; RV32I-NEXT:    sw s0, 248(sp) # 4-byte Folded Spill
232 ; RV32I-NEXT:    .cfi_offset ra, -4
233 ; RV32I-NEXT:    .cfi_offset s0, -8
234 ; RV32I-NEXT:    addi s0, sp, 256
235 ; RV32I-NEXT:    .cfi_def_cfa s0, 0
236 ; RV32I-NEXT:    andi sp, sp, -256
237 ; RV32I-NEXT:    mv a0, sp
238 ; RV32I-NEXT:    call callee@plt
239 ; RV32I-NEXT:    addi sp, s0, -256
240 ; RV32I-NEXT:    lw ra, 252(sp) # 4-byte Folded Reload
241 ; RV32I-NEXT:    lw s0, 248(sp) # 4-byte Folded Reload
242 ; RV32I-NEXT:    addi sp, sp, 256
243 ; RV32I-NEXT:    ret
245 ; RV64I-LABEL: caller256:
246 ; RV64I:       # %bb.0:
247 ; RV64I-NEXT:    addi sp, sp, -256
248 ; RV64I-NEXT:    .cfi_def_cfa_offset 256
249 ; RV64I-NEXT:    sd ra, 248(sp) # 8-byte Folded Spill
250 ; RV64I-NEXT:    sd s0, 240(sp) # 8-byte Folded Spill
251 ; RV64I-NEXT:    .cfi_offset ra, -8
252 ; RV64I-NEXT:    .cfi_offset s0, -16
253 ; RV64I-NEXT:    addi s0, sp, 256
254 ; RV64I-NEXT:    .cfi_def_cfa s0, 0
255 ; RV64I-NEXT:    andi sp, sp, -256
256 ; RV64I-NEXT:    mv a0, sp
257 ; RV64I-NEXT:    call callee@plt
258 ; RV64I-NEXT:    addi sp, s0, -256
259 ; RV64I-NEXT:    ld ra, 248(sp) # 8-byte Folded Reload
260 ; RV64I-NEXT:    ld s0, 240(sp) # 8-byte Folded Reload
261 ; RV64I-NEXT:    addi sp, sp, 256
262 ; RV64I-NEXT:    ret
263   %1 = alloca i8, align 256
264   call void @callee(i8* %1)
265   ret void
268 define void @caller_no_realign256() "no-realign-stack" {
269 ; RV32I-LABEL: caller_no_realign256:
270 ; RV32I:       # %bb.0:
271 ; RV32I-NEXT:    addi sp, sp, -16
272 ; RV32I-NEXT:    .cfi_def_cfa_offset 16
273 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
274 ; RV32I-NEXT:    .cfi_offset ra, -4
275 ; RV32I-NEXT:    mv a0, sp
276 ; RV32I-NEXT:    call callee@plt
277 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
278 ; RV32I-NEXT:    addi sp, sp, 16
279 ; RV32I-NEXT:    ret
281 ; RV64I-LABEL: caller_no_realign256:
282 ; RV64I:       # %bb.0:
283 ; RV64I-NEXT:    addi sp, sp, -16
284 ; RV64I-NEXT:    .cfi_def_cfa_offset 16
285 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
286 ; RV64I-NEXT:    .cfi_offset ra, -8
287 ; RV64I-NEXT:    mv a0, sp
288 ; RV64I-NEXT:    call callee@plt
289 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
290 ; RV64I-NEXT:    addi sp, sp, 16
291 ; RV64I-NEXT:    ret
292   %1 = alloca i8, align 256
293   call void @callee(i8* %1)
294   ret void
297 define void @caller512() {
298 ; RV32I-LABEL: caller512:
299 ; RV32I:       # %bb.0:
300 ; RV32I-NEXT:    addi sp, sp, -1024
301 ; RV32I-NEXT:    .cfi_def_cfa_offset 1024
302 ; RV32I-NEXT:    sw ra, 1020(sp) # 4-byte Folded Spill
303 ; RV32I-NEXT:    sw s0, 1016(sp) # 4-byte Folded Spill
304 ; RV32I-NEXT:    .cfi_offset ra, -4
305 ; RV32I-NEXT:    .cfi_offset s0, -8
306 ; RV32I-NEXT:    addi s0, sp, 1024
307 ; RV32I-NEXT:    .cfi_def_cfa s0, 0
308 ; RV32I-NEXT:    andi sp, sp, -512
309 ; RV32I-NEXT:    addi a0, sp, 512
310 ; RV32I-NEXT:    call callee@plt
311 ; RV32I-NEXT:    addi sp, s0, -1024
312 ; RV32I-NEXT:    lw ra, 1020(sp) # 4-byte Folded Reload
313 ; RV32I-NEXT:    lw s0, 1016(sp) # 4-byte Folded Reload
314 ; RV32I-NEXT:    addi sp, sp, 1024
315 ; RV32I-NEXT:    ret
317 ; RV64I-LABEL: caller512:
318 ; RV64I:       # %bb.0:
319 ; RV64I-NEXT:    addi sp, sp, -1024
320 ; RV64I-NEXT:    .cfi_def_cfa_offset 1024
321 ; RV64I-NEXT:    sd ra, 1016(sp) # 8-byte Folded Spill
322 ; RV64I-NEXT:    sd s0, 1008(sp) # 8-byte Folded Spill
323 ; RV64I-NEXT:    .cfi_offset ra, -8
324 ; RV64I-NEXT:    .cfi_offset s0, -16
325 ; RV64I-NEXT:    addi s0, sp, 1024
326 ; RV64I-NEXT:    .cfi_def_cfa s0, 0
327 ; RV64I-NEXT:    andi sp, sp, -512
328 ; RV64I-NEXT:    addi a0, sp, 512
329 ; RV64I-NEXT:    call callee@plt
330 ; RV64I-NEXT:    addi sp, s0, -1024
331 ; RV64I-NEXT:    ld ra, 1016(sp) # 8-byte Folded Reload
332 ; RV64I-NEXT:    ld s0, 1008(sp) # 8-byte Folded Reload
333 ; RV64I-NEXT:    addi sp, sp, 1024
334 ; RV64I-NEXT:    ret
335   %1 = alloca i8, align 512
336   call void @callee(i8* %1)
337   ret void
340 define void @caller_no_realign512() "no-realign-stack" {
341 ; RV32I-LABEL: caller_no_realign512:
342 ; RV32I:       # %bb.0:
343 ; RV32I-NEXT:    addi sp, sp, -16
344 ; RV32I-NEXT:    .cfi_def_cfa_offset 16
345 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
346 ; RV32I-NEXT:    .cfi_offset ra, -4
347 ; RV32I-NEXT:    mv a0, sp
348 ; RV32I-NEXT:    call callee@plt
349 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
350 ; RV32I-NEXT:    addi sp, sp, 16
351 ; RV32I-NEXT:    ret
353 ; RV64I-LABEL: caller_no_realign512:
354 ; RV64I:       # %bb.0:
355 ; RV64I-NEXT:    addi sp, sp, -16
356 ; RV64I-NEXT:    .cfi_def_cfa_offset 16
357 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
358 ; RV64I-NEXT:    .cfi_offset ra, -8
359 ; RV64I-NEXT:    mv a0, sp
360 ; RV64I-NEXT:    call callee@plt
361 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
362 ; RV64I-NEXT:    addi sp, sp, 16
363 ; RV64I-NEXT:    ret
364   %1 = alloca i8, align 512
365   call void @callee(i8* %1)
366   ret void
369 define void @caller1024() {
370 ; RV32I-LABEL: caller1024:
371 ; RV32I:       # %bb.0:
372 ; RV32I-NEXT:    addi sp, sp, -2032
373 ; RV32I-NEXT:    .cfi_def_cfa_offset 2032
374 ; RV32I-NEXT:    sw ra, 2028(sp) # 4-byte Folded Spill
375 ; RV32I-NEXT:    sw s0, 2024(sp) # 4-byte Folded Spill
376 ; RV32I-NEXT:    .cfi_offset ra, -4
377 ; RV32I-NEXT:    .cfi_offset s0, -8
378 ; RV32I-NEXT:    addi s0, sp, 2032
379 ; RV32I-NEXT:    .cfi_def_cfa s0, 0
380 ; RV32I-NEXT:    addi sp, sp, -16
381 ; RV32I-NEXT:    andi sp, sp, -1024
382 ; RV32I-NEXT:    addi a0, sp, 1024
383 ; RV32I-NEXT:    call callee@plt
384 ; RV32I-NEXT:    addi sp, s0, -2048
385 ; RV32I-NEXT:    addi sp, sp, 16
386 ; RV32I-NEXT:    lw ra, 2028(sp) # 4-byte Folded Reload
387 ; RV32I-NEXT:    lw s0, 2024(sp) # 4-byte Folded Reload
388 ; RV32I-NEXT:    addi sp, sp, 2032
389 ; RV32I-NEXT:    ret
391 ; RV64I-LABEL: caller1024:
392 ; RV64I:       # %bb.0:
393 ; RV64I-NEXT:    addi sp, sp, -2032
394 ; RV64I-NEXT:    .cfi_def_cfa_offset 2032
395 ; RV64I-NEXT:    sd ra, 2024(sp) # 8-byte Folded Spill
396 ; RV64I-NEXT:    sd s0, 2016(sp) # 8-byte Folded Spill
397 ; RV64I-NEXT:    .cfi_offset ra, -8
398 ; RV64I-NEXT:    .cfi_offset s0, -16
399 ; RV64I-NEXT:    addi s0, sp, 2032
400 ; RV64I-NEXT:    .cfi_def_cfa s0, 0
401 ; RV64I-NEXT:    addi sp, sp, -16
402 ; RV64I-NEXT:    andi sp, sp, -1024
403 ; RV64I-NEXT:    addi a0, sp, 1024
404 ; RV64I-NEXT:    call callee@plt
405 ; RV64I-NEXT:    addi sp, s0, -2048
406 ; RV64I-NEXT:    addi sp, sp, 16
407 ; RV64I-NEXT:    ld ra, 2024(sp) # 8-byte Folded Reload
408 ; RV64I-NEXT:    ld s0, 2016(sp) # 8-byte Folded Reload
409 ; RV64I-NEXT:    addi sp, sp, 2032
410 ; RV64I-NEXT:    ret
411   %1 = alloca i8, align 1024
412   call void @callee(i8* %1)
413   ret void
416 define void @caller_no_realign1024() "no-realign-stack" {
417 ; RV32I-LABEL: caller_no_realign1024:
418 ; RV32I:       # %bb.0:
419 ; RV32I-NEXT:    addi sp, sp, -16
420 ; RV32I-NEXT:    .cfi_def_cfa_offset 16
421 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
422 ; RV32I-NEXT:    .cfi_offset ra, -4
423 ; RV32I-NEXT:    mv a0, sp
424 ; RV32I-NEXT:    call callee@plt
425 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
426 ; RV32I-NEXT:    addi sp, sp, 16
427 ; RV32I-NEXT:    ret
429 ; RV64I-LABEL: caller_no_realign1024:
430 ; RV64I:       # %bb.0:
431 ; RV64I-NEXT:    addi sp, sp, -16
432 ; RV64I-NEXT:    .cfi_def_cfa_offset 16
433 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
434 ; RV64I-NEXT:    .cfi_offset ra, -8
435 ; RV64I-NEXT:    mv a0, sp
436 ; RV64I-NEXT:    call callee@plt
437 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
438 ; RV64I-NEXT:    addi sp, sp, 16
439 ; RV64I-NEXT:    ret
440   %1 = alloca i8, align 1024
441   call void @callee(i8* %1)
442   ret void
445 define void @caller2048() {
446 ; RV32I-LABEL: caller2048:
447 ; RV32I:       # %bb.0:
448 ; RV32I-NEXT:    addi sp, sp, -2032
449 ; RV32I-NEXT:    .cfi_def_cfa_offset 2032
450 ; RV32I-NEXT:    sw ra, 2028(sp) # 4-byte Folded Spill
451 ; RV32I-NEXT:    sw s0, 2024(sp) # 4-byte Folded Spill
452 ; RV32I-NEXT:    .cfi_offset ra, -4
453 ; RV32I-NEXT:    .cfi_offset s0, -8
454 ; RV32I-NEXT:    addi s0, sp, 2032
455 ; RV32I-NEXT:    .cfi_def_cfa s0, 0
456 ; RV32I-NEXT:    addi sp, sp, -2048
457 ; RV32I-NEXT:    addi sp, sp, -16
458 ; RV32I-NEXT:    andi sp, sp, -2048
459 ; RV32I-NEXT:    lui a0, 1
460 ; RV32I-NEXT:    addi a0, a0, -2048
461 ; RV32I-NEXT:    add a0, sp, a0
462 ; RV32I-NEXT:    call callee@plt
463 ; RV32I-NEXT:    lui a0, 1
464 ; RV32I-NEXT:    sub sp, s0, a0
465 ; RV32I-NEXT:    addi sp, sp, 2032
466 ; RV32I-NEXT:    addi sp, sp, 32
467 ; RV32I-NEXT:    lw ra, 2028(sp) # 4-byte Folded Reload
468 ; RV32I-NEXT:    lw s0, 2024(sp) # 4-byte Folded Reload
469 ; RV32I-NEXT:    addi sp, sp, 2032
470 ; RV32I-NEXT:    ret
472 ; RV64I-LABEL: caller2048:
473 ; RV64I:       # %bb.0:
474 ; RV64I-NEXT:    addi sp, sp, -2032
475 ; RV64I-NEXT:    .cfi_def_cfa_offset 2032
476 ; RV64I-NEXT:    sd ra, 2024(sp) # 8-byte Folded Spill
477 ; RV64I-NEXT:    sd s0, 2016(sp) # 8-byte Folded Spill
478 ; RV64I-NEXT:    .cfi_offset ra, -8
479 ; RV64I-NEXT:    .cfi_offset s0, -16
480 ; RV64I-NEXT:    addi s0, sp, 2032
481 ; RV64I-NEXT:    .cfi_def_cfa s0, 0
482 ; RV64I-NEXT:    addi sp, sp, -2048
483 ; RV64I-NEXT:    addi sp, sp, -16
484 ; RV64I-NEXT:    andi sp, sp, -2048
485 ; RV64I-NEXT:    lui a0, 1
486 ; RV64I-NEXT:    addiw a0, a0, -2048
487 ; RV64I-NEXT:    add a0, sp, a0
488 ; RV64I-NEXT:    call callee@plt
489 ; RV64I-NEXT:    lui a0, 1
490 ; RV64I-NEXT:    sub sp, s0, a0
491 ; RV64I-NEXT:    addi sp, sp, 2032
492 ; RV64I-NEXT:    addi sp, sp, 32
493 ; RV64I-NEXT:    ld ra, 2024(sp) # 8-byte Folded Reload
494 ; RV64I-NEXT:    ld s0, 2016(sp) # 8-byte Folded Reload
495 ; RV64I-NEXT:    addi sp, sp, 2032
496 ; RV64I-NEXT:    ret
497   %1 = alloca i8, align 2048
498   call void @callee(i8* %1)
499   ret void
502 define void @caller_no_realign2048() "no-realign-stack" {
503 ; RV32I-LABEL: caller_no_realign2048:
504 ; RV32I:       # %bb.0:
505 ; RV32I-NEXT:    addi sp, sp, -16
506 ; RV32I-NEXT:    .cfi_def_cfa_offset 16
507 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
508 ; RV32I-NEXT:    .cfi_offset ra, -4
509 ; RV32I-NEXT:    mv a0, sp
510 ; RV32I-NEXT:    call callee@plt
511 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
512 ; RV32I-NEXT:    addi sp, sp, 16
513 ; RV32I-NEXT:    ret
515 ; RV64I-LABEL: caller_no_realign2048:
516 ; RV64I:       # %bb.0:
517 ; RV64I-NEXT:    addi sp, sp, -16
518 ; RV64I-NEXT:    .cfi_def_cfa_offset 16
519 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
520 ; RV64I-NEXT:    .cfi_offset ra, -8
521 ; RV64I-NEXT:    mv a0, sp
522 ; RV64I-NEXT:    call callee@plt
523 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
524 ; RV64I-NEXT:    addi sp, sp, 16
525 ; RV64I-NEXT:    ret
526   %1 = alloca i8, align 2048
527   call void @callee(i8* %1)
528   ret void
531 define void @caller4096() {
532 ; RV32I-LABEL: caller4096:
533 ; RV32I:       # %bb.0:
534 ; RV32I-NEXT:    addi sp, sp, -2032
535 ; RV32I-NEXT:    .cfi_def_cfa_offset 2032
536 ; RV32I-NEXT:    sw ra, 2028(sp) # 4-byte Folded Spill
537 ; RV32I-NEXT:    sw s0, 2024(sp) # 4-byte Folded Spill
538 ; RV32I-NEXT:    .cfi_offset ra, -4
539 ; RV32I-NEXT:    .cfi_offset s0, -8
540 ; RV32I-NEXT:    addi s0, sp, 2032
541 ; RV32I-NEXT:    .cfi_def_cfa s0, 0
542 ; RV32I-NEXT:    lui a0, 2
543 ; RV32I-NEXT:    addi a0, a0, -2032
544 ; RV32I-NEXT:    sub sp, sp, a0
545 ; RV32I-NEXT:    srli a0, sp, 12
546 ; RV32I-NEXT:    slli sp, a0, 12
547 ; RV32I-NEXT:    lui a0, 1
548 ; RV32I-NEXT:    add a0, sp, a0
549 ; RV32I-NEXT:    call callee@plt
550 ; RV32I-NEXT:    lui a0, 2
551 ; RV32I-NEXT:    sub sp, s0, a0
552 ; RV32I-NEXT:    lui a0, 2
553 ; RV32I-NEXT:    addi a0, a0, -2032
554 ; RV32I-NEXT:    add sp, sp, a0
555 ; RV32I-NEXT:    lw ra, 2028(sp) # 4-byte Folded Reload
556 ; RV32I-NEXT:    lw s0, 2024(sp) # 4-byte Folded Reload
557 ; RV32I-NEXT:    addi sp, sp, 2032
558 ; RV32I-NEXT:    ret
560 ; RV64I-LABEL: caller4096:
561 ; RV64I:       # %bb.0:
562 ; RV64I-NEXT:    addi sp, sp, -2032
563 ; RV64I-NEXT:    .cfi_def_cfa_offset 2032
564 ; RV64I-NEXT:    sd ra, 2024(sp) # 8-byte Folded Spill
565 ; RV64I-NEXT:    sd s0, 2016(sp) # 8-byte Folded Spill
566 ; RV64I-NEXT:    .cfi_offset ra, -8
567 ; RV64I-NEXT:    .cfi_offset s0, -16
568 ; RV64I-NEXT:    addi s0, sp, 2032
569 ; RV64I-NEXT:    .cfi_def_cfa s0, 0
570 ; RV64I-NEXT:    lui a0, 2
571 ; RV64I-NEXT:    addiw a0, a0, -2032
572 ; RV64I-NEXT:    sub sp, sp, a0
573 ; RV64I-NEXT:    srli a0, sp, 12
574 ; RV64I-NEXT:    slli sp, a0, 12
575 ; RV64I-NEXT:    lui a0, 1
576 ; RV64I-NEXT:    add a0, sp, a0
577 ; RV64I-NEXT:    call callee@plt
578 ; RV64I-NEXT:    lui a0, 2
579 ; RV64I-NEXT:    sub sp, s0, a0
580 ; RV64I-NEXT:    lui a0, 2
581 ; RV64I-NEXT:    addiw a0, a0, -2032
582 ; RV64I-NEXT:    add sp, sp, a0
583 ; RV64I-NEXT:    ld ra, 2024(sp) # 8-byte Folded Reload
584 ; RV64I-NEXT:    ld s0, 2016(sp) # 8-byte Folded Reload
585 ; RV64I-NEXT:    addi sp, sp, 2032
586 ; RV64I-NEXT:    ret
587   %1 = alloca i8, align 4096
588   call void @callee(i8* %1)
589   ret void
592 define void @caller_no_realign4096() "no-realign-stack" {
593 ; RV32I-LABEL: caller_no_realign4096:
594 ; RV32I:       # %bb.0:
595 ; RV32I-NEXT:    addi sp, sp, -16
596 ; RV32I-NEXT:    .cfi_def_cfa_offset 16
597 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
598 ; RV32I-NEXT:    .cfi_offset ra, -4
599 ; RV32I-NEXT:    mv a0, sp
600 ; RV32I-NEXT:    call callee@plt
601 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
602 ; RV32I-NEXT:    addi sp, sp, 16
603 ; RV32I-NEXT:    ret
605 ; RV64I-LABEL: caller_no_realign4096:
606 ; RV64I:       # %bb.0:
607 ; RV64I-NEXT:    addi sp, sp, -16
608 ; RV64I-NEXT:    .cfi_def_cfa_offset 16
609 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
610 ; RV64I-NEXT:    .cfi_offset ra, -8
611 ; RV64I-NEXT:    mv a0, sp
612 ; RV64I-NEXT:    call callee@plt
613 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
614 ; RV64I-NEXT:    addi sp, sp, 16
615 ; RV64I-NEXT:    ret
616   %1 = alloca i8, align 4096
617   call void @callee(i8* %1)
618   ret void