SP relative offsets need to be adjusted by the local allocation size when
authorJim Grosbach <grosbach@apple.com>
Tue, 31 Aug 2010 18:52:31 +0000 (18:52 +0000)
committerJim Grosbach <grosbach@apple.com>
Tue, 31 Aug 2010 18:52:31 +0000 (18:52 +0000)
determining if they're likely to be in range of the SP when resolving
frame references.

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

lib/Target/ARM/ARMBaseRegisterInfo.cpp

index e692988fd52f5138e7c8585b23b342c4b2fdbb0b..07c890de5cc9d67e54e1ea5b9c808cff7724a8e2 100644 (file)
@@ -1480,7 +1480,11 @@ needsFrameBaseReg(MachineInstr *MI, int64_t Offset) const {
   if (!AFI->isThumbFunction() || !AFI->isThumb1OnlyFunction())
     FPOffset -= 80;
   // Estimate an offset from the stack pointer.
+  // The incoming offset is relating to the SP at the start of the function,
+  // but when we access the local it'll be relative to the SP after local
+  // allocation, so adjust our SP-relative offset by that allocation size.
   Offset = -Offset;
+  Offset += MFI->getLocalFrameSize();
   // Assume that we'll have at least some spill slots allocated.
   // FIXME: This is a total SWAG number. We should run some statistics
   //        and pick a real one.