mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 11:42:57 +01:00
Fix coordination for using R4 in Thumb1 as a scratch for SP restore.
The logic for reserving R4 for use as a scratch needs to match that for actually using it. Also, it's not necessary for immediate <=508, so adjust the value checked. llvm-svn: 132934
This commit is contained in:
parent
4fd206b70b
commit
3713c9ddfa
@ -841,9 +841,14 @@ ARMFrameLowering::processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
|
||||
if (AFI->getVarArgsRegSaveSize() > 0)
|
||||
MF.getRegInfo().setPhysRegUsed(ARM::LR);
|
||||
|
||||
// Spill R4 if Thumb1 epilogue has to restore SP from FP since
|
||||
// Spill R4 if Thumb1 epilogue has to restore SP from FP. We don't know
|
||||
// for sure what the stack size will be, but for this, an estimate is good
|
||||
// enough. If there anything changes it, it'll be a spill, which implies
|
||||
// we've used all the registers and so R4 is already used, so not marking
|
||||
// it here will be OK.
|
||||
// FIXME: It will be better just to find spare register here.
|
||||
if (MFI->hasVarSizedObjects())
|
||||
unsigned StackSize = estimateStackSize(MF);
|
||||
if (MFI->hasVarSizedObjects() || StackSize > 508)
|
||||
MF.getRegInfo().setPhysRegUsed(ARM::R4);
|
||||
}
|
||||
|
||||
|
@ -136,8 +136,8 @@ void Thumb1FrameLowering::emitPrologue(MachineFunction &MF) const {
|
||||
BuildMI(MBB, MBBI, dl, TII.get(ARM::tADDrSPi), FramePtr)
|
||||
.addFrameIndex(FramePtrSpillFI).addImm(0)
|
||||
.setMIFlags(MachineInstr::FrameSetup);
|
||||
if (NumBytes > 7)
|
||||
// If offset is > 7 then sp cannot be adjusted in a single instruction,
|
||||
if (NumBytes > 508)
|
||||
// If offset is > 508 then sp cannot be adjusted in a single instruction,
|
||||
// try restoring from fp instead.
|
||||
AFI->setShouldRestoreSPFromFP(true);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user