mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-21 19:20:50 +00:00
Another attempt to fix prologue emission
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76007 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6fe326c713
commit
9b812b0131
@ -265,9 +265,9 @@ SystemZInstrInfo::restoreCalleeSavedRegisters(MachineBasicBlock &MBB,
|
||||
|
||||
unsigned
|
||||
SystemZInstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB,
|
||||
MachineBasicBlock *FBB,
|
||||
MachineBasicBlock *FBB,
|
||||
const SmallVectorImpl<MachineOperand> &Cond) const {
|
||||
// FIXME this should probably have a DebugLoc operand
|
||||
// FIXME: this should probably have a DebugLoc operand
|
||||
DebugLoc dl = DebugLoc::getUnknownLoc();
|
||||
// Shouldn't be a fall through.
|
||||
assert(TBB && "InsertBranch must not be told to insert a fallthrough");
|
||||
|
@ -143,10 +143,10 @@ SystemZRegisterInfo::processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
|
||||
// if yes - mark it as 'callee' saved.
|
||||
MachineFrameInfo *FFI = MF.getFrameInfo();
|
||||
|
||||
if (FFI->hasCalls()
|
||||
/* FIXME: function is varargs */
|
||||
/* FIXME: function grabs RA */
|
||||
/* FIXME: function calls eh_return */)
|
||||
if (FFI->hasCalls())
|
||||
/* FIXME: function is varargs */
|
||||
/* FIXME: function grabs RA */
|
||||
/* FIXME: function calls eh_return */
|
||||
MF.getRegInfo().setPhysRegUsed(SystemZ::R14D);
|
||||
|
||||
if (FFI->hasCalls() ||
|
||||
@ -193,9 +193,10 @@ void SystemZRegisterInfo::emitPrologue(MachineFunction &MF) const {
|
||||
// Get the number of bytes to allocate from the FrameInfo.
|
||||
// Note that area for callee-saved stuff is already allocated, thus we need to
|
||||
// 'undo' the stack movement.
|
||||
uint64_t StackSize = MFI->getStackSize();
|
||||
uint64_t NumBytes = StackSize - SystemZMFI->getCalleeSavedFrameSize();
|
||||
NumBytes -= TFI.getOffsetOfLocalArea();
|
||||
uint64_t StackSize = MFI->getStackSize();
|
||||
StackSize -= SystemZMFI->getCalleeSavedFrameSize();
|
||||
|
||||
uint64_t NumBytes = StackSize - TFI.getOffsetOfLocalArea();
|
||||
|
||||
// Skip the callee-saved push instructions.
|
||||
while (MBBI != MBB.end() &&
|
||||
@ -207,8 +208,11 @@ void SystemZRegisterInfo::emitPrologue(MachineFunction &MF) const {
|
||||
DL = MBBI->getDebugLoc();
|
||||
|
||||
// adjust stack pointer: R15 -= numbytes
|
||||
if (StackSize)
|
||||
if (StackSize || MFI->hasCalls()) {
|
||||
assert(MF.getRegInfo().isPhysRegUsed(SystemZ::R15D) &&
|
||||
"Invalid stack frame calculation!");
|
||||
emitSPUpdate(MBB, MBBI, -(int64_t)NumBytes, TII);
|
||||
}
|
||||
|
||||
if (hasFP(MF)) {
|
||||
// Update R11 with the new base value...
|
||||
|
Loading…
x
Reference in New Issue
Block a user