summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/NVPTX
diff options
context:
space:
mode:
authorAlexey Bataev <a.bataev@hotmail.com>2018-07-26 16:29:52 +0000
committerAlexey Bataev <a.bataev@hotmail.com>2018-07-26 16:29:52 +0000
commit4dd7558fab0da7889c1e31bcc741880d0e6cbb52 (patch)
tree8a1aafb3d78f88ef5d8bec991a4beb3fe74864ce /llvm/lib/Target/NVPTX
parentb381e7e59a182c418c44cea54c127ec2366a40d2 (diff)
downloadbcm5719-llvm-4dd7558fab0da7889c1e31bcc741880d0e6cbb52.tar.gz
bcm5719-llvm-4dd7558fab0da7889c1e31bcc741880d0e6cbb52.zip
[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 llvm-svn: 338039
Diffstat (limited to 'llvm/lib/Target/NVPTX')
-rw-r--r--llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp6
-rw-r--r--llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h2
-rw-r--r--llvm/lib/Target/NVPTX/NVPTXFrameLowering.cpp8
-rw-r--r--llvm/lib/Target/NVPTX/NVPTXFrameLowering.h2
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,
OpenPOWER on IntegriCloud