From: Anton Korobeynikov Date: Thu, 16 Jul 2009 14:16:26 +0000 (+0000) Subject: Another attempt to fix prologue emission X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=9b812b0131d3912155f6720e731ccf7d87118276;p=oota-llvm.git Another attempt to fix prologue emission git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76007 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/SystemZ/SystemZInstrInfo.cpp b/lib/Target/SystemZ/SystemZInstrInfo.cpp index 92418ac11f1..4358a5186b3 100644 --- a/lib/Target/SystemZ/SystemZInstrInfo.cpp +++ b/lib/Target/SystemZ/SystemZInstrInfo.cpp @@ -265,9 +265,9 @@ SystemZInstrInfo::restoreCalleeSavedRegisters(MachineBasicBlock &MBB, unsigned SystemZInstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, - MachineBasicBlock *FBB, + MachineBasicBlock *FBB, const SmallVectorImpl &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"); diff --git a/lib/Target/SystemZ/SystemZRegisterInfo.cpp b/lib/Target/SystemZ/SystemZRegisterInfo.cpp index deceb35284a..dfd5336a204 100644 --- a/lib/Target/SystemZ/SystemZRegisterInfo.cpp +++ b/lib/Target/SystemZ/SystemZRegisterInfo.cpp @@ -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...