RegAllocGreedy uses SlotIndexes::getApproxInstrDistance to approximate the length of a live range for its heuristics. Renumbering all slot indexes with the default instruction distance ensures that this estimate will be as accurate as possible, and will not depend on the history of how instructions have been added to and removed from SlotIndexes's maps. This also means that enabling -early-live-intervals, which runs the SlotIndexes analysis earlier, will not cause large amounts of churn due to different register allocator decisions.
325 lines
12 KiB
LLVM
325 lines
12 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc -mtriple riscv32 -o - %s | FileCheck %s
|
|
; This test has been minimized from GCC Torture Suite's regstack-1.c
|
|
; and checks that RISCVInstrInfo::storeRegToStackSlot works at the basic
|
|
; level.
|
|
|
|
@U = external local_unnamed_addr global fp128, align 16
|
|
@Y1 = external local_unnamed_addr global fp128, align 16
|
|
@X = external local_unnamed_addr global fp128, align 16
|
|
@Y = external local_unnamed_addr global fp128, align 16
|
|
@T = external local_unnamed_addr global fp128, align 16
|
|
@S = external local_unnamed_addr global fp128, align 16
|
|
|
|
define void @main() local_unnamed_addr nounwind {
|
|
; CHECK-LABEL: main:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: addi sp, sp, -688
|
|
; CHECK-NEXT: sw ra, 684(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: sw s0, 680(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: sw s1, 676(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: sw s2, 672(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: sw s3, 668(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: sw s4, 664(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: sw s5, 660(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: sw s6, 656(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: sw s7, 652(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: sw s8, 648(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: sw s9, 644(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: sw s10, 640(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: sw s11, 636(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: lui a0, %hi(U)
|
|
; CHECK-NEXT: lw s6, %lo(U)(a0)
|
|
; CHECK-NEXT: lw s7, %lo(U+4)(a0)
|
|
; CHECK-NEXT: lw s8, %lo(U+8)(a0)
|
|
; CHECK-NEXT: lw s0, %lo(U+12)(a0)
|
|
; CHECK-NEXT: sw zero, 612(sp)
|
|
; CHECK-NEXT: sw zero, 608(sp)
|
|
; CHECK-NEXT: sw zero, 604(sp)
|
|
; CHECK-NEXT: sw zero, 600(sp)
|
|
; CHECK-NEXT: sw s0, 596(sp)
|
|
; CHECK-NEXT: sw s8, 592(sp)
|
|
; CHECK-NEXT: sw s7, 588(sp)
|
|
; CHECK-NEXT: addi a0, sp, 616
|
|
; CHECK-NEXT: addi a1, sp, 600
|
|
; CHECK-NEXT: addi a2, sp, 584
|
|
; CHECK-NEXT: sw s6, 584(sp)
|
|
; CHECK-NEXT: call __subtf3@plt
|
|
; CHECK-NEXT: lw s1, 616(sp)
|
|
; CHECK-NEXT: lw s2, 620(sp)
|
|
; CHECK-NEXT: lw s3, 624(sp)
|
|
; CHECK-NEXT: lw s4, 628(sp)
|
|
; CHECK-NEXT: sw s0, 548(sp)
|
|
; CHECK-NEXT: sw s8, 544(sp)
|
|
; CHECK-NEXT: sw s7, 540(sp)
|
|
; CHECK-NEXT: sw s6, 536(sp)
|
|
; CHECK-NEXT: sw s4, 564(sp)
|
|
; CHECK-NEXT: sw s3, 560(sp)
|
|
; CHECK-NEXT: sw s2, 556(sp)
|
|
; CHECK-NEXT: addi a0, sp, 568
|
|
; CHECK-NEXT: addi a1, sp, 552
|
|
; CHECK-NEXT: addi a2, sp, 536
|
|
; CHECK-NEXT: sw s1, 552(sp)
|
|
; CHECK-NEXT: call __subtf3@plt
|
|
; CHECK-NEXT: lw a0, 568(sp)
|
|
; CHECK-NEXT: sw a0, 40(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: lw a0, 572(sp)
|
|
; CHECK-NEXT: sw a0, 28(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: lw a0, 576(sp)
|
|
; CHECK-NEXT: sw a0, 20(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: lw a0, 580(sp)
|
|
; CHECK-NEXT: sw a0, 48(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: sw zero, 500(sp)
|
|
; CHECK-NEXT: sw zero, 496(sp)
|
|
; CHECK-NEXT: sw zero, 492(sp)
|
|
; CHECK-NEXT: sw zero, 488(sp)
|
|
; CHECK-NEXT: sw s0, 516(sp)
|
|
; CHECK-NEXT: sw s8, 512(sp)
|
|
; CHECK-NEXT: sw s7, 508(sp)
|
|
; CHECK-NEXT: addi a0, sp, 520
|
|
; CHECK-NEXT: addi a1, sp, 504
|
|
; CHECK-NEXT: addi a2, sp, 488
|
|
; CHECK-NEXT: sw s6, 504(sp)
|
|
; CHECK-NEXT: call __addtf3@plt
|
|
; CHECK-NEXT: lw s9, 520(sp)
|
|
; CHECK-NEXT: lw s11, 524(sp)
|
|
; CHECK-NEXT: lw s5, 528(sp)
|
|
; CHECK-NEXT: lw s10, 532(sp)
|
|
; CHECK-NEXT: sw s10, 16(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: lui a0, %hi(Y1)
|
|
; CHECK-NEXT: lw a1, %lo(Y1)(a0)
|
|
; CHECK-NEXT: sw a1, 52(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: lw a2, %lo(Y1+4)(a0)
|
|
; CHECK-NEXT: sw a2, 12(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: lw a3, %lo(Y1+8)(a0)
|
|
; CHECK-NEXT: sw a3, 8(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: lw a0, %lo(Y1+12)(a0)
|
|
; CHECK-NEXT: sw a0, 4(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: sw a0, 308(sp)
|
|
; CHECK-NEXT: sw a3, 304(sp)
|
|
; CHECK-NEXT: sw a2, 300(sp)
|
|
; CHECK-NEXT: sw a1, 296(sp)
|
|
; CHECK-NEXT: sw s4, 324(sp)
|
|
; CHECK-NEXT: sw s3, 320(sp)
|
|
; CHECK-NEXT: sw s2, 316(sp)
|
|
; CHECK-NEXT: addi a0, sp, 328
|
|
; CHECK-NEXT: addi a1, sp, 312
|
|
; CHECK-NEXT: addi a2, sp, 296
|
|
; CHECK-NEXT: sw s1, 312(sp)
|
|
; CHECK-NEXT: call __multf3@plt
|
|
; CHECK-NEXT: lw a0, 328(sp)
|
|
; CHECK-NEXT: sw a0, 44(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: lw a0, 332(sp)
|
|
; CHECK-NEXT: sw a0, 36(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: lw a0, 336(sp)
|
|
; CHECK-NEXT: sw a0, 32(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: lw a0, 340(sp)
|
|
; CHECK-NEXT: sw a0, 24(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: sw s0, 468(sp)
|
|
; CHECK-NEXT: sw s8, 464(sp)
|
|
; CHECK-NEXT: sw s7, 460(sp)
|
|
; CHECK-NEXT: sw s6, 456(sp)
|
|
; CHECK-NEXT: sw s10, 452(sp)
|
|
; CHECK-NEXT: sw s5, 448(sp)
|
|
; CHECK-NEXT: sw s11, 444(sp)
|
|
; CHECK-NEXT: addi a0, sp, 472
|
|
; CHECK-NEXT: addi a1, sp, 456
|
|
; CHECK-NEXT: addi a2, sp, 440
|
|
; CHECK-NEXT: sw s9, 440(sp)
|
|
; CHECK-NEXT: call __addtf3@plt
|
|
; CHECK-NEXT: lw a3, 472(sp)
|
|
; CHECK-NEXT: lw a0, 476(sp)
|
|
; CHECK-NEXT: lw a1, 480(sp)
|
|
; CHECK-NEXT: lw a2, 484(sp)
|
|
; CHECK-NEXT: sw zero, 420(sp)
|
|
; CHECK-NEXT: sw zero, 416(sp)
|
|
; CHECK-NEXT: sw zero, 412(sp)
|
|
; CHECK-NEXT: sw zero, 408(sp)
|
|
; CHECK-NEXT: sw a2, 404(sp)
|
|
; CHECK-NEXT: sw a1, 400(sp)
|
|
; CHECK-NEXT: sw a0, 396(sp)
|
|
; CHECK-NEXT: addi a0, sp, 424
|
|
; CHECK-NEXT: addi a1, sp, 408
|
|
; CHECK-NEXT: addi a2, sp, 392
|
|
; CHECK-NEXT: sw a3, 392(sp)
|
|
; CHECK-NEXT: call __subtf3@plt
|
|
; CHECK-NEXT: lw a0, 424(sp)
|
|
; CHECK-NEXT: lw a1, 436(sp)
|
|
; CHECK-NEXT: lw a2, 432(sp)
|
|
; CHECK-NEXT: lw a3, 428(sp)
|
|
; CHECK-NEXT: lui a4, %hi(X)
|
|
; CHECK-NEXT: sw a1, %lo(X+12)(a4)
|
|
; CHECK-NEXT: sw a2, %lo(X+8)(a4)
|
|
; CHECK-NEXT: sw a3, %lo(X+4)(a4)
|
|
; CHECK-NEXT: sw a0, %lo(X)(a4)
|
|
; CHECK-NEXT: lw s8, 4(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: sw s8, 212(sp)
|
|
; CHECK-NEXT: lw s4, 8(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: sw s4, 208(sp)
|
|
; CHECK-NEXT: lw s3, 12(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: sw s3, 204(sp)
|
|
; CHECK-NEXT: lw a0, 52(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: sw a0, 200(sp)
|
|
; CHECK-NEXT: lw a0, 48(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: sw a0, 228(sp)
|
|
; CHECK-NEXT: lw s10, 20(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: sw s10, 224(sp)
|
|
; CHECK-NEXT: lw s2, 28(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: sw s2, 220(sp)
|
|
; CHECK-NEXT: addi a0, sp, 232
|
|
; CHECK-NEXT: addi a1, sp, 216
|
|
; CHECK-NEXT: addi a2, sp, 200
|
|
; CHECK-NEXT: lw s0, 40(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: sw s0, 216(sp)
|
|
; CHECK-NEXT: call __multf3@plt
|
|
; CHECK-NEXT: lw s1, 232(sp)
|
|
; CHECK-NEXT: lw a0, 236(sp)
|
|
; CHECK-NEXT: sw a0, 0(sp) # 4-byte Folded Spill
|
|
; CHECK-NEXT: lw s6, 240(sp)
|
|
; CHECK-NEXT: lw s7, 244(sp)
|
|
; CHECK-NEXT: sw zero, 356(sp)
|
|
; CHECK-NEXT: sw zero, 352(sp)
|
|
; CHECK-NEXT: sw zero, 348(sp)
|
|
; CHECK-NEXT: sw zero, 344(sp)
|
|
; CHECK-NEXT: lw a0, 16(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: sw a0, 372(sp)
|
|
; CHECK-NEXT: sw s5, 368(sp)
|
|
; CHECK-NEXT: sw s11, 364(sp)
|
|
; CHECK-NEXT: addi a0, sp, 376
|
|
; CHECK-NEXT: addi a1, sp, 360
|
|
; CHECK-NEXT: addi a2, sp, 344
|
|
; CHECK-NEXT: sw s9, 360(sp)
|
|
; CHECK-NEXT: call __multf3@plt
|
|
; CHECK-NEXT: lw a0, 376(sp)
|
|
; CHECK-NEXT: lw a1, 388(sp)
|
|
; CHECK-NEXT: lw a2, 384(sp)
|
|
; CHECK-NEXT: lw a3, 380(sp)
|
|
; CHECK-NEXT: lui a4, %hi(S)
|
|
; CHECK-NEXT: sw a1, %lo(S+12)(a4)
|
|
; CHECK-NEXT: sw a2, %lo(S+8)(a4)
|
|
; CHECK-NEXT: sw a3, %lo(S+4)(a4)
|
|
; CHECK-NEXT: sw a0, %lo(S)(a4)
|
|
; CHECK-NEXT: lw a0, 48(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: sw a0, 260(sp)
|
|
; CHECK-NEXT: sw s10, 256(sp)
|
|
; CHECK-NEXT: sw s2, 252(sp)
|
|
; CHECK-NEXT: sw s0, 248(sp)
|
|
; CHECK-NEXT: lw a0, 24(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: sw a0, 276(sp)
|
|
; CHECK-NEXT: lw a0, 32(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: sw a0, 272(sp)
|
|
; CHECK-NEXT: lw a0, 36(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: sw a0, 268(sp)
|
|
; CHECK-NEXT: addi a0, sp, 280
|
|
; CHECK-NEXT: addi a1, sp, 264
|
|
; CHECK-NEXT: addi a2, sp, 248
|
|
; CHECK-NEXT: lw a3, 44(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: sw a3, 264(sp)
|
|
; CHECK-NEXT: call __subtf3@plt
|
|
; CHECK-NEXT: lw a0, 280(sp)
|
|
; CHECK-NEXT: lw a1, 292(sp)
|
|
; CHECK-NEXT: lw a2, 288(sp)
|
|
; CHECK-NEXT: lw a3, 284(sp)
|
|
; CHECK-NEXT: lui a4, %hi(T)
|
|
; CHECK-NEXT: sw a1, %lo(T+12)(a4)
|
|
; CHECK-NEXT: sw a2, %lo(T+8)(a4)
|
|
; CHECK-NEXT: sw a3, %lo(T+4)(a4)
|
|
; CHECK-NEXT: sw a0, %lo(T)(a4)
|
|
; CHECK-NEXT: sw zero, 164(sp)
|
|
; CHECK-NEXT: sw zero, 160(sp)
|
|
; CHECK-NEXT: sw zero, 156(sp)
|
|
; CHECK-NEXT: sw zero, 152(sp)
|
|
; CHECK-NEXT: sw s7, 180(sp)
|
|
; CHECK-NEXT: sw s6, 176(sp)
|
|
; CHECK-NEXT: lw a0, 0(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: sw a0, 172(sp)
|
|
; CHECK-NEXT: addi a0, sp, 184
|
|
; CHECK-NEXT: addi a1, sp, 168
|
|
; CHECK-NEXT: addi a2, sp, 152
|
|
; CHECK-NEXT: sw s1, 168(sp)
|
|
; CHECK-NEXT: call __addtf3@plt
|
|
; CHECK-NEXT: lw a0, 184(sp)
|
|
; CHECK-NEXT: lw a1, 196(sp)
|
|
; CHECK-NEXT: lw a2, 192(sp)
|
|
; CHECK-NEXT: lw a3, 188(sp)
|
|
; CHECK-NEXT: lui a4, %hi(Y)
|
|
; CHECK-NEXT: sw a1, %lo(Y+12)(a4)
|
|
; CHECK-NEXT: sw a2, %lo(Y+8)(a4)
|
|
; CHECK-NEXT: sw a3, %lo(Y+4)(a4)
|
|
; CHECK-NEXT: sw a0, %lo(Y)(a4)
|
|
; CHECK-NEXT: sw zero, 116(sp)
|
|
; CHECK-NEXT: sw zero, 112(sp)
|
|
; CHECK-NEXT: sw zero, 108(sp)
|
|
; CHECK-NEXT: sw zero, 104(sp)
|
|
; CHECK-NEXT: sw s8, 132(sp)
|
|
; CHECK-NEXT: sw s4, 128(sp)
|
|
; CHECK-NEXT: sw s3, 124(sp)
|
|
; CHECK-NEXT: addi a0, sp, 136
|
|
; CHECK-NEXT: addi a1, sp, 120
|
|
; CHECK-NEXT: addi a2, sp, 104
|
|
; CHECK-NEXT: lw a3, 52(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: sw a3, 120(sp)
|
|
; CHECK-NEXT: call __multf3@plt
|
|
; CHECK-NEXT: lw a3, 136(sp)
|
|
; CHECK-NEXT: lw a0, 140(sp)
|
|
; CHECK-NEXT: lw a1, 144(sp)
|
|
; CHECK-NEXT: lw a2, 148(sp)
|
|
; CHECK-NEXT: lui a4, 786400
|
|
; CHECK-NEXT: sw a4, 68(sp)
|
|
; CHECK-NEXT: sw zero, 64(sp)
|
|
; CHECK-NEXT: sw zero, 60(sp)
|
|
; CHECK-NEXT: sw zero, 56(sp)
|
|
; CHECK-NEXT: sw a2, 84(sp)
|
|
; CHECK-NEXT: sw a1, 80(sp)
|
|
; CHECK-NEXT: sw a0, 76(sp)
|
|
; CHECK-NEXT: addi a0, sp, 88
|
|
; CHECK-NEXT: addi a1, sp, 72
|
|
; CHECK-NEXT: addi a2, sp, 56
|
|
; CHECK-NEXT: sw a3, 72(sp)
|
|
; CHECK-NEXT: call __addtf3@plt
|
|
; CHECK-NEXT: lw a0, 96(sp)
|
|
; CHECK-NEXT: lw a1, 100(sp)
|
|
; CHECK-NEXT: lw a2, 88(sp)
|
|
; CHECK-NEXT: lw a3, 92(sp)
|
|
; CHECK-NEXT: lui a4, %hi(Y1)
|
|
; CHECK-NEXT: sw a0, %lo(Y1+8)(a4)
|
|
; CHECK-NEXT: sw a1, %lo(Y1+12)(a4)
|
|
; CHECK-NEXT: sw a2, %lo(Y1)(a4)
|
|
; CHECK-NEXT: sw a3, %lo(Y1+4)(a4)
|
|
; CHECK-NEXT: lw ra, 684(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: lw s0, 680(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: lw s1, 676(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: lw s2, 672(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: lw s3, 668(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: lw s4, 664(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: lw s5, 660(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: lw s6, 656(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: lw s7, 652(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: lw s8, 648(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: lw s9, 644(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: lw s10, 640(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: lw s11, 636(sp) # 4-byte Folded Reload
|
|
; CHECK-NEXT: addi sp, sp, 688
|
|
; CHECK-NEXT: ret
|
|
%1 = load fp128, ptr @U, align 16
|
|
%2 = fsub fp128 0xL00000000000000000000000000000000, %1
|
|
%3 = fsub fp128 %2, %1
|
|
%4 = fadd fp128 %1, 0xL00000000000000000000000000000000
|
|
%5 = load fp128, ptr @Y1, align 16
|
|
%6 = fmul fp128 %2, %5
|
|
%7 = fadd fp128 %1, %4
|
|
%8 = fsub fp128 0xL00000000000000000000000000000000, %7
|
|
store fp128 %8, ptr @X, align 16
|
|
%9 = fmul fp128 %3, %5
|
|
%10 = fmul fp128 0xL00000000000000000000000000000000, %4
|
|
store fp128 %10, ptr @S, align 16
|
|
%11 = fsub fp128 %6, %3
|
|
store fp128 %11, ptr @T, align 16
|
|
%12 = fadd fp128 0xL00000000000000000000000000000000, %9
|
|
store fp128 %12, ptr @Y, align 16
|
|
%13 = fmul fp128 0xL00000000000000000000000000000000, %5
|
|
%14 = fadd fp128 %13, 0xL0000000000000000BFFE000000000000
|
|
store fp128 %14, ptr @Y1, align 16
|
|
ret void
|
|
}
|