diff options
author | Evan Cheng <evan.cheng@apple.com> | 2008-01-31 04:06:00 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2008-01-31 04:06:00 +0000 |
commit | 6332dbec69017aa9505468102775f6e7399dcb8c (patch) | |
tree | 4855990126c7c56959a0559afd386d8d9402bdf7 | |
parent | a41d3bcb12e88d740c593c7e987726bd4bc16507 (diff) | |
download | bcm5719-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.cpp | 14 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86RegisterInfo.h | 1 |
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. |