Skip to content

Commit 6f11ff0

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 #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 #120553
1 parent cce55a1 commit 6f11ff0

File tree

11 files changed

+213
-145
lines changed

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
@@ -726,8 +726,7 @@ void RISCVFrameLowering::emitPrologue(MachineFunction &MF,
726726

727727
auto FirstFrameSetup = MBBI;
728728

729-
// Since spillCalleeSavedRegisters may have inserted a libcall, skip past
730-
// any instructions marked as FrameSetup
729+
// Skip past all callee-saved register spill instructions.
731730
while (MBBI != MBB.end() && MBBI->getFlag(MachineInstr::FrameSetup))
732731
++MBBI;
733732

@@ -736,6 +735,12 @@ void RISCVFrameLowering::emitPrologue(MachineFunction &MF,
736735

737736
const auto &CSI = MFI.getCalleeSavedInfo();
738737

738+
// Skip to before the spills of scalar callee-saved registers
739+
// FIXME: assumes exactly one instruction is used to restore each
740+
// callee-saved register.
741+
MBBI = std::prev(MBBI, getRVVCalleeSavedInfo(MF, CSI).size() +
742+
getUnmanagedCSI(MF, CSI).size());
743+
739744
// If libcalls are used to spill and restore callee-saved registers, the frame
740745
// has two sections; the opaque section managed by the libcalls, and the
741746
// section managed by MachineFrameInfo which can also hold callee saved
@@ -971,8 +976,7 @@ void RISCVFrameLowering::emitEpilogue(MachineFunction &MF,
971976

972977
MBBI = MBB.getFirstTerminator();
973978

974-
// If callee-saved registers are saved via libcall, place stack adjustment
975-
// before this call.
979+
// Skip to before the restores of all callee-saved registers.
976980
while (MBBI != MBB.begin() &&
977981
std::prev(MBBI)->getFlag(MachineInstr::FrameDestroy))
978982
--MBBI;
@@ -983,7 +987,8 @@ void RISCVFrameLowering::emitEpilogue(MachineFunction &MF,
983987
// Skip to before the restores of scalar callee-saved registers
984988
// FIXME: assumes exactly one instruction is used to restore each
985989
// callee-saved register.
986-
auto LastFrameDestroy = std::prev(MBBI, getUnmanagedCSI(MF, CSI).size());
990+
auto LastScalarFrameDestroy =
991+
std::next(MBBI, getRVVCalleeSavedInfo(MF, CSI).size());
987992

988993
uint64_t FirstSPAdjustAmount = getFirstSPAdjustAmount(MF);
989994
uint64_t RealStackSize = FirstSPAdjustAmount ? FirstSPAdjustAmount
@@ -1000,20 +1005,20 @@ void RISCVFrameLowering::emitEpilogue(MachineFunction &MF,
10001005
// If RestoreSPFromFP the stack pointer will be restored using the frame
10011006
// pointer value.
10021007
if (!RestoreSPFromFP)
1003-
RI->adjustReg(MBB, LastFrameDestroy, DL, SPReg, SPReg,
1008+
RI->adjustReg(MBB, LastScalarFrameDestroy, DL, SPReg, SPReg,
10041009
StackOffset::getScalable(RVVStackSize),
10051010
MachineInstr::FrameDestroy, getStackAlign());
10061011

10071012
if (!hasFP(MF)) {
10081013
unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::cfiDefCfa(
10091014
nullptr, RI->getDwarfRegNum(SPReg, true), RealStackSize));
1010-
BuildMI(MBB, LastFrameDestroy, DL,
1015+
BuildMI(MBB, LastScalarFrameDestroy, DL,
10111016
TII->get(TargetOpcode::CFI_INSTRUCTION))
10121017
.addCFIIndex(CFIIndex)
10131018
.setMIFlag(MachineInstr::FrameDestroy);
10141019
}
10151020

1016-
emitCalleeSavedRVVEpilogCFI(MBB, LastFrameDestroy);
1021+
emitCalleeSavedRVVEpilogCFI(MBB, LastScalarFrameDestroy);
10171022
}
10181023

10191024
if (FirstSPAdjustAmount) {
@@ -1025,14 +1030,14 @@ void RISCVFrameLowering::emitEpilogue(MachineFunction &MF,
10251030
// If RestoreSPFromFP the stack pointer will be restored using the frame
10261031
// pointer value.
10271032
if (!RestoreSPFromFP)
1028-
RI->adjustReg(MBB, LastFrameDestroy, DL, SPReg, SPReg,
1033+
RI->adjustReg(MBB, LastScalarFrameDestroy, DL, SPReg, SPReg,
10291034
StackOffset::getFixed(SecondSPAdjustAmount),
10301035
MachineInstr::FrameDestroy, getStackAlign());
10311036

10321037
if (!hasFP(MF)) {
10331038
unsigned CFIIndex = MF.addFrameInst(
10341039
MCCFIInstruction::cfiDefCfaOffset(nullptr, FirstSPAdjustAmount));
1035-
BuildMI(MBB, LastFrameDestroy, DL,
1040+
BuildMI(MBB, LastScalarFrameDestroy, DL,
10361041
TII->get(TargetOpcode::CFI_INSTRUCTION))
10371042
.addCFIIndex(CFIIndex)
10381043
.setMIFlag(MachineInstr::FrameDestroy);
@@ -1051,19 +1056,25 @@ void RISCVFrameLowering::emitEpilogue(MachineFunction &MF,
10511056
// have vector objects in stack.
10521057
if (RestoreSPFromFP) {
10531058
assert(hasFP(MF) && "frame pointer should not have been eliminated");
1054-
RI->adjustReg(MBB, LastFrameDestroy, DL, SPReg, FPReg,
1059+
RI->adjustReg(MBB, LastScalarFrameDestroy, DL, SPReg, FPReg,
10551060
StackOffset::getFixed(-FPOffset), MachineInstr::FrameDestroy,
10561061
getStackAlign());
10571062
}
10581063

10591064
if (hasFP(MF)) {
10601065
unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::cfiDefCfa(
10611066
nullptr, RI->getDwarfRegNum(SPReg, true), RealStackSize));
1062-
BuildMI(MBB, LastFrameDestroy, DL, TII->get(TargetOpcode::CFI_INSTRUCTION))
1067+
BuildMI(MBB, LastScalarFrameDestroy, DL,
1068+
TII->get(TargetOpcode::CFI_INSTRUCTION))
10631069
.addCFIIndex(CFIIndex)
10641070
.setMIFlag(MachineInstr::FrameDestroy);
10651071
}
10661072

1073+
// Skip to after the restores of scalar callee-saved registers
1074+
// FIXME: assumes exactly one instruction is used to restore each
1075+
// callee-saved register.
1076+
MBBI = std::next(LastScalarFrameDestroy, getUnmanagedCSI(MF, CSI).size());
1077+
10671078
if (getLibCallID(MF, CSI) != -1) {
10681079
// tail __riscv_restore_[0-12] instruction is considered as a terminator,
10691080
// therefor it is unnecessary to place any CFI instructions after it. Just
@@ -1793,7 +1804,8 @@ bool RISCVFrameLowering::spillCalleeSavedRegisters(
17931804
Register Reg = CS.getReg();
17941805
const TargetRegisterClass *RC = TRI->getMinimalPhysRegClass(Reg);
17951806
TII.storeRegToStackSlot(MBB, MI, Reg, !MBB.isLiveIn(Reg),
1796-
CS.getFrameIdx(), RC, TRI, Register());
1807+
CS.getFrameIdx(), RC, TRI, Register(),
1808+
MachineInstr::FrameSetup);
17971809
}
17981810
};
17991811
storeRegsToStackSlots(UnmanagedCSI);
@@ -1904,7 +1916,7 @@ bool RISCVFrameLowering::restoreCalleeSavedRegisters(
19041916
Register Reg = CS.getReg();
19051917
const TargetRegisterClass *RC = TRI->getMinimalPhysRegClass(Reg);
19061918
TII.loadRegFromStackSlot(MBB, MI, Reg, CS.getFrameIdx(), RC, TRI,
1907-
Register());
1919+
Register(), MachineInstr::FrameDestroy);
19081920
assert(MI != MBB.begin() &&
19091921
"loadRegFromStackSlot didn't insert any code!");
19101922
}

llvm/lib/Target/RISCV/RISCVInstrInfo.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -656,7 +656,8 @@ void RISCVInstrInfo::storeRegToStackSlot(MachineBasicBlock &MBB,
656656
BuildMI(MBB, I, DebugLoc(), get(Opcode))
657657
.addReg(SrcReg, getKillRegState(IsKill))
658658
.addFrameIndex(FI)
659-
.addMemOperand(MMO);
659+
.addMemOperand(MMO)
660+
.setMIFlag(Flags);
660661
} else {
661662
MachineMemOperand *MMO = MF->getMachineMemOperand(
662663
MachinePointerInfo::getFixedStack(*MF, FI), MachineMemOperand::MOStore,
@@ -666,7 +667,8 @@ void RISCVInstrInfo::storeRegToStackSlot(MachineBasicBlock &MBB,
666667
.addReg(SrcReg, getKillRegState(IsKill))
667668
.addFrameIndex(FI)
668669
.addImm(0)
669-
.addMemOperand(MMO);
670+
.addMemOperand(MMO)
671+
.setMIFlag(Flags);
670672
}
671673
}
672674

@@ -676,6 +678,8 @@ void RISCVInstrInfo::loadRegFromStackSlot(
676678
Register VReg, MachineInstr::MIFlag Flags) const {
677679
MachineFunction *MF = MBB.getParent();
678680
MachineFrameInfo &MFI = MF->getFrameInfo();
681+
DebugLoc DL =
682+
Flags & MachineInstr::FrameDestroy ? MBB.findDebugLoc(I) : DebugLoc();
679683

680684
unsigned Opcode;
681685
bool IsScalableVector = true;
@@ -740,18 +744,20 @@ void RISCVInstrInfo::loadRegFromStackSlot(
740744
LocationSize::beforeOrAfterPointer(), MFI.getObjectAlign(FI));
741745

742746
MFI.setStackID(FI, TargetStackID::ScalableVector);
743-
BuildMI(MBB, I, DebugLoc(), get(Opcode), DstReg)
747+
BuildMI(MBB, I, DL, get(Opcode), DstReg)
744748
.addFrameIndex(FI)
745-
.addMemOperand(MMO);
749+
.addMemOperand(MMO)
750+
.setMIFlag(Flags);
746751
} else {
747752
MachineMemOperand *MMO = MF->getMachineMemOperand(
748753
MachinePointerInfo::getFixedStack(*MF, FI), MachineMemOperand::MOLoad,
749754
MFI.getObjectSize(FI), MFI.getObjectAlign(FI));
750755

751-
BuildMI(MBB, I, DebugLoc(), get(Opcode), DstReg)
756+
BuildMI(MBB, I, DL, get(Opcode), DstReg)
752757
.addFrameIndex(FI)
753758
.addImm(0)
754-
.addMemOperand(MMO);
759+
.addMemOperand(MMO)
760+
.setMIFlag(Flags);
755761
}
756762
}
757763

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)