summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2008-01-31 04:06:00 +0000
committerEvan Cheng <evan.cheng@apple.com>2008-01-31 04:06:00 +0000
commit6332dbec69017aa9505468102775f6e7399dcb8c (patch)
tree4855990126c7c56959a0559afd386d8d9402bdf7
parenta41d3bcb12e88d740c593c7e987726bd4bc16507 (diff)
downloadbcm5719-llvm-6332dbec69017aa9505468102775f6e7399dcb8c.tar.gz
bcm5719-llvm-6332dbec69017aa9505468102775f6e7399dcb8c.zip
Add x86 specific getFrameIndexOffset(). This fixes local variable debugging info.
llvm-svn: 46598
-rw-r--r--llvm/lib/Target/X86/X86RegisterInfo.cpp14
-rw-r--r--llvm/lib/Target/X86/X86RegisterInfo.h1
2 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86RegisterInfo.cpp b/llvm/lib/Target/X86/X86RegisterInfo.cpp
index 2f8ee1dadd8..53efdc8d554 100644
--- a/llvm/lib/Target/X86/X86RegisterInfo.cpp
+++ b/llvm/lib/Target/X86/X86RegisterInfo.cpp
@@ -835,6 +835,20 @@ unsigned X86RegisterInfo::getFrameRegister(MachineFunction &MF) const {
return hasFP(MF) ? FramePtr : StackPtr;
}
+int
+X86RegisterInfo::getFrameIndexOffset(MachineFunction &MF, unsigned FI) const {
+ int Offset = MF.getFrameInfo()->getObjectOffset(FI) + SlotSize;
+ if (!hasFP(MF))
+ return Offset + MF.getFrameInfo()->getStackSize();
+
+ Offset += SlotSize; // Skip the saved EBP
+ // Skip the RETADDR move area
+ X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>();
+ int TailCallReturnAddrDelta = X86FI->getTCReturnAddrDelta();
+ if (TailCallReturnAddrDelta < 0) Offset -= TailCallReturnAddrDelta;
+ return Offset;
+}
+
void X86RegisterInfo::getInitialFrameState(std::vector<MachineMove> &Moves)
const {
// Calculate amount of bytes used for return address storing
diff --git a/llvm/lib/Target/X86/X86RegisterInfo.h b/llvm/lib/Target/X86/X86RegisterInfo.h
index 16bbf074898..fd18c4135db 100644
--- a/llvm/lib/Target/X86/X86RegisterInfo.h
+++ b/llvm/lib/Target/X86/X86RegisterInfo.h
@@ -122,6 +122,7 @@ public:
// Debug information queries.
unsigned getRARegister() const;
unsigned getFrameRegister(MachineFunction &MF) const;
+ int getFrameIndexOffset(MachineFunction &MF, unsigned FI) const;
void getInitialFrameState(std::vector<MachineMove> &Moves) const;
// Exception handling queries.
OpenPOWER on IntegriCloud