bugfix: SP isn't resetted when function has FP and there is no spills.
authorLauro Ramos Venancio <lauro.venancio@gmail.com>
Fri, 2 Feb 2007 23:08:40 +0000 (23:08 +0000)
committerLauro Ramos Venancio <lauro.venancio@gmail.com>
Fri, 2 Feb 2007 23:08:40 +0000 (23:08 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33800 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMRegisterInfo.cpp

index 961794681da1a595ea2d2f32a8fb8396c6080864..be4969a68424f261a5d975e7f6983ee497fa3c32 100644 (file)
@@ -1140,10 +1140,11 @@ void ARMRegisterInfo::emitEpilogue(MachineFunction &MF,
     if (STI.isTargetDarwin() || hasFP(MF)) {
       NumBytes = AFI->getFramePtrSpillOffset() - NumBytes;
       // Reset SP based on frame pointer only if the stack frame extends beyond
-      // frame pointer stack slot.
+      // frame pointer stack slot or target is ELF and the function has FP.
       if (AFI->getGPRCalleeSavedArea2Size() ||
           AFI->getDPRCalleeSavedAreaSize()  ||
-          AFI->getDPRCalleeSavedAreaOffset())
+          AFI->getDPRCalleeSavedAreaOffset()||
+          hasFP(MF))
         if (NumBytes)
           BuildMI(MBB, MBBI, TII.get(ARM::SUBri), ARM::SP).addReg(FramePtr)
             .addImm(NumBytes);