diff options
| author | Venkatraman Govindaraju <venkatra@cs.wisc.edu> | 2013-05-29 04:46:31 +0000 |
|---|---|---|
| committer | Venkatraman Govindaraju <venkatra@cs.wisc.edu> | 2013-05-29 04:46:31 +0000 |
| commit | ca0fe2f57e1600b494525e92e04ed9cbcb116de6 (patch) | |
| tree | 7ad9150e293f783899289165525fb1b6d43fd12a /llvm/lib/Target/Sparc/SparcRegisterInfo.cpp | |
| parent | d7bf293eb71df15f6e1923e6e3328d3d095b89bd (diff) | |
| download | bcm5719-llvm-ca0fe2f57e1600b494525e92e04ed9cbcb116de6.tar.gz bcm5719-llvm-ca0fe2f57e1600b494525e92e04ed9cbcb116de6.zip | |
[Sparc] Add support for leaf functions in sparc backend.
llvm-svn: 182822
Diffstat (limited to 'llvm/lib/Target/Sparc/SparcRegisterInfo.cpp')
| -rw-r--r-- | llvm/lib/Target/Sparc/SparcRegisterInfo.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/llvm/lib/Target/Sparc/SparcRegisterInfo.cpp b/llvm/lib/Target/Sparc/SparcRegisterInfo.cpp index a5297dcae70..e860cbbaf41 100644 --- a/llvm/lib/Target/Sparc/SparcRegisterInfo.cpp +++ b/llvm/lib/Target/Sparc/SparcRegisterInfo.cpp @@ -13,6 +13,7 @@ #include "SparcRegisterInfo.h" #include "Sparc.h" +#include "SparcMachineFunctionInfo.h" #include "SparcSubtarget.h" #include "llvm/ADT/BitVector.h" #include "llvm/ADT/STLExtras.h" @@ -89,12 +90,13 @@ SparcRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II, int64_t Offset = MF.getFrameInfo()->getObjectOffset(FrameIndex) + MI.getOperand(FIOperandNum + 1).getImm() + Subtarget.getStackPointerBias(); - + SparcMachineFunctionInfo *FuncInfo = MF.getInfo<SparcMachineFunctionInfo>(); + unsigned FramePtr = (FuncInfo->isLeafProc()) ? SP::O6 : SP::I6; // Replace frame index with a frame pointer reference. if (Offset >= -4096 && Offset <= 4095) { // If the offset is small enough to fit in the immediate field, directly // encode it. - MI.getOperand(FIOperandNum).ChangeToRegister(SP::I6, false); + MI.getOperand(FIOperandNum).ChangeToRegister(FramePtr, false); MI.getOperand(FIOperandNum + 1).ChangeToImmediate(Offset); } else { // Otherwise, emit a G1 = SETHI %hi(offset). FIXME: it would be better to @@ -103,7 +105,7 @@ SparcRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II, BuildMI(*MI.getParent(), II, dl, TII.get(SP::SETHIi), SP::G1).addImm(OffHi); // Emit G1 = G1 + I6 BuildMI(*MI.getParent(), II, dl, TII.get(SP::ADDrr), SP::G1).addReg(SP::G1) - .addReg(SP::I6); + .addReg(FramePtr); // Insert: G1+%lo(offset) into the user. MI.getOperand(FIOperandNum).ChangeToRegister(SP::G1, false); MI.getOperand(FIOperandNum + 1).ChangeToImmediate(Offset & ((1 << 10)-1)); |

