Skip to content

Commit d87535e

Browse files
author
git apple-llvm automerger
committed
Merge commit '8f2dac471ad9' from llvm.org/master into apple/master
2 parents 08a12a9 + 8f2dac4 commit d87535e

File tree

10 files changed

+9
-182
lines changed

10 files changed

+9
-182
lines changed

llvm/include/llvm/CodeGen/TargetFrameLowering.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -282,21 +282,13 @@ class TargetFrameLowering {
282282
return getFrameIndexReference(MF, FI, FrameReg);
283283
}
284284

285-
/// Returns the callee-saved registers as computed by determineCalleeSaves
286-
/// in the BitVector \p SavedRegs.
287-
virtual void getCalleeSaves(const MachineFunction &MF,
288-
BitVector &SavedRegs) const;
289-
290285
/// This method determines which of the registers reported by
291286
/// TargetRegisterInfo::getCalleeSavedRegs() should actually get saved.
292287
/// The default implementation checks populates the \p SavedRegs bitset with
293288
/// all registers which are modified in the function, targets may override
294289
/// this function to save additional registers.
295290
/// This method also sets up the register scavenger ensuring there is a free
296291
/// register or a frameindex available.
297-
/// This method should not be called by any passes outside of PEI, because
298-
/// it may change state passed in by \p MF and \p RS. The preferred
299-
/// interface outside PEI is getCalleeSaves.
300292
virtual void determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs,
301293
RegScavenger *RS = nullptr) const;
302294

llvm/lib/CodeGen/LiveDebugValues.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1439,7 +1439,8 @@ bool LiveDebugValues::runOnMachineFunction(MachineFunction &MF) {
14391439
TRI = MF.getSubtarget().getRegisterInfo();
14401440
TII = MF.getSubtarget().getInstrInfo();
14411441
TFI = MF.getSubtarget().getFrameLowering();
1442-
TFI->getCalleeSaves(MF, CalleeSavedRegs);
1442+
TFI->determineCalleeSaves(MF, CalleeSavedRegs,
1443+
std::make_unique<RegScavenger>().get());
14431444
LS.initialize(MF);
14441445

14451446
bool Changed = ExtendRanges(MF);

llvm/lib/CodeGen/RegUsageInfoCollector.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class RegUsageInfoCollector : public MachineFunctionPass {
5656

5757
bool runOnMachineFunction(MachineFunction &MF) override;
5858

59-
// Call getCalleeSaves and then also set the bits for subregs and
59+
// Call determineCalleeSaves and then also set the bits for subregs and
6060
// fully saved superregs.
6161
static void computeCalleeSavedRegs(BitVector &SavedRegs, MachineFunction &MF);
6262

@@ -199,7 +199,7 @@ computeCalleeSavedRegs(BitVector &SavedRegs, MachineFunction &MF) {
199199

200200
// Target will return the set of registers that it saves/restores as needed.
201201
SavedRegs.clear();
202-
TFI.getCalleeSaves(MF, SavedRegs);
202+
TFI.determineCalleeSaves(MF, SavedRegs);
203203
if (SavedRegs.none())
204204
return;
205205

llvm/lib/CodeGen/TargetFrameLoweringImpl.cpp

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -60,19 +60,6 @@ bool TargetFrameLowering::needsFrameIndexResolution(
6060
return MF.getFrameInfo().hasStackObjects();
6161
}
6262

63-
void TargetFrameLowering::getCalleeSaves(const MachineFunction &MF,
64-
BitVector &CalleeSaves) const {
65-
const TargetRegisterInfo &TRI = *MF.getSubtarget().getRegisterInfo();
66-
CalleeSaves.resize(TRI.getNumRegs());
67-
68-
const MachineFrameInfo &MFI = MF.getFrameInfo();
69-
if (!MFI.isCalleeSavedInfoValid())
70-
return;
71-
72-
for (const CalleeSavedInfo &Info : MFI.getCalleeSavedInfo())
73-
CalleeSaves.set(Info.getReg());
74-
}
75-
7663
void TargetFrameLowering::determineCalleeSaves(MachineFunction &MF,
7764
BitVector &SavedRegs,
7865
RegScavenger *RS) const {

llvm/lib/Target/AArch64/AArch64FrameLowering.cpp

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1588,8 +1588,7 @@ static StackOffset getFPOffset(const MachineFunction &MF, int ObjectOffset) {
15881588
bool IsWin64 =
15891589
Subtarget.isCallingConvWin64(MF.getFunction().getCallingConv());
15901590
unsigned FixedObject = IsWin64 ? alignTo(AFI->getVarArgsGPRSize(), 16) : 0;
1591-
unsigned FPAdjust = isTargetDarwin(MF)
1592-
? 16 : AFI->getCalleeSavedStackSize(MF.getFrameInfo());
1591+
unsigned FPAdjust = isTargetDarwin(MF) ? 16 : AFI->getCalleeSavedStackSize();
15931592
return {ObjectOffset + FixedObject + FPAdjust, MVT::i8};
15941593
}
15951594

@@ -1631,7 +1630,7 @@ StackOffset AArch64FrameLowering::resolveFrameOffsetReference(
16311630
int FPOffset = getFPOffset(MF, ObjectOffset).getBytes();
16321631
int Offset = getStackOffset(MF, ObjectOffset).getBytes();
16331632
bool isCSR =
1634-
!isFixed && ObjectOffset >= -((int)AFI->getCalleeSavedStackSize(MFI));
1633+
!isFixed && ObjectOffset >= -((int)AFI->getCalleeSavedStackSize());
16351634

16361635
const StackOffset &SVEStackSize = getSVEStackSize(MF);
16371636

@@ -2305,10 +2304,6 @@ void AArch64FrameLowering::determineCalleeSaves(MachineFunction &MF,
23052304
<< EstimatedStackSize + AlignedCSStackSize
23062305
<< " bytes.\n");
23072306

2308-
assert((!MFI.isCalleeSavedInfoValid() ||
2309-
AFI->getCalleeSavedStackSize() == AlignedCSStackSize) &&
2310-
"Should not invalidate callee saved info");
2311-
23122307
// Round up to register pair alignment to avoid additional SP adjustment
23132308
// instructions.
23142309
AFI->setCalleeSavedStackSize(AlignedCSStackSize);

llvm/lib/Target/AArch64/AArch64MachineFunctionInfo.h

Lines changed: 2 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ class AArch64FunctionInfo final : public MachineFunctionInfo {
5555

5656
/// Amount of stack frame size used for saving callee-saved registers.
5757
unsigned CalleeSavedStackSize;
58-
bool HasCalleeSavedStackSize = false;
5958

6059
/// Number of TLS accesses using the special (combinable)
6160
/// _TLS_MODULE_BASE_ symbol.
@@ -168,55 +167,8 @@ class AArch64FunctionInfo final : public MachineFunctionInfo {
168167
void setLocalStackSize(unsigned Size) { LocalStackSize = Size; }
169168
unsigned getLocalStackSize() const { return LocalStackSize; }
170169

171-
void setCalleeSavedStackSize(unsigned Size) {
172-
CalleeSavedStackSize = Size;
173-
HasCalleeSavedStackSize = true;
174-
}
175-
176-
// When CalleeSavedStackSize has not been set (for example when
177-
// some MachineIR pass is run in isolation), then recalculate
178-
// the CalleeSavedStackSize directly from the CalleeSavedInfo.
179-
// Note: This information can only be recalculated after PEI
180-
// has assigned offsets to the callee save objects.
181-
unsigned getCalleeSavedStackSize(const MachineFrameInfo &MFI) const {
182-
bool ValidateCalleeSavedStackSize = false;
183-
184-
#ifndef NDEBUG
185-
// Make sure the calculated size derived from the CalleeSavedInfo
186-
// equals the cached size that was calculated elsewhere (e.g. in
187-
// determineCalleeSaves).
188-
ValidateCalleeSavedStackSize = HasCalleeSavedStackSize;
189-
#endif
190-
191-
if (!HasCalleeSavedStackSize || ValidateCalleeSavedStackSize) {
192-
assert(MFI.isCalleeSavedInfoValid() && "CalleeSavedInfo not calculated");
193-
if (MFI.getCalleeSavedInfo().empty())
194-
return 0;
195-
196-
int64_t MinOffset = std::numeric_limits<int64_t>::max();
197-
int64_t MaxOffset = std::numeric_limits<int64_t>::min();
198-
for (const auto &Info : MFI.getCalleeSavedInfo()) {
199-
int FrameIdx = Info.getFrameIdx();
200-
int64_t Offset = MFI.getObjectOffset(FrameIdx);
201-
int64_t ObjSize = MFI.getObjectSize(FrameIdx);
202-
MinOffset = std::min<int64_t>(Offset, MinOffset);
203-
MaxOffset = std::max<int64_t>(Offset + ObjSize, MaxOffset);
204-
}
205-
206-
unsigned Size = alignTo(MaxOffset - MinOffset, 16);
207-
assert((!HasCalleeSavedStackSize || getCalleeSavedStackSize() == Size) &&
208-
"Invalid size calculated for callee saves");
209-
return Size;
210-
}
211-
212-
return getCalleeSavedStackSize();
213-
}
214-
215-
unsigned getCalleeSavedStackSize() const {
216-
assert(HasCalleeSavedStackSize &&
217-
"CalleeSavedStackSize has not been calculated");
218-
return CalleeSavedStackSize;
219-
}
170+
void setCalleeSavedStackSize(unsigned Size) { CalleeSavedStackSize = Size; }
171+
unsigned getCalleeSavedStackSize() const { return CalleeSavedStackSize; }
220172

221173
void incNumLocalDynamicTLSAccesses() { ++NumLocalDynamicTLSAccesses; }
222174
unsigned getNumLocalDynamicTLSAccesses() const {

llvm/lib/Target/ARM/ARMFrameLowering.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2128,16 +2128,10 @@ void ARMFrameLowering::determineCalleeSaves(MachineFunction &MF,
21282128
AFI->setLRIsSpilledForFarJump(true);
21292129
}
21302130
AFI->setLRIsSpilled(SavedRegs.test(ARM::LR));
2131-
}
2132-
2133-
void ARMFrameLowering::getCalleeSaves(const MachineFunction &MF,
2134-
BitVector &SavedRegs) const {
2135-
TargetFrameLowering::getCalleeSaves(MF, SavedRegs);
21362131

21372132
// If we have the "returned" parameter attribute which guarantees that we
21382133
// return the value which was passed in r0 unmodified (e.g. C++ 'structors),
21392134
// record that fact for IPRA.
2140-
const ARMFunctionInfo *AFI = MF.getInfo<ARMFunctionInfo>();
21412135
if (AFI->getPreservesR0())
21422136
SavedRegs.set(ARM::R0);
21432137
}

llvm/lib/Target/ARM/ARMFrameLowering.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,6 @@ class ARMFrameLowering : public TargetFrameLowering {
5353
int ResolveFrameIndexReference(const MachineFunction &MF, int FI,
5454
unsigned &FrameReg, int SPAdj) const;
5555

56-
void getCalleeSaves(const MachineFunction &MF,
57-
BitVector &SavedRegs) const override;
5856
void determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs,
5957
RegScavenger *RS) const override;
6058

llvm/test/CodeGen/AArch64/wrong-callee-save-size-after-livedebugvariables.mir

Lines changed: 0 additions & 92 deletions
This file was deleted.

llvm/test/DebugInfo/MIR/X86/live-debug-values-reg-copy.mir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# RUN: llc -start-before=prologepilog -stop-after=livedebugvalues %s -o - | FileCheck %s
1+
# RUN: llc -run-pass=livedebugvalues %s -o - | FileCheck %s
22
#
33
# This test tests tracking variables value transferring from one register to another.
44
# This example is altered additionally in order to test transferring from one float register

0 commit comments

Comments
 (0)