diff options
author | Alexey Samsonov <samsonov@google.com> | 2012-05-01 15:16:06 +0000 |
---|---|---|
committer | Alexey Samsonov <samsonov@google.com> | 2012-05-01 15:16:06 +0000 |
commit | d07d06ceef942c478c0f75a4c4d7442e61ddff1d (patch) | |
tree | 97e1b36f7f34e2b66221efc5a989347d346cf5b6 /lib/Target/X86/X86FrameLowering.cpp | |
parent | 0998627b24a1f183920e782abf717e25cbb1a5f5 (diff) | |
download | llvm-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.cpp | 12 |
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, |