1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 11:42:57 +01:00

Added a MRegisterInfo hook that tells PEI the target is responsible for

rounding the stack frame to a multiple of stack alignment.

llvm-svn: 33504
This commit is contained in:
Evan Cheng 2007-01-25 22:12:41 +00:00
parent 696a1c1143
commit b64363a085
2 changed files with 9 additions and 2 deletions

View File

@ -367,6 +367,12 @@ public:
return 0;
}
/// targetHandlesStackFrameRounding - Returns true if the target is responsible
/// for rounding up the stack frame (probably at emitPrologue time).
virtual bool targetHandlesStackFrameRounding() const {
return false;
}
/// hasFP - Return true if the specified function should have a dedicated frame
/// pointer register. For most targets this is true only if the function has
/// variable sized allocas or if frame pointer elimination is disabled.

View File

@ -389,11 +389,12 @@ void PEI::calculateFrameObjectOffsets(MachineFunction &Fn) {
// Round up the size to a multiple of the alignment, but only if there are
// calls or alloca's in the function. This ensures that any calls to
// subroutines have their stack frames suitable aligned.
if (FFI->hasCalls() || FFI->hasVarSizedObjects()) {
const MRegisterInfo *RegInfo = Fn.getTarget().getRegisterInfo();
if (!RegInfo->targetHandlesStackFrameRounding() &&
(FFI->hasCalls() || FFI->hasVarSizedObjects())) {
// When we have no frame pointer, we reserve argument space for call sites
// in the function immediately on entry to the current function. This
// eliminates the need for add/sub sp brackets around call sites.
const MRegisterInfo *RegInfo = Fn.getTarget().getRegisterInfo();
if (!RegInfo->hasFP(Fn))
Offset += FFI->getMaxCallFrameSize();