When checking whether we need to reserve a register for the scavenger,

the size of the saved frame pointer needs to be taken into account.

llvm-svn: 83136
This commit is contained in:
Jim Grosbach 2009-09-30 01:43:29 +00:00
parent bcad0c8421
commit 70ce8a03b1
1 changed files with 7 additions and 1 deletions

View File

@ -654,7 +654,13 @@ ARMBaseRegisterInfo::processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
// adjustments also, even when the frame itself is small.
if (RS && !ExtraCSSpill) {
MachineFrameInfo *MFI = MF.getFrameInfo();
if (estimateStackSize(MF, MFI) >= estimateRSStackSizeLimit(MF)
// If any of the stack slot references may be out of range of an
// immediate offset, make sure a register (or a spill slot) is
// available for the register scavenger. Note that if we're indexing
// off the frame pointer, the effective stack size is 4 bytes larger
// since the FP points to the previous FP.
if (estimateStackSize(MF, MFI) + (hasFP(MF) ? 4 : 0)
>= estimateRSStackSizeLimit(MF)
|| AFI->isThumb1OnlyFunction()) {
// If any non-reserved CS register isn't spilled, just spill one or two
// extra. That should take care of it!