Skip to content

Commit 5cd55cf

Browse files
committed
[RISC-V] Fix incorrect epilogue_begin setting in debug line table
The DwarfDebug.cpp implementation expects the epilogue instructions to have source location of last non-debug instruction after which the epilogue instructions are inserted. The epilogue_begin is set on location of the first FrameDestroy instruction with source line information that has been seen in the epilogue basic block. In the trunk, the risc-v backend sets the epilogue_begin after the epilogue has actually begun i.e. after callee saved register reloads and the source line information is not set on those reload instructions. This is leading to llvm#120553 where, while debugging, breaking on or single stepping to the epilogue_begin location will make accessing the variables from wrong place as the FP has been restored to the parent frame's FP. To fix that, this patch sets FrameSetup/FrameDestroy flags on the callee saved register spill/reload instructions which is actually correct. Then the RISCVInstrInfo::loadRegFromStackSlot uses FrameDestroy flag to identify a reload of the callee saved register in the epilogue and copies the source line information from insert position instruction to that reload instruction. Requires cce55a1 Fixes llvm#120553
1 parent f414207 commit 5cd55cf

11 files changed

+213
-145
lines changed

llvm/lib/Target/RISCV/RISCVFrameLowering.cpp

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -810,8 +810,7 @@ void RISCVFrameLowering::emitPrologue(MachineFunction &MF,
810810

811811
auto FirstFrameSetup = MBBI;
812812

813-
// Since spillCalleeSavedRegisters may have inserted a libcall, skip past
814-
// any instructions marked as FrameSetup
813+
// Skip past all callee-saved register spill instructions.
815814
while (MBBI != MBB.end() && MBBI->getFlag(MachineInstr::FrameSetup))
816815
++MBBI;
817816

@@ -820,6 +819,12 @@ void RISCVFrameLowering::emitPrologue(MachineFunction &MF,
820819

821820
const auto &CSI = MFI.getCalleeSavedInfo();
822821

822+
// Skip to before the spills of scalar callee-saved registers
823+
// FIXME: assumes exactly one instruction is used to restore each
824+
// callee-saved register.
825+
MBBI = std::prev(MBBI, getRVVCalleeSavedInfo(MF, CSI).size() +
826+
getUnmanagedCSI(MF, CSI).size());
827+
823828
// If libcalls are used to spill and restore callee-saved registers, the frame
824829
// has two sections; the opaque section managed by the libcalls, and the
825830
// section managed by MachineFrameInfo which can also hold callee saved
@@ -1076,8 +1081,7 @@ void RISCVFrameLowering::emitEpilogue(MachineFunction &MF,
10761081

10771082
MBBI = MBB.getFirstTerminator();
10781083

1079-
// If callee-saved registers are saved via libcall, place stack adjustment
1080-
// before this call.
1084+
// Skip to before the restores of all callee-saved registers.
10811085
while (MBBI != MBB.begin() &&
10821086
std::prev(MBBI)->getFlag(MachineInstr::FrameDestroy))
10831087
--MBBI;
@@ -1088,7 +1092,8 @@ void RISCVFrameLowering::emitEpilogue(MachineFunction &MF,
10881092
// Skip to before the restores of scalar callee-saved registers
10891093
// FIXME: assumes exactly one instruction is used to restore each
10901094
// callee-saved register.
1091-
auto LastFrameDestroy = std::prev(MBBI, getUnmanagedCSI(MF, CSI).size());
1095+
auto LastScalarFrameDestroy =
1096+
std::next(MBBI, getRVVCalleeSavedInfo(MF, CSI).size());
10921097

10931098
uint64_t FirstSPAdjustAmount = getFirstSPAdjustAmount(MF);
10941099
uint64_t RealStackSize = FirstSPAdjustAmount ? FirstSPAdjustAmount
@@ -1105,20 +1110,20 @@ void RISCVFrameLowering::emitEpilogue(MachineFunction &MF,
11051110
// If RestoreSPFromFP the stack pointer will be restored using the frame
11061111
// pointer value.
11071112
if (!RestoreSPFromFP)
1108-
RI->adjustReg(MBB, LastFrameDestroy, DL, SPReg, SPReg,
1113+
RI->adjustReg(MBB, LastScalarFrameDestroy, DL, SPReg, SPReg,
11091114
StackOffset::getScalable(RVVStackSize),
11101115
MachineInstr::FrameDestroy, getStackAlign());
11111116

11121117
if (!hasFP(MF)) {
11131118
unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::cfiDefCfa(
11141119
nullptr, RI->getDwarfRegNum(SPReg, true), RealStackSize));
1115-
BuildMI(MBB, LastFrameDestroy, DL,
1120+
BuildMI(MBB, LastScalarFrameDestroy, DL,
11161121
TII->get(TargetOpcode::CFI_INSTRUCTION))
11171122
.addCFIIndex(CFIIndex)
11181123
.setMIFlag(MachineInstr::FrameDestroy);
11191124
}
11201125

1121-
emitCalleeSavedRVVEpilogCFI(MBB, LastFrameDestroy);
1126+
emitCalleeSavedRVVEpilogCFI(MBB, LastScalarFrameDestroy);
11221127
}
11231128

11241129
if (FirstSPAdjustAmount) {
@@ -1130,14 +1135,14 @@ void RISCVFrameLowering::emitEpilogue(MachineFunction &MF,
11301135
// If RestoreSPFromFP the stack pointer will be restored using the frame
11311136
// pointer value.
11321137
if (!RestoreSPFromFP)
1133-
RI->adjustReg(MBB, LastFrameDestroy, DL, SPReg, SPReg,
1138+
RI->adjustReg(MBB, LastScalarFrameDestroy, DL, SPReg, SPReg,
11341139
StackOffset::getFixed(SecondSPAdjustAmount),
11351140
MachineInstr::FrameDestroy, getStackAlign());
11361141

11371142
if (!hasFP(MF)) {
11381143
unsigned CFIIndex = MF.addFrameInst(
11391144
MCCFIInstruction::cfiDefCfaOffset(nullptr, FirstSPAdjustAmount));
1140-
BuildMI(MBB, LastFrameDestroy, DL,
1145+
BuildMI(MBB, LastScalarFrameDestroy, DL,
11411146
TII->get(TargetOpcode::CFI_INSTRUCTION))
11421147
.addCFIIndex(CFIIndex)
11431148
.setMIFlag(MachineInstr::FrameDestroy);
@@ -1156,19 +1161,25 @@ void RISCVFrameLowering::emitEpilogue(MachineFunction &MF,
11561161
// have vector objects in stack.
11571162
if (RestoreSPFromFP) {
11581163
assert(hasFP(MF) && "frame pointer should not have been eliminated");
1159-
RI->adjustReg(MBB, LastFrameDestroy, DL, SPReg, FPReg,
1164+
RI->adjustReg(MBB, LastScalarFrameDestroy, DL, SPReg, FPReg,
11601165
StackOffset::getFixed(-FPOffset), MachineInstr::FrameDestroy,
11611166
getStackAlign());
11621167
}
11631168

11641169
if (hasFP(MF)) {
11651170
unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::cfiDefCfa(
11661171
nullptr, RI->getDwarfRegNum(SPReg, true), RealStackSize));
1167-
BuildMI(MBB, LastFrameDestroy, DL, TII->get(TargetOpcode::CFI_INSTRUCTION))
1172+
BuildMI(MBB, LastScalarFrameDestroy, DL,
1173+
TII->get(TargetOpcode::CFI_INSTRUCTION))
11681174
.addCFIIndex(CFIIndex)
11691175
.setMIFlag(MachineInstr::FrameDestroy);
11701176
}
11711177

1178+
// Skip to after the restores of scalar callee-saved registers
1179+
// FIXME: assumes exactly one instruction is used to restore each
1180+
// callee-saved register.
1181+
MBBI = std::next(LastScalarFrameDestroy, getUnmanagedCSI(MF, CSI).size());
1182+
11721183
if (getLibCallID(MF, CSI) != -1) {
11731184
// tail __riscv_restore_[0-12] instruction is considered as a terminator,
11741185
// therefor it is unnecessary to place any CFI instructions after it. Just
@@ -1898,7 +1909,8 @@ bool RISCVFrameLowering::spillCalleeSavedRegisters(
18981909
Register Reg = CS.getReg();
18991910
const TargetRegisterClass *RC = TRI->getMinimalPhysRegClass(Reg);
19001911
TII.storeRegToStackSlot(MBB, MI, Reg, !MBB.isLiveIn(Reg),
1901-
CS.getFrameIdx(), RC, TRI, Register());
1912+
CS.getFrameIdx(), RC, TRI, Register(),
1913+
MachineInstr::FrameSetup);
19021914
}
19031915
};
19041916
storeRegsToStackSlots(UnmanagedCSI);
@@ -2009,7 +2021,7 @@ bool RISCVFrameLowering::restoreCalleeSavedRegisters(
20092021
Register Reg = CS.getReg();
20102022
const TargetRegisterClass *RC = TRI->getMinimalPhysRegClass(Reg);
20112023
TII.loadRegFromStackSlot(MBB, MI, Reg, CS.getFrameIdx(), RC, TRI,
2012-
Register());
2024+
Register(), MachineInstr::FrameDestroy);
20132025
assert(MI != MBB.begin() &&
20142026
"loadRegFromStackSlot didn't insert any code!");
20152027
}

llvm/lib/Target/RISCV/RISCVInstrInfo.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -650,7 +650,8 @@ void RISCVInstrInfo::storeRegToStackSlot(MachineBasicBlock &MBB,
650650
BuildMI(MBB, I, DebugLoc(), get(Opcode))
651651
.addReg(SrcReg, getKillRegState(IsKill))
652652
.addFrameIndex(FI)
653-
.addMemOperand(MMO);
653+
.addMemOperand(MMO)
654+
.setMIFlag(Flags);
654655
} else {
655656
MachineMemOperand *MMO = MF->getMachineMemOperand(
656657
MachinePointerInfo::getFixedStack(*MF, FI), MachineMemOperand::MOStore,
@@ -660,7 +661,8 @@ void RISCVInstrInfo::storeRegToStackSlot(MachineBasicBlock &MBB,
660661
.addReg(SrcReg, getKillRegState(IsKill))
661662
.addFrameIndex(FI)
662663
.addImm(0)
663-
.addMemOperand(MMO);
664+
.addMemOperand(MMO)
665+
.setMIFlag(Flags);
664666
}
665667
}
666668

@@ -670,6 +672,8 @@ void RISCVInstrInfo::loadRegFromStackSlot(
670672
Register VReg, MachineInstr::MIFlag Flags) const {
671673
MachineFunction *MF = MBB.getParent();
672674
MachineFrameInfo &MFI = MF->getFrameInfo();
675+
DebugLoc DL =
676+
Flags & MachineInstr::FrameDestroy ? MBB.findDebugLoc(I) : DebugLoc();
673677

674678
unsigned Opcode;
675679
bool IsScalableVector = true;
@@ -734,18 +738,20 @@ void RISCVInstrInfo::loadRegFromStackSlot(
734738
LocationSize::beforeOrAfterPointer(), MFI.getObjectAlign(FI));
735739

736740
MFI.setStackID(FI, TargetStackID::ScalableVector);
737-
BuildMI(MBB, I, DebugLoc(), get(Opcode), DstReg)
741+
BuildMI(MBB, I, DL, get(Opcode), DstReg)
738742
.addFrameIndex(FI)
739-
.addMemOperand(MMO);
743+
.addMemOperand(MMO)
744+
.setMIFlag(Flags);
740745
} else {
741746
MachineMemOperand *MMO = MF->getMachineMemOperand(
742747
MachinePointerInfo::getFixedStack(*MF, FI), MachineMemOperand::MOLoad,
743748
MFI.getObjectSize(FI), MFI.getObjectAlign(FI));
744749

745-
BuildMI(MBB, I, DebugLoc(), get(Opcode), DstReg)
750+
BuildMI(MBB, I, DL, get(Opcode), DstReg)
746751
.addFrameIndex(FI)
747752
.addImm(0)
748-
.addMemOperand(MMO);
753+
.addMemOperand(MMO)
754+
.setMIFlag(Flags);
749755
}
750756
}
751757

llvm/test/CodeGen/RISCV/debug-line.ll

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
; RUN: llc -mtriple=riscv64 < %s | FileCheck %s
2+
3+
target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
4+
target triple = "riscv64-unknown-linux-gnu"
5+
6+
define void @foo() #0 !dbg !3 {
7+
; CHECK-LABEL: foo:
8+
; CHECK: .Lfunc_begin0:
9+
; CHECK-NEXT: .file 1 "test.c"
10+
; CHECK-NEXT: .loc 1 5 0 # test.c:5:0
11+
; CHECK-NEXT: .cfi_startproc
12+
; CHECK-NEXT: # %bb.0: # %entry
13+
; CHECK-NEXT: addi sp, sp, -16
14+
; CHECK-NEXT: .cfi_def_cfa_offset 16
15+
; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
16+
; CHECK-NEXT: sd s0, 0(sp) # 8-byte Folded Spill
17+
; CHECK-NEXT: .cfi_offset ra, -8
18+
; CHECK-NEXT: .cfi_offset s0, -16
19+
; CHECK-NEXT: addi s0, sp, 16
20+
; CHECK-NEXT: .cfi_def_cfa s0, 0
21+
; CHECK-NEXT: .Ltmp0:
22+
; CHECK-NEXT: .loc 1 6 4 prologue_end # test.c:6:4
23+
; CHECK-NEXT: sw zero, 0(zero)
24+
; CHECK-NEXT: .cfi_def_cfa sp, 16
25+
; CHECK-NEXT: .loc 1 7 1 epilogue_begin # test.c:7:1
26+
; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
27+
; CHECK-NEXT: ld s0, 0(sp) # 8-byte Folded Reload
28+
; CHECK-NEXT: .cfi_restore ra
29+
; CHECK-NEXT: .cfi_restore s0
30+
; CHECK-NEXT: addi sp, sp, 16
31+
; CHECK-NEXT: .cfi_def_cfa_offset 0
32+
; CHECK-NEXT: ret
33+
entry:
34+
store i32 0, ptr null, align 4, !dbg !6
35+
ret void, !dbg !7
36+
}
37+
38+
attributes #0 = { "frame-pointer"="all" }
39+
40+
!llvm.dbg.cu = !{!0}
41+
!llvm.module.flags = !{!2}
42+
43+
!0 = distinct !DICompileUnit(language: DW_LANG_C11, file: !1, emissionKind: FullDebug)
44+
!1 = !DIFile(filename: "test.c", directory: "")
45+
!2 = !{i32 2, !"Debug Info Version", i32 3}
46+
!3 = distinct !DISubprogram(name: "foo", scope: !1, file: !1, line: 5, type: !4, scopeLine: 5, unit: !0)
47+
!4 = !DISubroutineType(types: !5)
48+
!5 = !{null}
49+
!6 = !DILocation(line: 6, column: 4, scope: !3)
50+
!7 = !DILocation(line: 7, column: 1, scope: !3)

llvm/test/CodeGen/RISCV/kcfi-mir.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ define void @f1(ptr noundef %x) !kcfi_type !1 {
88
; CHECK-NEXT: {{ $}}
99
; CHECK-NEXT: $x2 = frame-setup ADDI $x2, -16
1010
; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
11-
; CHECK-NEXT: SD killed $x1, $x2, 8 :: (store (s64) into %stack.0)
11+
; CHECK-NEXT: frame-setup SD killed $x1, $x2, 8 :: (store (s64) into %stack.0)
1212
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -8
1313
; CHECK-NEXT: BUNDLE implicit-def $x6, implicit-def $x6_w, implicit-def $x6_h, implicit-def $x7, implicit-def $x7_w, implicit-def $x7_h, implicit-def $x28, implicit-def $x28_w, implicit-def $x28_h, implicit-def $x29, implicit-def $x29_w, implicit-def $x29_h, implicit-def $x30, implicit-def $x30_w, implicit-def $x30_h, implicit-def $x31, implicit-def $x31_w, implicit-def $x31_h, implicit-def dead $x1, implicit-def $x2, implicit-def $x2_w, implicit-def $x2_h, implicit killed $x10 {
1414
; CHECK-NEXT: KCFI_CHECK $x10, 12345678, implicit-def $x6, implicit-def $x7, implicit-def $x28, implicit-def $x29, implicit-def $x30, implicit-def $x31
1515
; CHECK-NEXT: PseudoCALLIndirect killed $x10, csr_ilp32_lp64, implicit-def dead $x1, implicit-def $x2
1616
; CHECK-NEXT: }
17-
; CHECK-NEXT: $x1 = LD $x2, 8 :: (load (s64) from %stack.0)
17+
; CHECK-NEXT: $x1 = frame-destroy LD $x2, 8 :: (load (s64) from %stack.0)
1818
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $x1
1919
; CHECK-NEXT: $x2 = frame-destroy ADDI $x2, 16
2020
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0

llvm/test/CodeGen/RISCV/live-sp.mir

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,13 @@ body: |
7474
; CHECK-NEXT: {{ $}}
7575
; CHECK-NEXT: $x2 = frame-setup ADDI $x2, -16
7676
; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
77-
; CHECK-NEXT: SD $x1, $x2, 8 :: (store (s64) into %stack.1)
77+
; CHECK-NEXT: frame-setup SD $x1, $x2, 8 :: (store (s64) into %stack.1)
7878
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -8
7979
; CHECK-NEXT: SW renamable $x1, $x2, 4 :: (store (s32) into %ir.a)
8080
; CHECK-NEXT: renamable $x11 = ADDIW killed renamable $x1, 0
8181
; CHECK-NEXT: $x10 = COPY $x0
8282
; CHECK-NEXT: PseudoCALL target-flags(riscv-call) @vararg, csr_ilp32_lp64, implicit-def dead $x1, implicit killed $x10, implicit $x11, implicit-def $x2
83-
; CHECK-NEXT: $x1 = LD $x2, 8 :: (load (s64) from %stack.1)
83+
; CHECK-NEXT: $x1 = frame-destroy LD $x2, 8 :: (load (s64) from %stack.1)
8484
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $x1
8585
; CHECK-NEXT: $x2 = frame-destroy ADDI $x2, 16
8686
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0

llvm/test/CodeGen/RISCV/rvv/addi-scalable-offset.mir

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ body: |
3030
; CHECK-NEXT: {{ $}}
3131
; CHECK-NEXT: $x2 = frame-setup ADDI $x2, -2032
3232
; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 2032
33-
; CHECK-NEXT: SD killed $x1, $x2, 2024 :: (store (s64) into %stack.3)
34-
; CHECK-NEXT: SD killed $x8, $x2, 2016 :: (store (s64) into %stack.4)
33+
; CHECK-NEXT: frame-setup SD killed $x1, $x2, 2024 :: (store (s64) into %stack.3)
34+
; CHECK-NEXT: frame-setup SD killed $x8, $x2, 2016 :: (store (s64) into %stack.4)
3535
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -8
3636
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -16
3737
; CHECK-NEXT: $x8 = frame-setup ADDI $x2, 2032
@@ -48,8 +48,8 @@ body: |
4848
; CHECK-NEXT: VS1R_V killed renamable $v8, killed renamable $x10
4949
; CHECK-NEXT: $x2 = frame-destroy ADDI $x8, -2032
5050
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa $x2, 2032
51-
; CHECK-NEXT: $x1 = LD $x2, 2024 :: (load (s64) from %stack.3)
52-
; CHECK-NEXT: $x8 = LD $x2, 2016 :: (load (s64) from %stack.4)
51+
; CHECK-NEXT: $x1 = frame-destroy LD $x2, 2024 :: (load (s64) from %stack.3)
52+
; CHECK-NEXT: $x8 = frame-destroy LD $x2, 2016 :: (load (s64) from %stack.4)
5353
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $x1
5454
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $x8
5555
; CHECK-NEXT: $x2 = frame-destroy ADDI $x2, 2032

llvm/test/CodeGen/RISCV/rvv/emergency-slot.mir

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -55,18 +55,18 @@ body: |
5555
; CHECK-NEXT: {{ $}}
5656
; CHECK-NEXT: $x2 = frame-setup ADDI $x2, -2032
5757
; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 2032
58-
; CHECK-NEXT: SD killed $x1, $x2, 2024 :: (store (s64) into %stack.3)
59-
; CHECK-NEXT: SD killed $x8, $x2, 2016 :: (store (s64) into %stack.4)
60-
; CHECK-NEXT: SD killed $x18, $x2, 2008 :: (store (s64) into %stack.5)
61-
; CHECK-NEXT: SD killed $x19, $x2, 2000 :: (store (s64) into %stack.6)
62-
; CHECK-NEXT: SD killed $x20, $x2, 1992 :: (store (s64) into %stack.7)
63-
; CHECK-NEXT: SD killed $x21, $x2, 1984 :: (store (s64) into %stack.8)
64-
; CHECK-NEXT: SD killed $x22, $x2, 1976 :: (store (s64) into %stack.9)
65-
; CHECK-NEXT: SD killed $x23, $x2, 1968 :: (store (s64) into %stack.10)
66-
; CHECK-NEXT: SD killed $x24, $x2, 1960 :: (store (s64) into %stack.11)
67-
; CHECK-NEXT: SD killed $x25, $x2, 1952 :: (store (s64) into %stack.12)
68-
; CHECK-NEXT: SD killed $x26, $x2, 1944 :: (store (s64) into %stack.13)
69-
; CHECK-NEXT: SD killed $x27, $x2, 1936 :: (store (s64) into %stack.14)
58+
; CHECK-NEXT: frame-setup SD killed $x1, $x2, 2024 :: (store (s64) into %stack.3)
59+
; CHECK-NEXT: frame-setup SD killed $x8, $x2, 2016 :: (store (s64) into %stack.4)
60+
; CHECK-NEXT: frame-setup SD killed $x18, $x2, 2008 :: (store (s64) into %stack.5)
61+
; CHECK-NEXT: frame-setup SD killed $x19, $x2, 2000 :: (store (s64) into %stack.6)
62+
; CHECK-NEXT: frame-setup SD killed $x20, $x2, 1992 :: (store (s64) into %stack.7)
63+
; CHECK-NEXT: frame-setup SD killed $x21, $x2, 1984 :: (store (s64) into %stack.8)
64+
; CHECK-NEXT: frame-setup SD killed $x22, $x2, 1976 :: (store (s64) into %stack.9)
65+
; CHECK-NEXT: frame-setup SD killed $x23, $x2, 1968 :: (store (s64) into %stack.10)
66+
; CHECK-NEXT: frame-setup SD killed $x24, $x2, 1960 :: (store (s64) into %stack.11)
67+
; CHECK-NEXT: frame-setup SD killed $x25, $x2, 1952 :: (store (s64) into %stack.12)
68+
; CHECK-NEXT: frame-setup SD killed $x26, $x2, 1944 :: (store (s64) into %stack.13)
69+
; CHECK-NEXT: frame-setup SD killed $x27, $x2, 1936 :: (store (s64) into %stack.14)
7070
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $x1, -8
7171
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -16
7272
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $x18, -24
@@ -152,18 +152,18 @@ body: |
152152
; CHECK-NEXT: bb.2:
153153
; CHECK-NEXT: $x2 = frame-destroy ADDI $x8, -2032
154154
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa $x2, 2032
155-
; CHECK-NEXT: $x1 = LD $x2, 2024 :: (load (s64) from %stack.3)
156-
; CHECK-NEXT: $x8 = LD $x2, 2016 :: (load (s64) from %stack.4)
157-
; CHECK-NEXT: $x18 = LD $x2, 2008 :: (load (s64) from %stack.5)
158-
; CHECK-NEXT: $x19 = LD $x2, 2000 :: (load (s64) from %stack.6)
159-
; CHECK-NEXT: $x20 = LD $x2, 1992 :: (load (s64) from %stack.7)
160-
; CHECK-NEXT: $x21 = LD $x2, 1984 :: (load (s64) from %stack.8)
161-
; CHECK-NEXT: $x22 = LD $x2, 1976 :: (load (s64) from %stack.9)
162-
; CHECK-NEXT: $x23 = LD $x2, 1968 :: (load (s64) from %stack.10)
163-
; CHECK-NEXT: $x24 = LD $x2, 1960 :: (load (s64) from %stack.11)
164-
; CHECK-NEXT: $x25 = LD $x2, 1952 :: (load (s64) from %stack.12)
165-
; CHECK-NEXT: $x26 = LD $x2, 1944 :: (load (s64) from %stack.13)
166-
; CHECK-NEXT: $x27 = LD $x2, 1936 :: (load (s64) from %stack.14)
155+
; CHECK-NEXT: $x1 = frame-destroy LD $x2, 2024 :: (load (s64) from %stack.3)
156+
; CHECK-NEXT: $x8 = frame-destroy LD $x2, 2016 :: (load (s64) from %stack.4)
157+
; CHECK-NEXT: $x18 = frame-destroy LD $x2, 2008 :: (load (s64) from %stack.5)
158+
; CHECK-NEXT: $x19 = frame-destroy LD $x2, 2000 :: (load (s64) from %stack.6)
159+
; CHECK-NEXT: $x20 = frame-destroy LD $x2, 1992 :: (load (s64) from %stack.7)
160+
; CHECK-NEXT: $x21 = frame-destroy LD $x2, 1984 :: (load (s64) from %stack.8)
161+
; CHECK-NEXT: $x22 = frame-destroy LD $x2, 1976 :: (load (s64) from %stack.9)
162+
; CHECK-NEXT: $x23 = frame-destroy LD $x2, 1968 :: (load (s64) from %stack.10)
163+
; CHECK-NEXT: $x24 = frame-destroy LD $x2, 1960 :: (load (s64) from %stack.11)
164+
; CHECK-NEXT: $x25 = frame-destroy LD $x2, 1952 :: (load (s64) from %stack.12)
165+
; CHECK-NEXT: $x26 = frame-destroy LD $x2, 1944 :: (load (s64) from %stack.13)
166+
; CHECK-NEXT: $x27 = frame-destroy LD $x2, 1936 :: (load (s64) from %stack.14)
167167
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $x1
168168
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $x8
169169
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $x18

0 commit comments

Comments
 (0)