diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/LiveDebugValues.cpp | 3 | ||||
-rw-r--r-- | llvm/lib/CodeGen/RegUsageInfoCollector.cpp | 4 | ||||
-rw-r--r-- | llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp | 13 | ||||
-rw-r--r-- | llvm/lib/Target/AArch64/AArch64FrameLowering.cpp | 9 | ||||
-rw-r--r-- | llvm/lib/Target/AArch64/AArch64MachineFunctionInfo.h | 52 | ||||
-rw-r--r-- | llvm/lib/Target/ARM/ARMFrameLowering.cpp | 6 | ||||
-rw-r--r-- | llvm/lib/Target/ARM/ARMFrameLowering.h | 2 |
7 files changed, 8 insertions, 81 deletions
diff --git a/llvm/lib/CodeGen/LiveDebugValues.cpp b/llvm/lib/CodeGen/LiveDebugValues.cpp index ca20b111d30..f1b237d83e8 100644 --- a/llvm/lib/CodeGen/LiveDebugValues.cpp +++ b/llvm/lib/CodeGen/LiveDebugValues.cpp @@ -1439,7 +1439,8 @@ bool LiveDebugValues::runOnMachineFunction(MachineFunction &MF) { TRI = MF.getSubtarget().getRegisterInfo(); TII = MF.getSubtarget().getInstrInfo(); TFI = MF.getSubtarget().getFrameLowering(); - TFI->getCalleeSaves(MF, CalleeSavedRegs); + TFI->determineCalleeSaves(MF, CalleeSavedRegs, + std::make_unique<RegScavenger>().get()); LS.initialize(MF); bool Changed = ExtendRanges(MF); diff --git a/llvm/lib/CodeGen/RegUsageInfoCollector.cpp b/llvm/lib/CodeGen/RegUsageInfoCollector.cpp index 5a79ac44dcf..757ff0e4495 100644 --- a/llvm/lib/CodeGen/RegUsageInfoCollector.cpp +++ b/llvm/lib/CodeGen/RegUsageInfoCollector.cpp @@ -56,7 +56,7 @@ public: bool runOnMachineFunction(MachineFunction &MF) override; - // Call getCalleeSaves and then also set the bits for subregs and + // Call determineCalleeSaves and then also set the bits for subregs and // fully saved superregs. static void computeCalleeSavedRegs(BitVector &SavedRegs, MachineFunction &MF); @@ -199,7 +199,7 @@ computeCalleeSavedRegs(BitVector &SavedRegs, MachineFunction &MF) { // Target will return the set of registers that it saves/restores as needed. SavedRegs.clear(); - TFI.getCalleeSaves(MF, SavedRegs); + TFI.determineCalleeSaves(MF, SavedRegs); if (SavedRegs.none()) return; diff --git a/llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp b/llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp index bc59be890c9..9eeacc2584c 100644 --- a/llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp +++ b/llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp @@ -60,19 +60,6 @@ bool TargetFrameLowering::needsFrameIndexResolution( return MF.getFrameInfo().hasStackObjects(); } -void TargetFrameLowering::getCalleeSaves(const MachineFunction &MF, - BitVector &CalleeSaves) const { - const TargetRegisterInfo &TRI = *MF.getSubtarget().getRegisterInfo(); - CalleeSaves.resize(TRI.getNumRegs()); - - const MachineFrameInfo &MFI = MF.getFrameInfo(); - if (!MFI.isCalleeSavedInfoValid()) - return; - - for (const CalleeSavedInfo &Info : MFI.getCalleeSavedInfo()) - CalleeSaves.set(Info.getReg()); -} - void TargetFrameLowering::determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs, RegScavenger *RS) const { diff --git a/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp b/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp index 042d8fdcc51..68e1e6a3022 100644 --- a/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp +++ b/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp @@ -1588,8 +1588,7 @@ static StackOffset getFPOffset(const MachineFunction &MF, int ObjectOffset) { bool IsWin64 = Subtarget.isCallingConvWin64(MF.getFunction().getCallingConv()); unsigned FixedObject = IsWin64 ? alignTo(AFI->getVarArgsGPRSize(), 16) : 0; - unsigned FPAdjust = isTargetDarwin(MF) - ? 16 : AFI->getCalleeSavedStackSize(MF.getFrameInfo()); + unsigned FPAdjust = isTargetDarwin(MF) ? 16 : AFI->getCalleeSavedStackSize(); return {ObjectOffset + FixedObject + FPAdjust, MVT::i8}; } @@ -1631,7 +1630,7 @@ StackOffset AArch64FrameLowering::resolveFrameOffsetReference( int FPOffset = getFPOffset(MF, ObjectOffset).getBytes(); int Offset = getStackOffset(MF, ObjectOffset).getBytes(); bool isCSR = - !isFixed && ObjectOffset >= -((int)AFI->getCalleeSavedStackSize(MFI)); + !isFixed && ObjectOffset >= -((int)AFI->getCalleeSavedStackSize()); const StackOffset &SVEStackSize = getSVEStackSize(MF); @@ -2305,10 +2304,6 @@ void AArch64FrameLowering::determineCalleeSaves(MachineFunction &MF, << EstimatedStackSize + AlignedCSStackSize << " bytes.\n"); - assert((!MFI.isCalleeSavedInfoValid() || - AFI->getCalleeSavedStackSize() == AlignedCSStackSize) && - "Should not invalidate callee saved info"); - // Round up to register pair alignment to avoid additional SP adjustment // instructions. AFI->setCalleeSavedStackSize(AlignedCSStackSize); diff --git a/llvm/lib/Target/AArch64/AArch64MachineFunctionInfo.h b/llvm/lib/Target/AArch64/AArch64MachineFunctionInfo.h index 32661860934..0009fb7b552 100644 --- a/llvm/lib/Target/AArch64/AArch64MachineFunctionInfo.h +++ b/llvm/lib/Target/AArch64/AArch64MachineFunctionInfo.h @@ -55,7 +55,6 @@ class AArch64FunctionInfo final : public MachineFunctionInfo { /// Amount of stack frame size used for saving callee-saved registers. unsigned CalleeSavedStackSize; - bool HasCalleeSavedStackSize = false; /// Number of TLS accesses using the special (combinable) /// _TLS_MODULE_BASE_ symbol. @@ -168,55 +167,8 @@ public: void setLocalStackSize(unsigned Size) { LocalStackSize = Size; } unsigned getLocalStackSize() const { return LocalStackSize; } - void setCalleeSavedStackSize(unsigned Size) { - CalleeSavedStackSize = Size; - HasCalleeSavedStackSize = true; - } - - // When CalleeSavedStackSize has not been set (for example when - // some MachineIR pass is run in isolation), then recalculate - // the CalleeSavedStackSize directly from the CalleeSavedInfo. - // Note: This information can only be recalculated after PEI - // has assigned offsets to the callee save objects. - unsigned getCalleeSavedStackSize(const MachineFrameInfo &MFI) const { - bool ValidateCalleeSavedStackSize = false; - -#ifndef NDEBUG - // Make sure the calculated size derived from the CalleeSavedInfo - // equals the cached size that was calculated elsewhere (e.g. in - // determineCalleeSaves). - ValidateCalleeSavedStackSize = HasCalleeSavedStackSize; -#endif - - if (!HasCalleeSavedStackSize || ValidateCalleeSavedStackSize) { - assert(MFI.isCalleeSavedInfoValid() && "CalleeSavedInfo not calculated"); - if (MFI.getCalleeSavedInfo().empty()) - return 0; - - int64_t MinOffset = std::numeric_limits<int64_t>::max(); - int64_t MaxOffset = std::numeric_limits<int64_t>::min(); - for (const auto &Info : MFI.getCalleeSavedInfo()) { - int FrameIdx = Info.getFrameIdx(); - int64_t Offset = MFI.getObjectOffset(FrameIdx); - int64_t ObjSize = MFI.getObjectSize(FrameIdx); - MinOffset = std::min<int64_t>(Offset, MinOffset); - MaxOffset = std::max<int64_t>(Offset + ObjSize, MaxOffset); - } - - unsigned Size = alignTo(MaxOffset - MinOffset, 16); - assert((!HasCalleeSavedStackSize || getCalleeSavedStackSize() == Size) && - "Invalid size calculated for callee saves"); - return Size; - } - - return getCalleeSavedStackSize(); - } - - unsigned getCalleeSavedStackSize() const { - assert(HasCalleeSavedStackSize && - "CalleeSavedStackSize has not been calculated"); - return CalleeSavedStackSize; - } + void setCalleeSavedStackSize(unsigned Size) { CalleeSavedStackSize = Size; } + unsigned getCalleeSavedStackSize() const { return CalleeSavedStackSize; } void incNumLocalDynamicTLSAccesses() { ++NumLocalDynamicTLSAccesses; } unsigned getNumLocalDynamicTLSAccesses() const { diff --git a/llvm/lib/Target/ARM/ARMFrameLowering.cpp b/llvm/lib/Target/ARM/ARMFrameLowering.cpp index 5428bd6c94b..01ae93086dc 100644 --- a/llvm/lib/Target/ARM/ARMFrameLowering.cpp +++ b/llvm/lib/Target/ARM/ARMFrameLowering.cpp @@ -2128,16 +2128,10 @@ void ARMFrameLowering::determineCalleeSaves(MachineFunction &MF, AFI->setLRIsSpilledForFarJump(true); } AFI->setLRIsSpilled(SavedRegs.test(ARM::LR)); -} - -void ARMFrameLowering::getCalleeSaves(const MachineFunction &MF, - BitVector &SavedRegs) const { - TargetFrameLowering::getCalleeSaves(MF, SavedRegs); // If we have the "returned" parameter attribute which guarantees that we // return the value which was passed in r0 unmodified (e.g. C++ 'structors), // record that fact for IPRA. - const ARMFunctionInfo *AFI = MF.getInfo<ARMFunctionInfo>(); if (AFI->getPreservesR0()) SavedRegs.set(ARM::R0); } diff --git a/llvm/lib/Target/ARM/ARMFrameLowering.h b/llvm/lib/Target/ARM/ARMFrameLowering.h index 0462b01af70..6d8aee59794 100644 --- a/llvm/lib/Target/ARM/ARMFrameLowering.h +++ b/llvm/lib/Target/ARM/ARMFrameLowering.h @@ -53,8 +53,6 @@ public: int ResolveFrameIndexReference(const MachineFunction &MF, int FI, unsigned &FrameReg, int SPAdj) const; - void getCalleeSaves(const MachineFunction &MF, - BitVector &SavedRegs) const override; void determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs, RegScavenger *RS) const override; |