[llvm] [ARM] Specifically delineate between different GPRCS2 positions (PR #116716)
Benson Chu via llvm-commits
llvm-commits at lists.llvm.org
Mon Nov 18 16:17:21 PST 2024
================
@@ -1063,33 +1068,34 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF,
}
}
- // Move past DPRCS1.
- if (DPRCSSize > 0) {
+ // Move past DPRCS1Size.
+ if (DPRCS1Size > 0) {
// Since vpush register list cannot have gaps, there may be multiple vpush
// instructions in the prologue.
while (MBBI != MBB.end() && MBBI->getOpcode() == ARM::VSTMDDB_UPD) {
DefCFAOffsetCandidates.addInst(MBBI, sizeOfSPAdjustment(*MBBI),
BeforeFPPush);
- LastPush = MBBI++;
+ DPRCS1Push = LastPush = MBBI++;
}
}
// Move past the aligned DPRCS2 area.
- if (AFI->getNumAlignedDPRCS2Regs() > 0) {
+ if (DPRCS2Size > 0) {
MBBI = skipAlignedDPRCS2Spills(MBBI, AFI->getNumAlignedDPRCS2Regs());
// The code inserted by emitAlignedDPRCS2Spills realigns the stack, and
// leaves the stack pointer pointing to the DPRCS2 area.
//
// Adjust NumBytes to represent the stack slots below the DPRCS2 area.
NumBytes += MFI.getObjectOffset(D8SpillFI);
} else
- NumBytes = DPRCSOffset;
-
- // Move GPRCS2, if using using SplitR11WindowsSEH.
- if (GPRCS2Size > 0 && PushPopSplit == ARMSubtarget::SplitR11WindowsSEH) {
- GPRCS2Push = LastPush = MBBI++;
- DefCFAOffsetCandidates.addInst(LastPush, GPRCS2Size, BeforeFPPush);
- if (FramePtrSpillArea == SpillArea::GPRCS2)
+ NumBytes = DPRCS1Offset;
+
+ // Move GPRCS3, if using using SplitR11WindowsSEH.
+ if (GPRCS3Size > 0) {
+ assert(PushPopSplit == ARMSubtarget::SplitR11WindowsSEH);
----------------
pestctrl wrote:
I left these asserts here to serve as reminders of what `GPRCS2Size > 0` and `GPRCS3Size > 0` likewise imply, but someone doesn't like them being here, I can remove them. Checking for GPRCS2Size/GPRCS3Size provides all the frame code needs to know.
https://github.com/llvm/llvm-project/pull/116716
More information about the llvm-commits
mailing list