CellSPU: Fix prologue/epilogue emission when function contains calls but
authorScott Michel <scottm@aero.org>
Sat, 8 Nov 2008 05:16:20 +0000 (05:16 +0000)
committerScott Michel <scottm@aero.org>
Sat, 8 Nov 2008 05:16:20 +0000 (05:16 +0000)
theframe size is 0; the prologue and epilogue should be emitted in this case.

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

lib/Target/CellSPU/SPURegisterInfo.cpp

index eff6d6a36cdf18f59cb48284c641be2f183d683b..beea0dfb02c1c136b02d8a58a967f54409bb0376 100644 (file)
@@ -438,7 +438,7 @@ void SPURegisterInfo::emitPrologue(MachineFunction &MF) const
   assert((FrameSize & 0xf) == 0
          && "SPURegisterInfo::emitPrologue: FrameSize not aligned");
 
-  if (FrameSize > 0) {
+  if (FrameSize > 0 || MFI->hasCalls()) {
     FrameSize = -(FrameSize + SPUFrameInfo::minStackSize());
     if (hasDebugInfo) {
       // Mark effective beginning of when frame pointer becomes valid.
@@ -534,7 +534,7 @@ SPURegisterInfo::emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const
          "Can only insert epilog into returning blocks");
   assert((FrameSize & 0xf) == 0
          && "SPURegisterInfo::emitEpilogue: FrameSize not aligned");
-  if (FrameSize > 0) {
+  if (FrameSize > 0 || MFI->hasCalls()) {
     FrameSize = FrameSize + SPUFrameInfo::minStackSize();
     if (isS10Constant(FrameSize + LinkSlotOffset)) {
       // Reload $lr, adjust $sp by required amount