summaryrefslogtreecommitdiff
path: root/lib/Target/X86/X86FrameLowering.cpp
diff options
context:
space:
mode:
authorAlexey Samsonov <samsonov@google.com>2012-05-01 15:16:06 +0000
committerAlexey Samsonov <samsonov@google.com>2012-05-01 15:16:06 +0000
commitd07d06ceef942c478c0f75a4c4d7442e61ddff1d (patch)
tree97e1b36f7f34e2b66221efc5a989347d346cf5b6 /lib/Target/X86/X86FrameLowering.cpp
parent0998627b24a1f183920e782abf717e25cbb1a5f5 (diff)
downloadllvm-d07d06ceef942c478c0f75a4c4d7442e61ddff1d.tar.gz
llvm-d07d06ceef942c478c0f75a4c4d7442e61ddff1d.tar.bz2
llvm-d07d06ceef942c478c0f75a4c4d7442e61ddff1d.tar.xz
X86: Use StackRegister instead of FrameRegister in getFrameIndexReference (to generate debug info for local variables) if stack needs realignment
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155917 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86FrameLowering.cpp')
-rw-r--r--lib/Target/X86/X86FrameLowering.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/Target/X86/X86FrameLowering.cpp b/lib/Target/X86/X86FrameLowering.cpp
index 000e3757cf..626f1214a5 100644
--- a/lib/Target/X86/X86FrameLowering.cpp
+++ b/lib/Target/X86/X86FrameLowering.cpp
@@ -1174,6 +1174,18 @@ int X86FrameLowering::getFrameIndexOffset(const MachineFunction &MF, int FI) con
return Offset;
}
+int X86FrameLowering::getFrameIndexReference(const MachineFunction &MF, int FI,
+ unsigned &FrameReg) const {
+ const X86RegisterInfo *RI =
+ static_cast<const X86RegisterInfo*>(MF.getTarget().getRegisterInfo());
+ // We can't calculate offset from frame pointer if the stack is realigned,
+ // so enforce usage of stack pointer.
+ FrameReg = (RI->needsStackRealignment(MF)) ? RI->getStackRegister()
+ : RI->getFrameRegister(MF);
+ return getFrameIndexOffset(MF, FI);
+}
+
+
bool X86FrameLowering::spillCalleeSavedRegisters(MachineBasicBlock &MBB,
MachineBasicBlock::iterator MI,
const std::vector<CalleeSavedInfo> &CSI,