ARMBaseRegisterInfo::hasFP() has been broken for a while now. :-(
authorEvan Cheng <evan.cheng@apple.com>
Mon, 9 Aug 2010 22:32:45 +0000 (22:32 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Mon, 9 Aug 2010 22:32:45 +0000 (22:32 +0000)
This will always be false before PEI:
(DisableFramePointerElim(MF) && MFI->adjustsStack())
Which means it's going to make r11 available as a general purpose register even
if -disable-fp-elim is specified. It's working on Darwin only because r7 is
always reserved. But it's obviously broken for other targets.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110614 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMBaseRegisterInfo.cpp

index 32baf5a1b3b5025f65a68de27967543ef969ea38..ee1a82e7375cd1034c6348a30bbcc1fe16ee35b6 100644 (file)
@@ -611,7 +611,8 @@ ARMBaseRegisterInfo::UpdateRegAllocHint(unsigned Reg, unsigned NewReg,
 ///
 bool ARMBaseRegisterInfo::hasFP(const MachineFunction &MF) const {
   const MachineFrameInfo *MFI = MF.getFrameInfo();
-  return ((DisableFramePointerElim(MF) && MFI->adjustsStack())||
+  // Always eliminate non-leaf frame pointers.
+  return ((DisableFramePointerElim(MF) && MFI->hasCalls()) ||
           needsStackRealignment(MF) ||
           MFI->hasVarSizedObjects() ||
           MFI->isFrameAddressTaken());