eliminate unnecessary reset of SP in epilog on darwin
[oota-llvm.git] / lib / Target / ARM / ARMRegisterInfo.cpp
index 503d560403c9607d20b201e9a356434c5cf886bb..dc7e82b86ce4c31cb77e30108e9ffde913d7deb2 100644 (file)
@@ -1290,7 +1290,7 @@ void ARMRegisterInfo::emitEpilogue(MachineFunction &MF,
     } else {
       // Darwin ABI requires FP to point to the stack slot that contains the
       // previous FP.
-      if (STI.isTargetDarwin() || hasFP(MF)) {
+      if ((STI.isTargetDarwin() && NumBytes) || hasFP(MF)) {
         NumBytes = AFI->getFramePtrSpillOffset() - NumBytes;
         // Reset SP based on frame pointer only if the stack frame extends beyond
         // frame pointer stack slot or target is ELF and the function has FP.