[llvm] Revert "[ARM] R11 not pushed adjacent to link register with PAC-M and… (PR #84019)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 5 06:14:38 PST 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-arm
Author: James Westwood (jwestwood921)
<details>
<summary>Changes</summary>
… AAPCS frame chain fix (#<!-- -->82801)"
This reverts commit 00e4a4197137410129d4725ffb82bae9ce44bdde. This patch was found to cause miscompilations and compilation failures.
---
Patch is 24.70 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/84019.diff
6 Files Affected:
- (modified) llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp (+2-4)
- (modified) llvm/lib/Target/ARM/ARMFrameLowering.cpp (+60-155)
- (modified) llvm/lib/Target/ARM/ARMSubtarget.cpp (+5-32)
- (modified) llvm/lib/Target/ARM/ARMSubtarget.h (+13-22)
- (modified) llvm/lib/Target/ARM/Thumb1FrameLowering.cpp (+13-2)
- (removed) llvm/test/CodeGen/Thumb2/pacbti-m-frame-chain.ll (-82)
``````````diff
diff --git a/llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp b/llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp
index 4971281ec2388b..9adf758b46c481 100644
--- a/llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp
+++ b/llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp
@@ -62,16 +62,14 @@ ARMBaseRegisterInfo::ARMBaseRegisterInfo()
const MCPhysReg*
ARMBaseRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
const ARMSubtarget &STI = MF->getSubtarget<ARMSubtarget>();
- bool UseSplitPush = (STI.getPushPopSplitVariation(*MF) ==
- ARMSubtarget::PushPopSplitVariation::R7Split);
+ bool UseSplitPush = STI.splitFramePushPop(*MF);
const Function &F = MF->getFunction();
if (F.getCallingConv() == CallingConv::GHC) {
// GHC set of callee saved regs is empty as all those regs are
// used for passing STG regs around
return CSR_NoRegs_SaveList;
- } else if (STI.getPushPopSplitVariation(*MF) ==
- ARMSubtarget::PushPopSplitVariation::R11SplitWindowsSEHUnwind) {
+ } else if (STI.splitFramePointerPush(*MF)) {
return CSR_Win_SplitFP_SaveList;
} else if (F.getCallingConv() == CallingConv::CFGuard_Check) {
return CSR_Win_AAPCS_CFGuard_Check_SaveList;
diff --git a/llvm/lib/Target/ARM/ARMFrameLowering.cpp b/llvm/lib/Target/ARM/ARMFrameLowering.cpp
index d251ad5543bafc..9b54dd4e4e618d 100644
--- a/llvm/lib/Target/ARM/ARMFrameLowering.cpp
+++ b/llvm/lib/Target/ARM/ARMFrameLowering.cpp
@@ -718,14 +718,9 @@ static int getMaxFPOffset(const ARMSubtarget &STI, const ARMFunctionInfo &AFI,
// This is a conservative estimation: Assume the frame pointer being r7 and
// pc("r15") up to r8 getting spilled before (= 8 registers).
int MaxRegBytes = 8 * 4;
- if (STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R11SplitAAPCSBranchSigning)
+ if (STI.splitFramePointerPush(MF)) {
// Here, r11 can be stored below all of r4-r15 (3 registers more than
- // above).
- MaxRegBytes = 11 * 4;
- if (STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R11SplitWindowsSEHUnwind) {
- // Here, r11 can be stored below all of r4-r15 plus d8-d15.
+ // above), plus d8-d15.
MaxRegBytes = 11 * 4 + 8 * 8;
}
int FPCXTSaveSize =
@@ -793,10 +788,7 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF,
}
// Determine spill area sizes.
- if (STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R11SplitAAPCSBranchSigning ||
- STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R11SplitWindowsSEHUnwind) {
+ if (STI.splitFramePointerPush(MF)) {
for (const CalleeSavedInfo &I : CSI) {
Register Reg = I.getReg();
int FI = I.getFrameIdx();
@@ -842,8 +834,7 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF,
case ARM::R10:
case ARM::R11:
case ARM::R12:
- if (STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R7Split) {
+ if (STI.splitFramePushPop(MF)) {
GPRCS2Size += 4;
break;
}
@@ -906,15 +897,13 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF,
unsigned GPRCS2Offset = GPRCS1Offset - GPRCS2Size;
Align DPRAlign = DPRCSSize ? std::min(Align(8), Alignment) : Align(4);
unsigned DPRGapSize = GPRCS1Size + FPCXTSaveSize + ArgRegsSaveSize;
- if (STI.getPushPopSplitVariation(MF) !=
- ARMSubtarget::PushPopSplitVariation::R11SplitWindowsSEHUnwind) {
+ if (!STI.splitFramePointerPush(MF)) {
DPRGapSize += GPRCS2Size;
}
DPRGapSize %= DPRAlign.value();
unsigned DPRCSOffset;
- if (STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R11SplitWindowsSEHUnwind) {
+ if (STI.splitFramePointerPush(MF)) {
DPRCSOffset = GPRCS1Offset - DPRGapSize - DPRCSSize;
GPRCS2Offset = DPRCSOffset - GPRCS2Size;
} else {
@@ -933,10 +922,8 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF,
AFI->setGPRCalleeSavedArea2Offset(GPRCS2Offset);
AFI->setDPRCalleeSavedAreaOffset(DPRCSOffset);
- // Move past area 2, unless following the CSR_Win_SplitFP calling convention.
- if (GPRCS2Size > 0 &&
- STI.getPushPopSplitVariation(MF) !=
- ARMSubtarget::PushPopSplitVariation::R11SplitWindowsSEHUnwind) {
+ // Move past area 2.
+ if (GPRCS2Size > 0 && !STI.splitFramePointerPush(MF)) {
GPRCS2Push = LastPush = MBBI++;
DefCFAOffsetCandidates.addInst(LastPush, GPRCS2Size);
}
@@ -976,18 +963,13 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF,
} else
NumBytes = DPRCSOffset;
- // Move past area 2 if following the CSR_Win_SplitFP calling convention.
- if (GPRCS2Size > 0 &&
- STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R11SplitWindowsSEHUnwind) {
+ if (GPRCS2Size > 0 && STI.splitFramePointerPush(MF)) {
GPRCS2Push = LastPush = MBBI++;
DefCFAOffsetCandidates.addInst(LastPush, GPRCS2Size);
}
bool NeedsWinCFIStackAlloc = NeedsWinCFI;
- if (STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R11SplitWindowsSEHUnwind &&
- HasFP)
+ if (STI.splitFramePointerPush(MF) && HasFP)
NeedsWinCFIStackAlloc = false;
if (STI.isTargetWindows() && WindowsRequiresStackProbe(MF, NumBytes)) {
@@ -1092,10 +1074,7 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF,
AfterPush = std::next(GPRCS1Push);
unsigned PushSize = sizeOfSPAdjustment(*GPRCS1Push);
int FPOffset = PushSize + FramePtrOffsetInPush;
- if (STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R11SplitAAPCSBranchSigning ||
- STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R11SplitWindowsSEHUnwind) {
+ if (STI.splitFramePointerPush(MF)) {
AfterPush = std::next(GPRCS2Push);
emitRegPlusImmediate(!AFI->isThumbFunction(), MBB, AfterPush, dl, TII,
FramePtr, ARM::SP, 0, MachineInstr::FrameSetup);
@@ -1127,9 +1106,7 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF,
// instructions below don't need to be replayed to unwind the stack.
if (NeedsWinCFI && MBBI != MBB.begin()) {
MachineBasicBlock::iterator End = MBBI;
- if (HasFP &&
- STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R11SplitWindowsSEHUnwind)
+ if (HasFP && STI.splitFramePointerPush(MF))
End = AfterPush;
insertSEHRange(MBB, {}, End, TII, MachineInstr::FrameSetup);
BuildMI(MBB, End, dl, TII.get(ARM::SEH_PrologEnd))
@@ -1141,103 +1118,51 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF,
// the necessary DWARF cf instructions to describe the situation. Start by
// recording where each register ended up:
if (GPRCS1Size > 0 && !NeedsWinCFI) {
- if (STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R11SplitAAPCSBranchSigning) {
- MachineBasicBlock::iterator Pos = std::next(GPRCS1Push);
- int CFIIndex;
- for (const auto &Entry : CSI) {
- Register Reg = Entry.getReg();
- int FI = Entry.getFrameIdx();
- switch (Reg) {
- case ARM::R0:
- case ARM::R1:
- case ARM::R2:
- case ARM::R3:
- case ARM::R4:
- case ARM::R5:
- case ARM::R6:
- case ARM::R7:
- case ARM::R8:
- case ARM::R9:
- case ARM::R10:
- case ARM::R12:
- CFIIndex = MF.addFrameInst(MCCFIInstruction::createOffset(
- nullptr, MRI->getDwarfRegNum(Reg, true),
- MFI.getObjectOffset(FI)));
- BuildMI(MBB, Pos, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
- .addCFIIndex(CFIIndex)
- .setMIFlags(MachineInstr::FrameSetup);
- break;
- }
- }
- } else {
- MachineBasicBlock::iterator Pos = std::next(GPRCS1Push);
- int CFIIndex;
- for (const auto &Entry : CSI) {
- Register Reg = Entry.getReg();
- int FI = Entry.getFrameIdx();
- switch (Reg) {
- case ARM::R8:
- case ARM::R9:
- case ARM::R10:
- case ARM::R11:
- case ARM::R12:
- if (STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R7Split)
- break;
- [[fallthrough]];
- case ARM::R0:
- case ARM::R1:
- case ARM::R2:
- case ARM::R3:
- case ARM::R4:
- case ARM::R5:
- case ARM::R6:
- case ARM::R7:
- case ARM::LR:
- CFIIndex = MF.addFrameInst(MCCFIInstruction::createOffset(
- nullptr, MRI->getDwarfRegNum(Reg, true),
- MFI.getObjectOffset(FI)));
- BuildMI(MBB, Pos, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
- .addCFIIndex(CFIIndex)
- .setMIFlags(MachineInstr::FrameSetup);
+ MachineBasicBlock::iterator Pos = std::next(GPRCS1Push);
+ int CFIIndex;
+ for (const auto &Entry : CSI) {
+ Register Reg = Entry.getReg();
+ int FI = Entry.getFrameIdx();
+ switch (Reg) {
+ case ARM::R8:
+ case ARM::R9:
+ case ARM::R10:
+ case ARM::R11:
+ case ARM::R12:
+ if (STI.splitFramePushPop(MF))
break;
- }
+ [[fallthrough]];
+ case ARM::R0:
+ case ARM::R1:
+ case ARM::R2:
+ case ARM::R3:
+ case ARM::R4:
+ case ARM::R5:
+ case ARM::R6:
+ case ARM::R7:
+ case ARM::LR:
+ CFIIndex = MF.addFrameInst(MCCFIInstruction::createOffset(
+ nullptr, MRI->getDwarfRegNum(Reg, true), MFI.getObjectOffset(FI)));
+ BuildMI(MBB, Pos, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
+ .addCFIIndex(CFIIndex)
+ .setMIFlags(MachineInstr::FrameSetup);
+ break;
}
}
}
if (GPRCS2Size > 0 && !NeedsWinCFI) {
MachineBasicBlock::iterator Pos = std::next(GPRCS2Push);
- if (STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R11SplitAAPCSBranchSigning) {
- for (const auto &Entry : CSI) {
- Register Reg = Entry.getReg();
- int FI = Entry.getFrameIdx();
- switch (Reg) {
- case ARM::R11:
- case ARM::LR:
- unsigned DwarfReg = MRI->getDwarfRegNum(Reg, true);
- unsigned Offset = MFI.getObjectOffset(FI);
- unsigned CFIIndex = MF.addFrameInst(
- MCCFIInstruction::createOffset(nullptr, DwarfReg, Offset));
- BuildMI(MBB, Pos, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
- .addCFIIndex(CFIIndex)
- .setMIFlags(MachineInstr::FrameSetup);
- break;
- }
- }
- } else {
- MachineBasicBlock::iterator Pos = std::next(GPRCS2Push);
- for (const auto &Entry : CSI) {
- Register Reg = Entry.getReg();
- int FI = Entry.getFrameIdx();
- switch (Reg) {
- case ARM::R8:
- case ARM::R9:
- case ARM::R10:
- case ARM::R11:
- case ARM::R12:
+ for (const auto &Entry : CSI) {
+ Register Reg = Entry.getReg();
+ int FI = Entry.getFrameIdx();
+ switch (Reg) {
+ case ARM::R8:
+ case ARM::R9:
+ case ARM::R10:
+ case ARM::R11:
+ case ARM::R12:
+ if (STI.splitFramePushPop(MF)) {
unsigned DwarfReg = MRI->getDwarfRegNum(
Reg == ARM::R12 ? ARM::RA_AUTH_CODE : Reg, true);
unsigned Offset = MFI.getObjectOffset(FI);
@@ -1246,8 +1171,8 @@ void ARMFrameLowering::emitPrologue(MachineFunction &MF,
BuildMI(MBB, Pos, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
.addCFIIndex(CFIIndex)
.setMIFlags(MachineInstr::FrameSetup);
- break;
}
+ break;
}
}
}
@@ -1457,9 +1382,7 @@ void ARMFrameLowering::emitEpilogue(MachineFunction &MF,
MachineInstr::FrameDestroy);
// Increment past our save areas.
- if (AFI->getGPRCalleeSavedArea2Size() &&
- STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R11SplitWindowsSEHUnwind)
+ if (AFI->getGPRCalleeSavedArea2Size() && STI.splitFramePointerPush(MF))
MBBI++;
if (MBBI != MBB.end() && AFI->getDPRCalleeSavedAreaSize()) {
@@ -1476,9 +1399,7 @@ void ARMFrameLowering::emitEpilogue(MachineFunction &MF,
MachineInstr::FrameDestroy);
}
- if (AFI->getGPRCalleeSavedArea2Size() &&
- STI.getPushPopSplitVariation(MF) !=
- ARMSubtarget::PushPopSplitVariation::R11SplitWindowsSEHUnwind)
+ if (AFI->getGPRCalleeSavedArea2Size() && !STI.splitFramePointerPush(MF))
MBBI++;
if (AFI->getGPRCalleeSavedArea1Size()) MBBI++;
@@ -1618,9 +1539,7 @@ void ARMFrameLowering::emitPushInst(MachineBasicBlock &MBB,
unsigned LastReg = 0;
for (; i != 0; --i) {
Register Reg = CSI[i-1].getReg();
- if (!(Func)(Reg, STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R7Split))
- continue;
+ if (!(Func)(Reg, STI.splitFramePushPop(MF))) continue;
// D-registers in the aligned area DPRCS2 are NOT spilled here.
if (Reg >= ARM::D8 && Reg < ARM::D8 + NumAlignedDPRCS2Regs)
@@ -1713,9 +1632,7 @@ void ARMFrameLowering::emitPopInst(MachineBasicBlock &MBB,
for (; i != 0; --i) {
CalleeSavedInfo &Info = CSI[i-1];
Register Reg = Info.getReg();
- if (!(Func)(Reg, STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R7Split))
- continue;
+ if (!(Func)(Reg, STI.splitFramePushPop(MF))) continue;
// The aligned reloads from area DPRCS2 are not inserted here.
if (Reg >= ARM::D8 && Reg < ARM::D8 + NumAlignedDPRCS2Regs)
@@ -1723,11 +1640,7 @@ void ARMFrameLowering::emitPopInst(MachineBasicBlock &MBB,
if (Reg == ARM::LR && !isTailCall && !isVarArg && !isInterrupt &&
!isCmseEntry && !isTrap && AFI->getArgumentStackToRestore() == 0 &&
STI.hasV5TOps() && MBB.succ_empty() && !hasPAC &&
- (STI.getPushPopSplitVariation(MF) !=
- ARMSubtarget::PushPopSplitVariation::
- R11SplitAAPCSBranchSigning &&
- STI.getPushPopSplitVariation(MF) !=
- ARMSubtarget::PushPopSplitVariation::R11SplitWindowsSEHUnwind)) {
+ !STI.splitFramePointerPush(MF)) {
Reg = ARM::PC;
// Fold the return instruction into the LDM.
DeleteRet = true;
@@ -2088,10 +2001,7 @@ bool ARMFrameLowering::spillCalleeSavedRegisters(
.addImm(-4)
.add(predOps(ARMCC::AL));
}
- if (STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R11SplitAAPCSBranchSigning ||
- STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R11SplitWindowsSEHUnwind) {
+ if (STI.splitFramePointerPush(MF)) {
emitPushInst(MBB, MI, CSI, PushOpc, PushOneOpc, false,
&isSplitFPArea1Register, 0, MachineInstr::FrameSetup);
emitPushInst(MBB, MI, CSI, FltOpc, 0, true, &isARMArea3Register,
@@ -2136,10 +2046,7 @@ bool ARMFrameLowering::restoreCalleeSavedRegisters(
unsigned LdrOpc =
AFI->isThumbFunction() ? ARM::t2LDR_POST : ARM::LDR_POST_IMM;
unsigned FltOpc = ARM::VLDMDIA_UPD;
- if (STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R11SplitAAPCSBranchSigning ||
- STI.getPushPopSplitVariation(MF) ==
- ARMSubtarget::PushPopSplitVariation::R11SplitWindowsSEHUnwind) {
+ if (STI.splitFramePointerPush(MF)) {
emitPopInst(MBB, MI, CSI, PopOpc, LdrOpc, isVarArg, false,
&isSplitFPArea2Register, 0);
emitPopInst(MBB, MI, CSI, FltOpc, 0, isVarArg, true, &isARMArea3Register,
@@ -2455,8 +2362,7 @@ void ARMFrameLowering::determineCalleeSaves(MachineFunction &MF,
if (Spilled) {
NumGPRSpills++;
- if (STI.getPushPopSplitVariation(MF) !=
- ARMSubtarget::PushPopSplitVariation::R7Split) {
+ if (!STI.splitFramePushPop(MF)) {
if (Reg == ARM::LR)
LRSpilled = true;
CS1Spilled = true;
@@ -2478,8 +2384,7 @@ void ARMFrameLowering::determineCalleeSaves(MachineFunction &MF,
break;
}
} else {
- if (STI.getPushPopSplitVariation(MF) !=
- ARMSubtarget::PushPopSplitVariation::R7Split) {
+ if (!STI.splitFramePushPop(MF)) {
UnspilledCS1GPRs.push_back(Reg);
continue;
}
diff --git a/llvm/lib/Target/ARM/ARMSubtarget.cpp b/llvm/lib/Target/ARM/ARMSubtarget.cpp
index b9e63ab3afc537..691715dc29637c 100644
--- a/llvm/lib/Target/ARM/ARMSubtarget.cpp
+++ b/llvm/lib/Target/ARM/ARMSubtarget.cpp
@@ -493,38 +493,11 @@ bool ARMSubtarget::ignoreCSRForAllocationOrder(const MachineFunction &MF,
ARM::GPRRegClass.contains(PhysReg);
}
-ARMSubtarget::PushPopSplitVariation
-ARMSubtarget::getPushPopSplitVariation(const MachineFunction &MF) const {
+bool ARMSubtarget::splitFramePointerPush(const MachineFunction &MF) const {
const Function &F = MF.getFunction();
+ if (!MF.getTarget().getMCAsmInfo()->usesWindowsCFI() ||
+ !F.needsUnwindTableEntry())
+ return false;
const MachineFrameInfo &MFI = MF.getFrameInfo();
- const std::vector<CalleeSavedInfo> CSI =
- MF.getFrameInfo().getCalleeSavedInfo();
- // Returns R7Split if the frame setup must be split into two separate pushes
- // of r0-r7,lr and another containing r8-r11 (+r12 if necessary). This is
- // always required on Thumb1-only targets, as the push and pop instructions
- // can't access the high registers. This is also required when R7 is the frame
- // pointer and frame pointer elimiination is disabled, or branch signing is
- // enabled and AAPCS is disabled.
- if ((MF.getInfo<ARMFunctionInfo>()->shouldSignReturnAddress() &&
- !createAAPCSFrameChain()) ||
- (getFramePointerReg() == ARM::R7 &&
- MF.getTarget().Options.DisableFramePointerElim(MF)) ||
- isThumb1Only())
- return R7Split;
- // Returns R11SplitWindowsSEHUnwind when the stack pointer needs to be
- // restored from the frame pointer r11 + an offset and Windows CFI is enabled.
- // This stack unwinding cannot be expressed with SEH unwind opcodes when done
- // with a single push, making it necessary to split the push into r4-r10, and
- // another containing r11+lr.
- if (MF.getTarget().getMCAsmInfo()->usesWindowsCFI() &&
- F.needsUnwindTableEntry() &&
- (MFI.hasVarSizedObjects() || getRegisterInfo()->hasStackRealignment(MF)))
- return R11SplitWindowsSEHUnwind;
- // Returns R11SplitAAPCSBranchSigning if R11 and lr are not adjacent to each
- // other in the list of callee saved registers in a frame, and branch
- // signing is enabled.
- if (MF.getInfo<ARMFunctionInfo>()->shouldSignReturnAddress() &&
- getFramePointerReg() == ARM::R11)
- return R11SplitAAPCSBranchSigning;
- return NoSplit;
+ return MFI.hasVarSizedObjects() || getRegisterInfo()->hasStackRealignment(MF);
}
diff --git a/llvm/lib/Target/ARM/ARMSubtarget.h b/llvm/lib/Target/ARM/ARMSubtarget.h
index 435a2d2c5f1eb6..044b1c4c54e0c8 100644
--- a/llvm/lib/Target/ARM/ARMSubtarget.h
+++ b/llvm/lib/Target/ARM/ARMSubtarget.h
@@ -150,26 +150,6 @@ class ARMSubtarget : public ARMGenSubtargetInfo {
SingleIssuePlusExtras,
};
- /// How the pushing and popping of callee saved registers to and from the
- /// stack should be split.
- enum PushPopSplitVariation {
- /// r4-r11+lr (+r12 if necessary) can be pushed in a single instruction.
- NoSplit,
- /// The registers need to be split into a push of r4-r7+lr and another
- /// containing r8-r11 (+r12 if necessary). Due to Thumb1FrameLowering
- /// having separate handling of AAPCS being enabled, and therefore r11+lr
- /// needing to be in a separate push, this value is also used as the push
- /// variation in that case.
- R7Split,
- /// The registers need to be split into a push containing r4-r10+r12 and
- /// another containing r11 + lr.
- R11SplitAAPCSBranchSigning,
- /// The registers need to be split into a push containing r4-r10 and another
- /// containing r11 + lr. In this case, the floating point registers are
- /// pushed between these two pushes.
- R11SplitWindowsSEHUnwind
- };
-
protected:
// Bool members cor...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/84019
More information about the llvm-commits
mailing list