[llvm-branch-commits] [llvm] Users/ppenzin/ra saverestore split calleesaves (PR #170609)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Dec 3 22:21:40 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-m68k
Author: Petr Penzin (ppenzin)
<details>
<summary>Changes</summary>
Replace `determineCalleeSaves` with `determinePrologCalleeSaves`, provide additional functions for other potential points of save.
This has been split out from https://github.com/mgudim/llvm-project/tree/save_csr_in_ra3, and is PR 3 out of 5.
Co-authored-by: Mikhail Gudim <mgudim@<!-- -->ventanamicro.com>
---
Patch is 66.28 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/170609.diff
57 Files Affected:
- (modified) llvm/include/llvm/CodeGen/TargetFrameLowering.h (+32-3)
- (modified) llvm/include/llvm/CodeGen/TargetRegisterInfo.h (+1-1)
- (modified) llvm/include/llvm/CodeGen/TargetSubtargetInfo.h (+4)
- (modified) llvm/lib/CodeGen/PrologEpilogInserter.cpp (+1-1)
- (modified) llvm/lib/CodeGen/RegisterScavenging.cpp (+1-1)
- (modified) llvm/lib/CodeGen/ShrinkWrap.cpp (+1-1)
- (modified) llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp (+78-28)
- (modified) llvm/lib/Target/AArch64/AArch64FrameLowering.cpp (+4-4)
- (modified) llvm/lib/Target/AArch64/AArch64FrameLowering.h (+2-2)
- (modified) llvm/lib/Target/AArch64/AArch64MachineFunctionInfo.h (+2-2)
- (modified) llvm/lib/Target/AMDGPU/SIFrameLowering.cpp (+8-8)
- (modified) llvm/lib/Target/AMDGPU/SIFrameLowering.h (+4-4)
- (modified) llvm/lib/Target/AMDGPU/SILowerSGPRSpills.cpp (+1-1)
- (modified) llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.cpp (+2-2)
- (modified) llvm/lib/Target/ARC/ARCFrameLowering.cpp (+4-4)
- (modified) llvm/lib/Target/ARC/ARCFrameLowering.h (+2-2)
- (modified) llvm/lib/Target/ARM/ARMFrameLowering.cpp (+8-7)
- (modified) llvm/lib/Target/ARM/ARMFrameLowering.h (+2-2)
- (modified) llvm/lib/Target/ARM/ARMMachineFunctionInfo.h (+1-1)
- (modified) llvm/lib/Target/AVR/AVRFrameLowering.cpp (+4-4)
- (modified) llvm/lib/Target/AVR/AVRFrameLowering.h (+2-2)
- (modified) llvm/lib/Target/BPF/BPFFrameLowering.cpp (+4-4)
- (modified) llvm/lib/Target/BPF/BPFFrameLowering.h (+2-2)
- (modified) llvm/lib/Target/CSKY/CSKYFrameLowering.cpp (+4-4)
- (modified) llvm/lib/Target/CSKY/CSKYFrameLowering.h (+2-2)
- (modified) llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp (+4-4)
- (modified) llvm/lib/Target/Hexagon/HexagonFrameLowering.h (+2-2)
- (modified) llvm/lib/Target/Lanai/LanaiFrameLowering.cpp (+4-4)
- (modified) llvm/lib/Target/Lanai/LanaiFrameLowering.h (+2-2)
- (modified) llvm/lib/Target/LoongArch/LoongArchFrameLowering.cpp (+3-4)
- (modified) llvm/lib/Target/LoongArch/LoongArchFrameLowering.h (+2-2)
- (modified) llvm/lib/Target/M68k/M68kFrameLowering.cpp (+4-4)
- (modified) llvm/lib/Target/M68k/M68kFrameLowering.h (+2-2)
- (modified) llvm/lib/Target/Mips/Mips16FrameLowering.cpp (+4-4)
- (modified) llvm/lib/Target/Mips/Mips16FrameLowering.h (+2-2)
- (modified) llvm/lib/Target/Mips/MipsSEFrameLowering.cpp (+4-4)
- (modified) llvm/lib/Target/Mips/MipsSEFrameLowering.h (+2-2)
- (modified) llvm/lib/Target/PowerPC/PPCFrameLowering.cpp (+4-4)
- (modified) llvm/lib/Target/PowerPC/PPCFrameLowering.h (+2-2)
- (modified) llvm/lib/Target/RISCV/RISCVFrameLowering.cpp (+33-3)
- (modified) llvm/lib/Target/RISCV/RISCVFrameLowering.h (+3-1)
- (modified) llvm/lib/Target/RISCV/RISCVSubtarget.cpp (+8)
- (modified) llvm/lib/Target/RISCV/RISCVSubtarget.h (+2)
- (modified) llvm/lib/Target/Sparc/SparcFrameLowering.cpp (+4-5)
- (modified) llvm/lib/Target/Sparc/SparcFrameLowering.h (+2-2)
- (modified) llvm/lib/Target/SystemZ/SystemZFrameLowering.cpp (+6-8)
- (modified) llvm/lib/Target/SystemZ/SystemZFrameLowering.h (+4-4)
- (modified) llvm/lib/Target/VE/VEFrameLowering.cpp (+4-4)
- (modified) llvm/lib/Target/VE/VEFrameLowering.h (+2-2)
- (modified) llvm/lib/Target/X86/X86FrameLowering.cpp (+4-4)
- (modified) llvm/lib/Target/X86/X86FrameLowering.h (+2-2)
- (modified) llvm/lib/Target/XCore/XCoreFrameLowering.cpp (+4-4)
- (modified) llvm/lib/Target/XCore/XCoreFrameLowering.h (+2-2)
- (modified) llvm/lib/Target/Xtensa/XtensaFrameLowering.cpp (+4-4)
- (modified) llvm/lib/Target/Xtensa/XtensaFrameLowering.h (+2-2)
- (modified) llvm/test/CodeGen/AArch64/arm64-spill-lr.ll (+1-1)
- (added) llvm/test/CodeGen/RISCV/determine-callee-saves.mir (+79)
``````````diff
diff --git a/llvm/include/llvm/CodeGen/TargetFrameLowering.h b/llvm/include/llvm/CodeGen/TargetFrameLowering.h
index 75696faf114cc..c04cd33b3377a 100644
--- a/llvm/include/llvm/CodeGen/TargetFrameLowering.h
+++ b/llvm/include/llvm/CodeGen/TargetFrameLowering.h
@@ -375,13 +375,13 @@ class LLVM_ABI TargetFrameLowering {
virtual StackOffset getFrameIndexReferenceFromSP(const MachineFunction &MF,
int FI) const;
- /// Returns the callee-saved registers as computed by determineCalleeSaves
- /// in the BitVector \p SavedRegs.
+ /// Returns the callee-saved registers as computed by
+ /// determinePrologCalleeSaves in the BitVector \p SavedRegs.
virtual void getCalleeSaves(const MachineFunction &MF,
BitVector &SavedRegs) const;
/// This method determines which of the registers reported by
- /// TargetRegisterInfo::getCalleeSavedRegs() should actually get saved.
+ /// getMustPreserveRegisters() should actually get saved.
/// The default implementation checks populates the \p SavedRegs bitset with
/// all registers which are modified in the function, targets may override
/// this function to save additional registers.
@@ -390,9 +390,38 @@ class LLVM_ABI TargetFrameLowering {
/// This method should not be called by any passes outside of PEI, because
/// it may change state passed in by \p MF and \p RS. The preferred
/// interface outside PEI is getCalleeSaves.
+ LLVM_DEPRECATED("Use determinePrologCalleeSaves instead",
+ "determinePrologCalleeSaves")
virtual void determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs,
RegScavenger *RS = nullptr) const;
+ /// Return the list of registers which must be preserved by the function: the
+ /// value on exit must be the same as the value on entry. A register from this
+ /// list does not need to be saved / reloaded if the function did not use it.
+ const MCPhysReg *getMustPreserveRegisters(MachineFunction &MF) const;
+
+ /// This method determines which of the registers reported by
+ /// getMustPreserveRegisters() must be saved in prolog and reloaded in epilog
+ /// regardless of wheather or not they were modified by the function.
+ virtual void
+ determineUncondPrologCalleeSaves(MachineFunction &MF, const MCPhysReg *CSRegs,
+ BitVector &UncondPrologCSRs) const;
+
+ /// If the target has to do all saves / restores of "must preserve" registers
+ /// in prolog / epilog, this method returns empty set. Otherwise, this method
+ /// returns the difference between getMustPreserveRegisters and
+ /// determineUncondPrologCalleeSaves. These registers will be preserved by the
+ /// code optimizer and do not need to be saved in prolog.
+ virtual void determineEarlyCalleeSaves(MachineFunction &MF,
+ BitVector &EarlyCSRs) const;
+
+ /// This method returns those registers in the difference of
+ /// getMustPreserveRegisters and determineEarlyCalleeSaves that were modified
+ /// by the function and need to be saved in prolog.
+ virtual void determinePrologCalleeSaves(MachineFunction &MF,
+ BitVector &PrologCSRs,
+ RegScavenger *RS) const;
+
/// processFunctionBeforeFrameFinalized - This method is called immediately
/// before the specified function's frame layout (MF.getFrameInfo()) is
/// finalized. Once the frame is finalized, MO_FrameIndex operands are
diff --git a/llvm/include/llvm/CodeGen/TargetRegisterInfo.h b/llvm/include/llvm/CodeGen/TargetRegisterInfo.h
index 35b14e8b8fd30..f8453f8394ab7 100644
--- a/llvm/include/llvm/CodeGen/TargetRegisterInfo.h
+++ b/llvm/include/llvm/CodeGen/TargetRegisterInfo.h
@@ -1066,7 +1066,7 @@ class LLVM_ABI TargetRegisterInfo : public MCRegisterInfo {
/// register is required, the first fixed stack object is reserved as its
/// spill slot. This tells PEI not to create a new stack frame
/// object for the given register. It should be called only after
- /// determineCalleeSaves().
+ /// determinePrologCalleeSaves().
virtual bool hasReservedSpillSlot(const MachineFunction &MF, Register Reg,
int &FrameIdx) const {
return false;
diff --git a/llvm/include/llvm/CodeGen/TargetSubtargetInfo.h b/llvm/include/llvm/CodeGen/TargetSubtargetInfo.h
index 6f95f0fea6441..57978c8585a6a 100644
--- a/llvm/include/llvm/CodeGen/TargetSubtargetInfo.h
+++ b/llvm/include/llvm/CodeGen/TargetSubtargetInfo.h
@@ -364,6 +364,10 @@ class LLVM_ABI TargetSubtargetInfo : public MCSubtargetInfo {
}
virtual bool isRegisterReservedByUser(Register R) const { return false; }
+
+ // Return true if the target can ensure before PrologEpilogInsertion that
+ // callee-saved registers are preserved.
+ virtual bool savesCSRsEarly() const { return false; }
};
} // end namespace llvm
diff --git a/llvm/lib/CodeGen/PrologEpilogInserter.cpp b/llvm/lib/CodeGen/PrologEpilogInserter.cpp
index 41efe622417c8..2639edcfed0a2 100644
--- a/llvm/lib/CodeGen/PrologEpilogInserter.cpp
+++ b/llvm/lib/CodeGen/PrologEpilogInserter.cpp
@@ -681,7 +681,7 @@ void PEIImpl::spillCalleeSavedRegs(MachineFunction &MF) {
// Determine which of the registers in the callee save list should be saved.
BitVector SavedRegs;
- TFI->determineCalleeSaves(MF, SavedRegs, RS);
+ TFI->determinePrologCalleeSaves(MF, SavedRegs, RS);
// Assign stack slots for any callee-saved registers that must be spilled.
assignCalleeSavedSpillSlots(MF, SavedRegs, MinCSFrameIndex, MaxCSFrameIndex);
diff --git a/llvm/lib/CodeGen/RegisterScavenging.cpp b/llvm/lib/CodeGen/RegisterScavenging.cpp
index d8861672a348f..cc5da28a95d85 100644
--- a/llvm/lib/CodeGen/RegisterScavenging.cpp
+++ b/llvm/lib/CodeGen/RegisterScavenging.cpp
@@ -511,7 +511,7 @@ class ScavengerTest : public MachineFunctionPass {
// well enough to initialize the scavenger with some emergency spillslots
// for the target.
BitVector SavedRegs;
- TFL.determineCalleeSaves(MF, SavedRegs, &RS);
+ TFL.determinePrologCalleeSaves(MF, SavedRegs, &RS);
TFL.processFunctionBeforeFrameFinalized(MF, &RS);
// Let's scavenge the current function
diff --git a/llvm/lib/CodeGen/ShrinkWrap.cpp b/llvm/lib/CodeGen/ShrinkWrap.cpp
index 83581052560cb..6933b7614e01d 100644
--- a/llvm/lib/CodeGen/ShrinkWrap.cpp
+++ b/llvm/lib/CodeGen/ShrinkWrap.cpp
@@ -180,7 +180,7 @@ class ShrinkWrapImpl {
const TargetFrameLowering *TFI =
MachineFunc->getSubtarget().getFrameLowering();
- TFI->determineCalleeSaves(*MachineFunc, SavedRegs, RS);
+ TFI->determinePrologCalleeSaves(*MachineFunc, SavedRegs, RS);
for (int Reg = SavedRegs.find_first(); Reg != -1;
Reg = SavedRegs.find_next(Reg))
diff --git a/llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp b/llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp
index ebf6d1a52448e..95144109ed14a 100644
--- a/llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp
+++ b/llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp
@@ -93,36 +93,20 @@ void TargetFrameLowering::getCalleeSaves(const MachineFunction &MF,
CalleeSaves.set(Info.getReg());
}
+LLVM_DEPRECATED("Use determinePrologCalleeSaves instead",
+ "determinePrologCalleeSaves")
void TargetFrameLowering::determineCalleeSaves(MachineFunction &MF,
BitVector &SavedRegs,
RegScavenger *RS) const {
- const TargetRegisterInfo &TRI = *MF.getSubtarget().getRegisterInfo();
-
- // Resize before the early returns. Some backends expect that
- // SavedRegs.size() == TRI.getNumRegs() after this call even if there are no
- // saved registers.
- SavedRegs.resize(TRI.getNumRegs());
-
- // Get the callee saved register list...
- const MCPhysReg *CSRegs = nullptr;
-
- // When interprocedural register allocation is enabled, callee saved register
- // list should be empty, since caller saved registers are preferred over
- // callee saved registers. Unless it has some risked CSR to be optimized out.
- if (MF.getTarget().Options.EnableIPRA &&
- isSafeForNoCSROpt(MF.getFunction()) &&
- isProfitableForNoCSROpt(MF.getFunction()))
- CSRegs = TRI.getIPRACSRegs(&MF);
- else
- CSRegs = MF.getRegInfo().getCalleeSavedRegs();
-
- // Early exit if there are no callee saved registers.
- if (!CSRegs || CSRegs[0] == 0)
- return;
+ determinePrologCalleeSaves(MF, SavedRegs, RS);
+}
+const MCPhysReg *
+TargetFrameLowering::getMustPreserveRegisters(MachineFunction &MF) const {
+ const TargetRegisterInfo &TRI = *MF.getSubtarget().getRegisterInfo();
// In Naked functions we aren't going to save any registers.
if (MF.getFunction().hasFnAttribute(Attribute::Naked))
- return;
+ return nullptr;
// Noreturn+nounwind functions never restore CSR, so no saves are needed.
// Purely noreturn functions may still return through throws, so those must
@@ -135,15 +119,81 @@ void TargetFrameLowering::determineCalleeSaves(MachineFunction &MF,
MF.getFunction().hasFnAttribute(Attribute::NoUnwind) &&
!MF.getFunction().hasFnAttribute(Attribute::UWTable) &&
enableCalleeSaveSkip(MF))
- return;
+ return nullptr;
+
+ // When interprocedural register allocation is enabled, callee saved register
+ // list should be empty, since caller saved registers are preferred over
+ // callee saved registers. Unless it has some risked CSR to be optimized out.
+ if (MF.getTarget().Options.EnableIPRA &&
+ isSafeForNoCSROpt(MF.getFunction()) &&
+ isProfitableForNoCSROpt(MF.getFunction()))
+ return TRI.getIPRACSRegs(&MF);
+ return MF.getRegInfo().getCalleeSavedRegs();
+}
+void TargetFrameLowering::determineUncondPrologCalleeSaves(
+ MachineFunction &MF, const MCPhysReg *CSRegs,
+ BitVector &UncondPrologCSRs) const {
// Functions which call __builtin_unwind_init get all their registers saved.
- bool CallsUnwindInit = MF.callsUnwindInit();
+ if (MF.callsUnwindInit()) {
+ for (unsigned i = 0; CSRegs[i]; ++i) {
+ unsigned Reg = CSRegs[i];
+ UncondPrologCSRs.set(Reg);
+ }
+ }
+ return;
+}
+
+void TargetFrameLowering::determineEarlyCalleeSaves(
+ MachineFunction &MF, BitVector &EarlyCSRs) const {
+ const auto &ST = MF.getSubtarget();
+ if (!ST.savesCSRsEarly())
+ return;
+
+ const TargetRegisterInfo &TRI = *MF.getSubtarget().getRegisterInfo();
+ // Get the callee saved register list...
+ const MCPhysReg *CSRegs = getMustPreserveRegisters(MF);
+ // Early exit if there are no callee saved registers.
+ if (!CSRegs || CSRegs[0] == 0)
+ return;
+
+ BitVector UncondPrologCSRs(TRI.getNumRegs(), false);
+ determineUncondPrologCalleeSaves(MF, CSRegs, UncondPrologCSRs);
+
+ EarlyCSRs.resize(TRI.getNumRegs());
+ for (unsigned i = 0; CSRegs[i]; ++i) {
+ unsigned Reg = CSRegs[i];
+ if (!UncondPrologCSRs[Reg])
+ EarlyCSRs.set(Reg);
+ }
+}
+
+void TargetFrameLowering::determinePrologCalleeSaves(MachineFunction &MF,
+ BitVector &PrologCSRs,
+ RegScavenger *RS) const {
+ const TargetRegisterInfo &TRI = *MF.getSubtarget().getRegisterInfo();
+
+ // Resize before the early returns. Some backends expect that
+ // SavedRegs.size() == TRI.getNumRegs() after this call even if there are no
+ // saved registers.
+ PrologCSRs.resize(TRI.getNumRegs());
+
+ // Get the callee saved register list...
+ const MCPhysReg *CSRegs = getMustPreserveRegisters(MF);
+ // Early exit if there are no callee saved registers.
+ if (!CSRegs || CSRegs[0] == 0)
+ return;
+
+ determineUncondPrologCalleeSaves(MF, CSRegs, PrologCSRs);
+
+ BitVector EarlyCSRs(TRI.getNumRegs(), false);
+ determineEarlyCalleeSaves(MF, EarlyCSRs);
+
const MachineRegisterInfo &MRI = MF.getRegInfo();
for (unsigned i = 0; CSRegs[i]; ++i) {
unsigned Reg = CSRegs[i];
- if (CallsUnwindInit || MRI.isPhysRegModified(Reg))
- SavedRegs.set(Reg);
+ if (MRI.isPhysRegModified(Reg) && !EarlyCSRs[Reg])
+ PrologCSRs.set(Reg);
}
}
diff --git a/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp b/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
index 7290b3f67c2e3..bd5f2d3547e3b 100644
--- a/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
@@ -2482,9 +2482,9 @@ void AArch64FrameLowering::determineStackHazardSlot(
}
}
-void AArch64FrameLowering::determineCalleeSaves(MachineFunction &MF,
- BitVector &SavedRegs,
- RegScavenger *RS) const {
+void AArch64FrameLowering::determinePrologCalleeSaves(MachineFunction &MF,
+ BitVector &SavedRegs,
+ RegScavenger *RS) const {
// All calls are tail calls in GHC calling conv, and functions have no
// prologue/epilogue.
if (MF.getFunction().getCallingConv() == CallingConv::GHC)
@@ -2654,7 +2654,7 @@ void AArch64FrameLowering::determineCalleeSaves(MachineFunction &MF,
}
LLVM_DEBUG({
- dbgs() << "*** determineCalleeSaves\nSaved CSRs:";
+ dbgs() << "*** determinePrologCalleeSaves\nSaved CSRs:";
for (unsigned Reg : SavedRegs.set_bits())
dbgs() << ' ' << printReg(MCRegister(Reg), RegInfo);
dbgs() << "\n";
diff --git a/llvm/lib/Target/AArch64/AArch64FrameLowering.h b/llvm/lib/Target/AArch64/AArch64FrameLowering.h
index 32a9bd831989c..6ded0e13ba22d 100644
--- a/llvm/lib/Target/AArch64/AArch64FrameLowering.h
+++ b/llvm/lib/Target/AArch64/AArch64FrameLowering.h
@@ -94,8 +94,8 @@ class AArch64FrameLowering : public TargetFrameLowering {
unsigned &MinCSFrameIndex,
unsigned &MaxCSFrameIndex) const override;
- void determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs,
- RegScavenger *RS) const override;
+ void determinePrologCalleeSaves(MachineFunction &MF, BitVector &SavedRegs,
+ RegScavenger *RS) const override;
/// Returns true if the target will correctly handle shrink wrapping.
bool enableShrinkWrapping(const MachineFunction &MF) const override {
diff --git a/llvm/lib/Target/AArch64/AArch64MachineFunctionInfo.h b/llvm/lib/Target/AArch64/AArch64MachineFunctionInfo.h
index 00e0c2511aaf0..f1101605303b6 100644
--- a/llvm/lib/Target/AArch64/AArch64MachineFunctionInfo.h
+++ b/llvm/lib/Target/AArch64/AArch64MachineFunctionInfo.h
@@ -77,7 +77,7 @@ class AArch64FunctionInfo final : public MachineFunctionInfo {
unsigned TailCallReservedStack = 0;
/// HasStackFrame - True if this function has a stack frame. Set by
- /// determineCalleeSaves().
+ /// determinePrologCalleeSaves().
bool HasStackFrame = false;
/// Amount of stack frame size, not including callee-saved registers.
@@ -379,7 +379,7 @@ class AArch64FunctionInfo final : public MachineFunctionInfo {
#ifndef NDEBUG
// Make sure the calculated size derived from the CalleeSavedInfo
// equals the cached size that was calculated elsewhere (e.g. in
- // determineCalleeSaves).
+ // determinePrologCalleeSaves).
ValidateCalleeSavedStackSize = HasCalleeSavedStackSize;
#endif
diff --git a/llvm/lib/Target/AMDGPU/SIFrameLowering.cpp b/llvm/lib/Target/AMDGPU/SIFrameLowering.cpp
index ffbb111d42221..cfde9651aa45f 100644
--- a/llvm/lib/Target/AMDGPU/SIFrameLowering.cpp
+++ b/llvm/lib/Target/AMDGPU/SIFrameLowering.cpp
@@ -1691,9 +1691,9 @@ void SIFrameLowering::determinePrologEpilogSGPRSaves(
}
// Only report VGPRs to generic code.
-void SIFrameLowering::determineCalleeSaves(MachineFunction &MF,
- BitVector &SavedVGPRs,
- RegScavenger *RS) const {
+void SIFrameLowering::determinePrologCalleeSaves(MachineFunction &MF,
+ BitVector &SavedVGPRs,
+ RegScavenger *RS) const {
SIMachineFunctionInfo *MFI = MF.getInfo<SIMachineFunctionInfo>();
// If this is a function with the amdgpu_cs_chain[_preserve] calling
@@ -1702,7 +1702,7 @@ void SIFrameLowering::determineCalleeSaves(MachineFunction &MF,
if (MFI->isChainFunction() && !MF.getFrameInfo().hasTailCall())
return;
- TargetFrameLowering::determineCalleeSaves(MF, SavedVGPRs, RS);
+ TargetFrameLowering::determinePrologCalleeSaves(MF, SavedVGPRs, RS);
const GCNSubtarget &ST = MF.getSubtarget<GCNSubtarget>();
const SIRegisterInfo *TRI = ST.getRegisterInfo();
@@ -1797,10 +1797,10 @@ void SIFrameLowering::determineCalleeSaves(MachineFunction &MF,
SavedVGPRs.reset(Reg.first);
}
-void SIFrameLowering::determineCalleeSavesSGPR(MachineFunction &MF,
- BitVector &SavedRegs,
- RegScavenger *RS) const {
- TargetFrameLowering::determineCalleeSaves(MF, SavedRegs, RS);
+void SIFrameLowering::determinePrologCalleeSavesSGPR(MachineFunction &MF,
+ BitVector &SavedRegs,
+ RegScavenger *RS) const {
+ TargetFrameLowering::determinePrologCalleeSaves(MF, SavedRegs, RS);
const SIMachineFunctionInfo *MFI = MF.getInfo<SIMachineFunctionInfo>();
if (MFI->isEntryFunction())
return;
diff --git a/llvm/lib/Target/AMDGPU/SIFrameLowering.h b/llvm/lib/Target/AMDGPU/SIFrameLowering.h
index a72772987262e..1d5ea69f00b42 100644
--- a/llvm/lib/Target/AMDGPU/SIFrameLowering.h
+++ b/llvm/lib/Target/AMDGPU/SIFrameLowering.h
@@ -30,10 +30,10 @@ class SIFrameLowering final : public AMDGPUFrameLowering {
StackOffset getFrameIndexReference(const MachineFunction &MF, int FI,
Register &FrameReg) const override;
- void determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs,
- RegScavenger *RS = nullptr) const override;
- void determineCalleeSavesSGPR(MachineFunction &MF, BitVector &SavedRegs,
- RegScavenger *RS = nullptr) const;
+ void determinePrologCalleeSaves(MachineFunction &MF, BitVector &SavedRegs,
+ RegScavenger *RS = nullptr) const override;
+ void determinePrologCalleeSavesSGPR(MachineFunction &MF, BitVector &SavedRegs,
+ RegScavenger *RS = nullptr) const;
void determinePrologEpilogSGPRSaves(MachineFunction &MF, BitVector &SavedRegs,
bool NeedExecCopyReservedReg) const;
void emitCSRSpillStores(MachineFunction &MF, MachineBasicBlock &MBB,
diff --git a/llvm/lib/Target/AMDGPU/SILowerSGPRSpills.cpp b/llvm/lib/Target/AMDGPU/SILowerSGPRSpills.cpp
index cbd08f0fb5dff..ad14822f89f06 100644
--- a/llvm/lib/Target/AMDGPU/SILowerSGPRSpills.cpp
+++ b/llvm/lib/Target/AMDGPU/SILowerSGPRSpills.cpp
@@ -257,7 +257,7 @@ bool SILowerSGPRSpills::spillCalleeSavedRegs(
// Determine which of the registers in the callee save list should be saved.
BitVector SavedRegs;
- TFI->determineCalleeSavesSGPR(MF, SavedRegs, RS);
+ TFI->determinePrologCalleeSavesSGPR(MF, SavedRegs, RS);
// Add the code to save and restore the callee saved registers.
if (!F.hasFnAttribute(Attribute::Naked)) {
diff --git a/llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.cpp b/llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.cpp
index 9abda275d7e42..cac608d3e87be 100644
--- a/llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.cpp
@@ -388,8 +388,8 @@ void SIMachineFunctionInfo::shiftWwmVGPRsToLowestRange(
SpillPhysVGPRs[Idx] = NewReg;
}
- // The generic `determineCalleeSaves` might have set the old register if it
- // is in the CSR range.
+ // The generic `determinePrologCalleeSaves` might have set the old register
+ // if it is in the CSR range.
SavedVGPRs.reset(Reg);
for (MachineBasicBlock &MBB : MF) {
diff --git a/llvm/lib/Target/ARC/ARCFrameLowering.cpp b/llvm/lib/Target/ARC/ARCFrameLowering.cpp
index 9f6a79e3210c4..83ce075dc9663 100644
-...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/170609
More information about the llvm-branch-commits
mailing list