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