diff options
| author | Venkatraman Govindaraju <venkatra@cs.wisc.edu> | 2013-06-01 04:51:18 +0000 |
|---|---|---|
| committer | Venkatraman Govindaraju <venkatra@cs.wisc.edu> | 2013-06-01 04:51:18 +0000 |
| commit | 3521dcdcc453c887bf8f170a9742d36c93b18a10 (patch) | |
| tree | 803ed19708d7c33345e18dbb2b2f47d2afcf93c9 /llvm/lib/Target/Sparc/SparcRegisterInfo.cpp | |
| parent | ddca0775a267ef6e483d5bc20367c2f982e5f914 (diff) | |
| download | bcm5719-llvm-3521dcdcc453c887bf8f170a9742d36c93b18a10.tar.gz bcm5719-llvm-3521dcdcc453c887bf8f170a9742d36c93b18a10.zip | |
[Sparc] Generate correct code for leaf functions with stack objects
llvm-svn: 183067
Diffstat (limited to 'llvm/lib/Target/Sparc/SparcRegisterInfo.cpp')
| -rw-r--r-- | llvm/lib/Target/Sparc/SparcRegisterInfo.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/llvm/lib/Target/Sparc/SparcRegisterInfo.cpp b/llvm/lib/Target/Sparc/SparcRegisterInfo.cpp index e860cbbaf41..6d7c9f56097 100644 --- a/llvm/lib/Target/Sparc/SparcRegisterInfo.cpp +++ b/llvm/lib/Target/Sparc/SparcRegisterInfo.cpp @@ -91,7 +91,14 @@ SparcRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II, MI.getOperand(FIOperandNum + 1).getImm() + Subtarget.getStackPointerBias(); SparcMachineFunctionInfo *FuncInfo = MF.getInfo<SparcMachineFunctionInfo>(); - unsigned FramePtr = (FuncInfo->isLeafProc()) ? SP::O6 : SP::I6; + unsigned FramePtr = SP::I6; + if (FuncInfo->isLeafProc()) { + //Use %sp and adjust offset if needed. + FramePtr = SP::O6; + int stackSize = MF.getFrameInfo()->getStackSize(); + Offset += (stackSize) ? Subtarget.getAdjustedFrameSize(stackSize) : 0 ; + } + // 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 |

