From: Brian Gaeke Date: Sun, 10 Oct 2004 19:57:21 +0000 (+0000) Subject: Implement eliminateCallFramePseudoInstr(). X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=85c08351cec796d541c18435c6e6c0edec343e93;p=oota-llvm.git Implement eliminateCallFramePseudoInstr(). Wrap a long comment line. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16883 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/Sparc/SparcRegisterInfo.cpp b/lib/Target/Sparc/SparcRegisterInfo.cpp index 9b3c68b8fe7..f09b1aff960 100644 --- a/lib/Target/Sparc/SparcRegisterInfo.cpp +++ b/lib/Target/Sparc/SparcRegisterInfo.cpp @@ -77,10 +77,12 @@ void SparcV8RegisterInfo::copyRegToReg(MachineBasicBlock &MBB, void SparcV8RegisterInfo:: eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB, MachineBasicBlock::iterator I) const { - std::cerr - << "Sorry, I don't know how to eliminate call frame pseudo instrs yet, in\n" - << __FUNCTION__ << " at " << __FILE__ << ":" << __LINE__ << "\n"; - abort(); + MachineInstr &MI = *I; + int size = MI.getOperand (0).getImmedValue (); + if (MI.getOpcode () == V8::ADJCALLSTACKDOWN) + size = -size; + BuildMI (MBB, I, V8::ADDri, 2, V8::SP).addReg (V8::SP).addSImm (size); + MBB.erase (I); } void @@ -115,8 +117,8 @@ void SparcV8RegisterInfo::emitPrologue(MachineFunction &MF) const { // Get the number of bytes to allocate from the FrameInfo int NumBytes = (int) MFI->getStackSize(); - // Emit the correct save instruction based on the number of bytes in the frame. - // Minimum stack frame size according to V8 ABI is: + // Emit the correct save instruction based on the number of bytes in + // the frame. Minimum stack frame size according to V8 ABI is: // 16 words for register window spill // 1 word for address of returned aggregate-value // + 6 words for passing parameters on the stack diff --git a/lib/Target/SparcV8/SparcV8RegisterInfo.cpp b/lib/Target/SparcV8/SparcV8RegisterInfo.cpp index 9b3c68b8fe7..f09b1aff960 100644 --- a/lib/Target/SparcV8/SparcV8RegisterInfo.cpp +++ b/lib/Target/SparcV8/SparcV8RegisterInfo.cpp @@ -77,10 +77,12 @@ void SparcV8RegisterInfo::copyRegToReg(MachineBasicBlock &MBB, void SparcV8RegisterInfo:: eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB, MachineBasicBlock::iterator I) const { - std::cerr - << "Sorry, I don't know how to eliminate call frame pseudo instrs yet, in\n" - << __FUNCTION__ << " at " << __FILE__ << ":" << __LINE__ << "\n"; - abort(); + MachineInstr &MI = *I; + int size = MI.getOperand (0).getImmedValue (); + if (MI.getOpcode () == V8::ADJCALLSTACKDOWN) + size = -size; + BuildMI (MBB, I, V8::ADDri, 2, V8::SP).addReg (V8::SP).addSImm (size); + MBB.erase (I); } void @@ -115,8 +117,8 @@ void SparcV8RegisterInfo::emitPrologue(MachineFunction &MF) const { // Get the number of bytes to allocate from the FrameInfo int NumBytes = (int) MFI->getStackSize(); - // Emit the correct save instruction based on the number of bytes in the frame. - // Minimum stack frame size according to V8 ABI is: + // Emit the correct save instruction based on the number of bytes in + // the frame. Minimum stack frame size according to V8 ABI is: // 16 words for register window spill // 1 word for address of returned aggregate-value // + 6 words for passing parameters on the stack