xref: /llvm-project/llvm/test/CodeGen/RISCV/stack-store-check.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple riscv32 -o - %s | FileCheck %s
3; This test has been minimized from GCC Torture Suite's regstack-1.c
4; and checks that RISCVInstrInfo::storeRegToStackSlot works at the basic
5; level.
6
7@U = external local_unnamed_addr global fp128, align 16
8@Y1 = external local_unnamed_addr global fp128, align 16
9@X = external local_unnamed_addr global fp128, align 16
10@Y = external local_unnamed_addr global fp128, align 16
11@T = external local_unnamed_addr global fp128, align 16
12@S = external local_unnamed_addr global fp128, align 16
13
14define void @main() local_unnamed_addr nounwind {
15; CHECK-LABEL: main:
16; CHECK:       # %bb.0:
17; CHECK-NEXT:    addi sp, sp, -704
18; CHECK-NEXT:    sw ra, 700(sp) # 4-byte Folded Spill
19; CHECK-NEXT:    sw s0, 696(sp) # 4-byte Folded Spill
20; CHECK-NEXT:    sw s1, 692(sp) # 4-byte Folded Spill
21; CHECK-NEXT:    sw s2, 688(sp) # 4-byte Folded Spill
22; CHECK-NEXT:    sw s3, 684(sp) # 4-byte Folded Spill
23; CHECK-NEXT:    sw s4, 680(sp) # 4-byte Folded Spill
24; CHECK-NEXT:    sw s5, 676(sp) # 4-byte Folded Spill
25; CHECK-NEXT:    sw s6, 672(sp) # 4-byte Folded Spill
26; CHECK-NEXT:    sw s7, 668(sp) # 4-byte Folded Spill
27; CHECK-NEXT:    sw s8, 664(sp) # 4-byte Folded Spill
28; CHECK-NEXT:    sw s9, 660(sp) # 4-byte Folded Spill
29; CHECK-NEXT:    sw s10, 656(sp) # 4-byte Folded Spill
30; CHECK-NEXT:    sw s11, 652(sp) # 4-byte Folded Spill
31; CHECK-NEXT:    lui a0, %hi(U)
32; CHECK-NEXT:    lw s9, %lo(U)(a0)
33; CHECK-NEXT:    lw s10, %lo(U+4)(a0)
34; CHECK-NEXT:    lw s11, %lo(U+8)(a0)
35; CHECK-NEXT:    lw s5, %lo(U+12)(a0)
36; CHECK-NEXT:    sw zero, 616(sp)
37; CHECK-NEXT:    sw zero, 620(sp)
38; CHECK-NEXT:    sw zero, 624(sp)
39; CHECK-NEXT:    sw zero, 628(sp)
40; CHECK-NEXT:    addi a0, sp, 632
41; CHECK-NEXT:    addi a1, sp, 616
42; CHECK-NEXT:    addi a2, sp, 600
43; CHECK-NEXT:    sw s9, 600(sp)
44; CHECK-NEXT:    sw s10, 604(sp)
45; CHECK-NEXT:    sw s11, 608(sp)
46; CHECK-NEXT:    sw s5, 612(sp)
47; CHECK-NEXT:    call __subtf3
48; CHECK-NEXT:    lw s1, 632(sp)
49; CHECK-NEXT:    lw s2, 636(sp)
50; CHECK-NEXT:    lw s3, 640(sp)
51; CHECK-NEXT:    lw s4, 644(sp)
52; CHECK-NEXT:    sw s9, 552(sp)
53; CHECK-NEXT:    sw s10, 556(sp)
54; CHECK-NEXT:    sw s11, 560(sp)
55; CHECK-NEXT:    sw s5, 564(sp)
56; CHECK-NEXT:    addi a0, sp, 584
57; CHECK-NEXT:    addi a1, sp, 568
58; CHECK-NEXT:    addi a2, sp, 552
59; CHECK-NEXT:    sw s1, 568(sp)
60; CHECK-NEXT:    sw s2, 572(sp)
61; CHECK-NEXT:    sw s3, 576(sp)
62; CHECK-NEXT:    sw s4, 580(sp)
63; CHECK-NEXT:    call __subtf3
64; CHECK-NEXT:    lw a0, 584(sp)
65; CHECK-NEXT:    sw a0, 52(sp) # 4-byte Folded Spill
66; CHECK-NEXT:    lw a0, 588(sp)
67; CHECK-NEXT:    sw a0, 48(sp) # 4-byte Folded Spill
68; CHECK-NEXT:    lw a0, 592(sp)
69; CHECK-NEXT:    sw a0, 44(sp) # 4-byte Folded Spill
70; CHECK-NEXT:    lw a0, 596(sp)
71; CHECK-NEXT:    sw a0, 40(sp) # 4-byte Folded Spill
72; CHECK-NEXT:    sw zero, 504(sp)
73; CHECK-NEXT:    sw zero, 508(sp)
74; CHECK-NEXT:    sw zero, 512(sp)
75; CHECK-NEXT:    sw zero, 516(sp)
76; CHECK-NEXT:    addi a0, sp, 536
77; CHECK-NEXT:    addi a1, sp, 520
78; CHECK-NEXT:    addi a2, sp, 504
79; CHECK-NEXT:    sw s9, 520(sp)
80; CHECK-NEXT:    sw s10, 524(sp)
81; CHECK-NEXT:    sw s11, 528(sp)
82; CHECK-NEXT:    sw s5, 532(sp)
83; CHECK-NEXT:    call __addtf3
84; CHECK-NEXT:    lw s0, 536(sp)
85; CHECK-NEXT:    lw s6, 540(sp)
86; CHECK-NEXT:    lw s7, 544(sp)
87; CHECK-NEXT:    lw s8, 548(sp)
88; CHECK-NEXT:    lui a0, %hi(Y1)
89; CHECK-NEXT:    lw a1, %lo(Y1)(a0)
90; CHECK-NEXT:    sw a1, 20(sp) # 4-byte Folded Spill
91; CHECK-NEXT:    lw a2, %lo(Y1+4)(a0)
92; CHECK-NEXT:    sw a2, 16(sp) # 4-byte Folded Spill
93; CHECK-NEXT:    lw a3, %lo(Y1+8)(a0)
94; CHECK-NEXT:    sw a3, 12(sp) # 4-byte Folded Spill
95; CHECK-NEXT:    lw a0, %lo(Y1+12)(a0)
96; CHECK-NEXT:    sw a0, 8(sp) # 4-byte Folded Spill
97; CHECK-NEXT:    sw a1, 312(sp)
98; CHECK-NEXT:    sw a2, 316(sp)
99; CHECK-NEXT:    sw a3, 320(sp)
100; CHECK-NEXT:    sw a0, 324(sp)
101; CHECK-NEXT:    addi a0, sp, 344
102; CHECK-NEXT:    addi a1, sp, 328
103; CHECK-NEXT:    addi a2, sp, 312
104; CHECK-NEXT:    sw s1, 328(sp)
105; CHECK-NEXT:    sw s2, 332(sp)
106; CHECK-NEXT:    sw s3, 336(sp)
107; CHECK-NEXT:    sw s4, 340(sp)
108; CHECK-NEXT:    call __multf3
109; CHECK-NEXT:    lw a0, 344(sp)
110; CHECK-NEXT:    sw a0, 68(sp) # 4-byte Folded Spill
111; CHECK-NEXT:    lw a0, 348(sp)
112; CHECK-NEXT:    sw a0, 64(sp) # 4-byte Folded Spill
113; CHECK-NEXT:    lw a0, 352(sp)
114; CHECK-NEXT:    sw a0, 60(sp) # 4-byte Folded Spill
115; CHECK-NEXT:    lw a0, 356(sp)
116; CHECK-NEXT:    sw a0, 56(sp) # 4-byte Folded Spill
117; CHECK-NEXT:    sw s9, 472(sp)
118; CHECK-NEXT:    sw s10, 476(sp)
119; CHECK-NEXT:    sw s11, 480(sp)
120; CHECK-NEXT:    sw s5, 484(sp)
121; CHECK-NEXT:    addi a0, sp, 488
122; CHECK-NEXT:    addi a1, sp, 472
123; CHECK-NEXT:    addi a2, sp, 456
124; CHECK-NEXT:    sw s0, 456(sp)
125; CHECK-NEXT:    sw s6, 460(sp)
126; CHECK-NEXT:    sw s7, 464(sp)
127; CHECK-NEXT:    sw s8, 468(sp)
128; CHECK-NEXT:    call __addtf3
129; CHECK-NEXT:    lw a3, 488(sp)
130; CHECK-NEXT:    lw a4, 492(sp)
131; CHECK-NEXT:    lw a5, 496(sp)
132; CHECK-NEXT:    lw a6, 500(sp)
133; CHECK-NEXT:    sw zero, 424(sp)
134; CHECK-NEXT:    sw zero, 428(sp)
135; CHECK-NEXT:    sw zero, 432(sp)
136; CHECK-NEXT:    sw zero, 436(sp)
137; CHECK-NEXT:    addi a0, sp, 440
138; CHECK-NEXT:    addi a1, sp, 424
139; CHECK-NEXT:    addi a2, sp, 408
140; CHECK-NEXT:    sw a3, 408(sp)
141; CHECK-NEXT:    sw a4, 412(sp)
142; CHECK-NEXT:    sw a5, 416(sp)
143; CHECK-NEXT:    sw a6, 420(sp)
144; CHECK-NEXT:    call __subtf3
145; CHECK-NEXT:    lw a0, 448(sp)
146; CHECK-NEXT:    lw a1, 452(sp)
147; CHECK-NEXT:    lw a2, 440(sp)
148; CHECK-NEXT:    lw a3, 444(sp)
149; CHECK-NEXT:    lui a4, %hi(X)
150; CHECK-NEXT:    sw a1, %lo(X+12)(a4)
151; CHECK-NEXT:    sw a0, %lo(X+8)(a4)
152; CHECK-NEXT:    sw a3, %lo(X+4)(a4)
153; CHECK-NEXT:    sw a2, %lo(X)(a4)
154; CHECK-NEXT:    lw s5, 20(sp) # 4-byte Folded Reload
155; CHECK-NEXT:    sw s5, 216(sp)
156; CHECK-NEXT:    lw s9, 16(sp) # 4-byte Folded Reload
157; CHECK-NEXT:    sw s9, 220(sp)
158; CHECK-NEXT:    lw s10, 12(sp) # 4-byte Folded Reload
159; CHECK-NEXT:    sw s10, 224(sp)
160; CHECK-NEXT:    lw s11, 8(sp) # 4-byte Folded Reload
161; CHECK-NEXT:    sw s11, 228(sp)
162; CHECK-NEXT:    addi a0, sp, 248
163; CHECK-NEXT:    addi a1, sp, 232
164; CHECK-NEXT:    addi a2, sp, 216
165; CHECK-NEXT:    lw s1, 52(sp) # 4-byte Folded Reload
166; CHECK-NEXT:    sw s1, 232(sp)
167; CHECK-NEXT:    lw s2, 48(sp) # 4-byte Folded Reload
168; CHECK-NEXT:    sw s2, 236(sp)
169; CHECK-NEXT:    lw s3, 44(sp) # 4-byte Folded Reload
170; CHECK-NEXT:    sw s3, 240(sp)
171; CHECK-NEXT:    lw s4, 40(sp) # 4-byte Folded Reload
172; CHECK-NEXT:    sw s4, 244(sp)
173; CHECK-NEXT:    call __multf3
174; CHECK-NEXT:    lw a0, 248(sp)
175; CHECK-NEXT:    sw a0, 36(sp) # 4-byte Folded Spill
176; CHECK-NEXT:    lw a0, 252(sp)
177; CHECK-NEXT:    sw a0, 32(sp) # 4-byte Folded Spill
178; CHECK-NEXT:    lw a0, 256(sp)
179; CHECK-NEXT:    sw a0, 28(sp) # 4-byte Folded Spill
180; CHECK-NEXT:    lw a0, 260(sp)
181; CHECK-NEXT:    sw a0, 24(sp) # 4-byte Folded Spill
182; CHECK-NEXT:    sw zero, 360(sp)
183; CHECK-NEXT:    sw zero, 364(sp)
184; CHECK-NEXT:    sw zero, 368(sp)
185; CHECK-NEXT:    sw zero, 372(sp)
186; CHECK-NEXT:    addi a0, sp, 392
187; CHECK-NEXT:    addi a1, sp, 376
188; CHECK-NEXT:    addi a2, sp, 360
189; CHECK-NEXT:    sw s0, 376(sp)
190; CHECK-NEXT:    sw s6, 380(sp)
191; CHECK-NEXT:    sw s7, 384(sp)
192; CHECK-NEXT:    sw s8, 388(sp)
193; CHECK-NEXT:    call __multf3
194; CHECK-NEXT:    lw a0, 400(sp)
195; CHECK-NEXT:    lw a1, 404(sp)
196; CHECK-NEXT:    lw a2, 392(sp)
197; CHECK-NEXT:    lw a3, 396(sp)
198; CHECK-NEXT:    lui a4, %hi(S)
199; CHECK-NEXT:    sw a1, %lo(S+12)(a4)
200; CHECK-NEXT:    sw a0, %lo(S+8)(a4)
201; CHECK-NEXT:    sw a3, %lo(S+4)(a4)
202; CHECK-NEXT:    sw a2, %lo(S)(a4)
203; CHECK-NEXT:    sw s1, 264(sp)
204; CHECK-NEXT:    sw s2, 268(sp)
205; CHECK-NEXT:    sw s3, 272(sp)
206; CHECK-NEXT:    sw s4, 276(sp)
207; CHECK-NEXT:    addi a0, sp, 296
208; CHECK-NEXT:    addi a1, sp, 280
209; CHECK-NEXT:    addi a2, sp, 264
210; CHECK-NEXT:    lw a3, 68(sp) # 4-byte Folded Reload
211; CHECK-NEXT:    sw a3, 280(sp)
212; CHECK-NEXT:    lw a3, 64(sp) # 4-byte Folded Reload
213; CHECK-NEXT:    sw a3, 284(sp)
214; CHECK-NEXT:    lw a3, 60(sp) # 4-byte Folded Reload
215; CHECK-NEXT:    sw a3, 288(sp)
216; CHECK-NEXT:    lw a3, 56(sp) # 4-byte Folded Reload
217; CHECK-NEXT:    sw a3, 292(sp)
218; CHECK-NEXT:    call __subtf3
219; CHECK-NEXT:    lw a0, 304(sp)
220; CHECK-NEXT:    lw a1, 308(sp)
221; CHECK-NEXT:    lw a2, 296(sp)
222; CHECK-NEXT:    lw a3, 300(sp)
223; CHECK-NEXT:    lui a4, %hi(T)
224; CHECK-NEXT:    sw a1, %lo(T+12)(a4)
225; CHECK-NEXT:    sw a0, %lo(T+8)(a4)
226; CHECK-NEXT:    sw a3, %lo(T+4)(a4)
227; CHECK-NEXT:    sw a2, %lo(T)(a4)
228; CHECK-NEXT:    sw zero, 168(sp)
229; CHECK-NEXT:    sw zero, 172(sp)
230; CHECK-NEXT:    sw zero, 176(sp)
231; CHECK-NEXT:    sw zero, 180(sp)
232; CHECK-NEXT:    addi a0, sp, 200
233; CHECK-NEXT:    addi a1, sp, 184
234; CHECK-NEXT:    addi a2, sp, 168
235; CHECK-NEXT:    lw a3, 36(sp) # 4-byte Folded Reload
236; CHECK-NEXT:    sw a3, 184(sp)
237; CHECK-NEXT:    lw a3, 32(sp) # 4-byte Folded Reload
238; CHECK-NEXT:    sw a3, 188(sp)
239; CHECK-NEXT:    lw a3, 28(sp) # 4-byte Folded Reload
240; CHECK-NEXT:    sw a3, 192(sp)
241; CHECK-NEXT:    lw a3, 24(sp) # 4-byte Folded Reload
242; CHECK-NEXT:    sw a3, 196(sp)
243; CHECK-NEXT:    call __addtf3
244; CHECK-NEXT:    lw a0, 208(sp)
245; CHECK-NEXT:    lw a1, 212(sp)
246; CHECK-NEXT:    lw a2, 200(sp)
247; CHECK-NEXT:    lw a3, 204(sp)
248; CHECK-NEXT:    lui a4, %hi(Y)
249; CHECK-NEXT:    sw a1, %lo(Y+12)(a4)
250; CHECK-NEXT:    sw a0, %lo(Y+8)(a4)
251; CHECK-NEXT:    sw a3, %lo(Y+4)(a4)
252; CHECK-NEXT:    sw a2, %lo(Y)(a4)
253; CHECK-NEXT:    sw zero, 120(sp)
254; CHECK-NEXT:    sw zero, 124(sp)
255; CHECK-NEXT:    sw zero, 128(sp)
256; CHECK-NEXT:    sw zero, 132(sp)
257; CHECK-NEXT:    addi a0, sp, 152
258; CHECK-NEXT:    addi a1, sp, 136
259; CHECK-NEXT:    addi a2, sp, 120
260; CHECK-NEXT:    sw s5, 136(sp)
261; CHECK-NEXT:    sw s9, 140(sp)
262; CHECK-NEXT:    sw s10, 144(sp)
263; CHECK-NEXT:    sw s11, 148(sp)
264; CHECK-NEXT:    call __multf3
265; CHECK-NEXT:    lw a3, 152(sp)
266; CHECK-NEXT:    lw a4, 156(sp)
267; CHECK-NEXT:    lw a5, 160(sp)
268; CHECK-NEXT:    lw a6, 164(sp)
269; CHECK-NEXT:    lui a2, 786400
270; CHECK-NEXT:    addi a0, sp, 104
271; CHECK-NEXT:    addi a1, sp, 88
272; CHECK-NEXT:    sw zero, 72(sp)
273; CHECK-NEXT:    sw zero, 76(sp)
274; CHECK-NEXT:    sw zero, 80(sp)
275; CHECK-NEXT:    sw a2, 84(sp)
276; CHECK-NEXT:    addi a2, sp, 72
277; CHECK-NEXT:    sw a3, 88(sp)
278; CHECK-NEXT:    sw a4, 92(sp)
279; CHECK-NEXT:    sw a5, 96(sp)
280; CHECK-NEXT:    sw a6, 100(sp)
281; CHECK-NEXT:    call __addtf3
282; CHECK-NEXT:    lw a0, 112(sp)
283; CHECK-NEXT:    lw a1, 116(sp)
284; CHECK-NEXT:    lw a2, 104(sp)
285; CHECK-NEXT:    lw a3, 108(sp)
286; CHECK-NEXT:    lui a4, %hi(Y1)
287; CHECK-NEXT:    sw a0, %lo(Y1+8)(a4)
288; CHECK-NEXT:    sw a1, %lo(Y1+12)(a4)
289; CHECK-NEXT:    sw a2, %lo(Y1)(a4)
290; CHECK-NEXT:    sw a3, %lo(Y1+4)(a4)
291; CHECK-NEXT:    lw ra, 700(sp) # 4-byte Folded Reload
292; CHECK-NEXT:    lw s0, 696(sp) # 4-byte Folded Reload
293; CHECK-NEXT:    lw s1, 692(sp) # 4-byte Folded Reload
294; CHECK-NEXT:    lw s2, 688(sp) # 4-byte Folded Reload
295; CHECK-NEXT:    lw s3, 684(sp) # 4-byte Folded Reload
296; CHECK-NEXT:    lw s4, 680(sp) # 4-byte Folded Reload
297; CHECK-NEXT:    lw s5, 676(sp) # 4-byte Folded Reload
298; CHECK-NEXT:    lw s6, 672(sp) # 4-byte Folded Reload
299; CHECK-NEXT:    lw s7, 668(sp) # 4-byte Folded Reload
300; CHECK-NEXT:    lw s8, 664(sp) # 4-byte Folded Reload
301; CHECK-NEXT:    lw s9, 660(sp) # 4-byte Folded Reload
302; CHECK-NEXT:    lw s10, 656(sp) # 4-byte Folded Reload
303; CHECK-NEXT:    lw s11, 652(sp) # 4-byte Folded Reload
304; CHECK-NEXT:    addi sp, sp, 704
305; CHECK-NEXT:    ret
306  %1 = load fp128, ptr @U, align 16
307  %2 = fsub fp128 0xL00000000000000000000000000000000, %1
308  %3 = fsub fp128 %2, %1
309  %4 = fadd fp128 %1, 0xL00000000000000000000000000000000
310  %5 = load fp128, ptr @Y1, align 16
311  %6 = fmul fp128 %2, %5
312  %7 = fadd fp128 %1, %4
313  %8 = fsub fp128 0xL00000000000000000000000000000000, %7
314  store fp128 %8, ptr @X, align 16
315  %9 = fmul fp128 %3, %5
316  %10 = fmul fp128 0xL00000000000000000000000000000000, %4
317  store fp128 %10, ptr @S, align 16
318  %11 = fsub fp128 %6, %3
319  store fp128 %11, ptr @T, align 16
320  %12 = fadd fp128 0xL00000000000000000000000000000000, %9
321  store fp128 %12, ptr @Y, align 16
322  %13 = fmul fp128 0xL00000000000000000000000000000000, %5
323  %14 = fadd fp128 %13, 0xL0000000000000000BFFE000000000000
324  store fp128 %14, ptr @Y1, align 16
325  ret void
326}
327