summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/Sparc/SparcRegisterInfo.cpp
diff options
context:
space:
mode:
authorVenkatraman Govindaraju <venkatra@cs.wisc.edu>2013-06-01 04:51:18 +0000
committerVenkatraman Govindaraju <venkatra@cs.wisc.edu>2013-06-01 04:51:18 +0000
commit3521dcdcc453c887bf8f170a9742d36c93b18a10 (patch)
tree803ed19708d7c33345e18dbb2b2f47d2afcf93c9 /llvm/lib/Target/Sparc/SparcRegisterInfo.cpp
parentddca0775a267ef6e483d5bc20367c2f982e5f914 (diff)
downloadbcm5719-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.cpp9
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
OpenPOWER on IntegriCloud