aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/X86/X86RegisterInfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Target/X86/X86RegisterInfo.cpp')
-rw-r--r--lib/Target/X86/X86RegisterInfo.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/Target/X86/X86RegisterInfo.cpp b/lib/Target/X86/X86RegisterInfo.cpp
index d96aafda603a..9bd96af6c750 100644
--- a/lib/Target/X86/X86RegisterInfo.cpp
+++ b/lib/Target/X86/X86RegisterInfo.cpp
@@ -591,6 +591,15 @@ X86RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
int FrameIndex = MI.getOperand(i).getIndex();
unsigned BasePtr;
+ // DEBUG_VALUE has a special representation, and is only robust enough to
+ // represent SP(or BP) +- offset addressing modes. We rewrite the
+ // FrameIndex to be a constant; implicitly positive constants are relative
+ // to ESP and negative ones to EBP.
+ if (MI.getOpcode()==TargetInstrInfo::DEBUG_VALUE) {
+ MI.getOperand(i).ChangeToImmediate(getFrameIndexOffset(MF, FrameIndex));
+ return 0;
+ }
+
if (needsStackRealignment(MF))
BasePtr = (FrameIndex < 0 ? FramePtr : StackPtr);
else