forked from OSchip/llvm-project
Implement the optimization for the Red Zone on Darwin. This removes the
unnecessary SP manipulation in leaf routines that don't need it. llvm-svn: 22522
This commit is contained in:
parent
a5ec193118
commit
8e2411334c
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue