Implement the optimization for the Red Zone on Darwin. This removes the
authorNate Begeman <natebegeman@mac.com>
Wed, 27 Jul 2005 06:06:29 +0000 (06:06 +0000)
committerNate Begeman <natebegeman@mac.com>
Wed, 27 Jul 2005 06:06:29 +0000 (06:06 +0000)
unnecessary SP manipulation in leaf routines that don't need it.

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

lib/Target/PowerPC/PPCRegisterInfo.cpp
lib/Target/PowerPC/README.txt

index bbcf7c37ef99db4703347ad95537dd2481103022..7977a00500101ec1f4772ff02b25ebe9d676d3d3 100644 (file)
@@ -245,8 +245,13 @@ void PPC32RegisterInfo::emitPrologue(MachineFunction &MF) const {
     NumBytes += MFI->getMaxCallFrameSize();
   }
 
-  // Do we need to allocate space on the stack?
-  if (NumBytes == 0) return;
+  // If we are a leaf function, and use up to 224 bytes of stack space, 
+  // and don't have a frame pointer, then we do not need to adjust the stack
+  // pointer (we fit in the Red Zone).
+  if ((NumBytes == 0) || (NumBytes <= 224 && !hasFP(MF) && !MFI->hasCalls())) {
+    MFI->setStackSize(0);
+    return;
+  }
 
   // Add the size of R1 to  NumBytes size for the store of R1 to the bottom
   // of the stack and round the size to a multiple of the alignment.
@@ -258,7 +263,7 @@ void PPC32RegisterInfo::emitPrologue(MachineFunction &MF) const {
   // Update frame info to pretend that this is part of the stack...
   MFI->setStackSize(NumBytes);
 
-  // adjust stack pointer: r1 -= numbytes
+  // If , adjust stack pointer: r1 -= numbytes.
   if (NumBytes <= 32768) {
     MI=BuildMI(PPC::STWU,3).addReg(PPC::R1).addSImm(-NumBytes).addReg(PPC::R1);
     MBB.insert(MBBI, MI);
index b1d3028572bfda7789197636acb455f03db1d68f..8c11c19c1a81dfdec666a5090d9d29e50e70e100 100644 (file)
@@ -3,7 +3,6 @@ TODO:
 * implement do-loop -> bdnz transform
 * implement powerpc-64 for darwin
 * use stfiwx in float->int
-* take advantage of the darwin red zone in PPC32RegisterInfo.cpp
 * be able to combine sequences like the following into 2 instructions:
        lis r2, ha16(l2__ZTV4Cell)
        la r2, lo16(l2__ZTV4Cell)(r2)