handle very large call frames when require SPAdj != 0 for Thumb1
authorJim Grosbach <grosbach@apple.com>
Wed, 24 Feb 2010 02:15:43 +0000 (02:15 +0000)
committerJim Grosbach <grosbach@apple.com>
Wed, 24 Feb 2010 02:15:43 +0000 (02:15 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97013 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMBaseRegisterInfo.cpp
lib/Target/ARM/Thumb1RegisterInfo.cpp

index 1c56808273e73c0b5895603a94a83a8288ca663a..e941a769c9d29577057c6bfe78ece501ac8bcbd7 100644 (file)
@@ -1092,7 +1092,7 @@ hasReservedCallFrame(MachineFunction &MF) const {
 bool ARMBaseRegisterInfo::
 canSimplifyCallFramePseudos(MachineFunction &MF) const {
   ARMFunctionInfo *AFI = MF.getInfo<ARMFunctionInfo>();
-  return hasReservedCallFrame(MF) || (AFI->isThumb1OnlyFunction() && hasFP(MF));
+  return hasReservedCallFrame(MF) || MF.getFrameInfo()->hasVarSizedObjects();
 }
 
 static void
index d6630ce29c1bd1e9a3c3cab2383b8ce8362f2126..b61ce29aab803c590ddc10d59d5d26f774c95390 100644 (file)
@@ -450,9 +450,9 @@ Thumb1RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
     Offset -= AFI->getGPRCalleeSavedArea1Offset();
   else if (AFI->isGPRCalleeSavedArea2Frame(FrameIndex))
     Offset -= AFI->getGPRCalleeSavedArea2Offset();
-  else if (hasFP(MF)) {
-    assert(SPAdj == 0 && "Unexpected");
-    // There is alloca()'s in this function, must reference off the frame
+  else if (MF.getFrameInfo()->hasVarSizedObjects()) {
+    assert(SPAdj == 0 && hasFP(MF) && "Unexpected");
+    // There are alloca()'s in this function, must reference off the frame
     // pointer instead.
     FrameReg = getFrameRegister(MF);
     Offset -= AFI->getFramePtrSpillOffset();