diff options
author | Alexey Bataev <a.bataev@hotmail.com> | 2018-07-26 16:29:52 +0000 |
---|---|---|
committer | Alexey Bataev <a.bataev@hotmail.com> | 2018-07-26 16:29:52 +0000 |
commit | 216b7b295eb8ec4a8e4a2b81faeed3bbf2b1064b (patch) | |
tree | d58bdcd9090927fa67e4940659369259a44ad025 /llvm/lib/Target/NVPTX | |
parent | 37744f2b08fb30f1b236efcdfc980f64dacfec4c (diff) |
[DEBUGINFO, NVPTX] Emit correct debug information for local variables.
Summary:
NVPTX target dos not use register-based frame information. Instead it
relies on the artificial local_depot that is used instead of the frame
and the data for variables must be emitted relatively to this
local_depot.
Reviewers: tra, jlebar, echristo
Subscribers: jholewinski, aprantl, JDevlieghere, llvm-commits
Differential Revision: https://reviews.llvm.org/D45963
Diffstat (limited to 'llvm/lib/Target/NVPTX')
-rw-r--r-- | llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp | 6 | ||||
-rw-r--r-- | llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h | 2 | ||||
-rw-r--r-- | llvm/lib/Target/NVPTX/NVPTXFrameLowering.cpp | 8 | ||||
-rw-r--r-- | llvm/lib/Target/NVPTX/NVPTXFrameLowering.h | 2 |
4 files changed, 18 insertions, 0 deletions
diff --git a/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp b/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp index b41a8316379..a966b992840 100644 --- a/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp +++ b/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp @@ -495,6 +495,12 @@ void NVPTXAsmPrinter::EmitFunctionBodyEnd() { VRegMapping.clear(); } +const MCSymbol *NVPTXAsmPrinter::getFunctionFrameSymbol() const { + SmallString<128> Str; + raw_svector_ostream(Str) << DEPOTNAME << getFunctionNumber(); + return OutContext.getOrCreateSymbol(Str); +} + void NVPTXAsmPrinter::emitImplicitDef(const MachineInstr *MI) const { unsigned RegNo = MI->getOperand(0).getReg(); if (TargetRegisterInfo::isVirtualRegister(RegNo)) { diff --git a/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h b/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h index 02d1a041a15..3b042c74b26 100644 --- a/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h +++ b/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h @@ -310,6 +310,8 @@ public: } std::string getVirtualRegisterName(unsigned) const; + + const MCSymbol *getFunctionFrameSymbol() const override; }; } // end namespace llvm diff --git a/llvm/lib/Target/NVPTX/NVPTXFrameLowering.cpp b/llvm/lib/Target/NVPTX/NVPTXFrameLowering.cpp index 729f3ed7b79..e5e6637967b 100644 --- a/llvm/lib/Target/NVPTX/NVPTXFrameLowering.cpp +++ b/llvm/lib/Target/NVPTX/NVPTXFrameLowering.cpp @@ -64,6 +64,14 @@ void NVPTXFrameLowering::emitPrologue(MachineFunction &MF, } } +int NVPTXFrameLowering::getFrameIndexReference(const MachineFunction &MF, + int FI, + unsigned &FrameReg) const { + const MachineFrameInfo &MFI = MF.getFrameInfo(); + FrameReg = NVPTX::VRDepot; + return MFI.getObjectOffset(FI) - getOffsetOfLocalArea(); +} + void NVPTXFrameLowering::emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const {} diff --git a/llvm/lib/Target/NVPTX/NVPTXFrameLowering.h b/llvm/lib/Target/NVPTX/NVPTXFrameLowering.h index a802cf85d2e..0a7856b9d5d 100644 --- a/llvm/lib/Target/NVPTX/NVPTXFrameLowering.h +++ b/llvm/lib/Target/NVPTX/NVPTXFrameLowering.h @@ -25,6 +25,8 @@ public: bool hasFP(const MachineFunction &MF) const override; void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override; void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override; + int getFrameIndexReference(const MachineFunction &MF, int FI, + unsigned &FrameReg) const override; MachineBasicBlock::iterator eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB, |