[llvm] r338039 - [DEBUGINFO, NVPTX] Emit correct debug information for local variables.
Alexey Bataev via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 26 09:29:52 PDT 2018
Author: abataev
Date: Thu Jul 26 09:29:52 2018
New Revision: 338039
URL: http://llvm.org/viewvc/llvm-project?rev=338039&view=rev
Log:
[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
Modified:
llvm/trunk/include/llvm/CodeGen/AsmPrinter.h
llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.h
llvm/trunk/lib/Target/NVPTX/NVPTXFrameLowering.cpp
llvm/trunk/lib/Target/NVPTX/NVPTXFrameLowering.h
llvm/trunk/test/DebugInfo/NVPTX/dbg-declare-alloca.ll
Modified: llvm/trunk/include/llvm/CodeGen/AsmPrinter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/AsmPrinter.h?rev=338039&r1=338038&r2=338039&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/AsmPrinter.h (original)
+++ llvm/trunk/include/llvm/CodeGen/AsmPrinter.h Thu Jul 26 09:29:52 2018
@@ -201,6 +201,10 @@ public:
/// Return a unique ID for the current function.
unsigned getFunctionNumber() const;
+ /// Return symbol for the function pseudo stack if the stack frame is not a
+ /// register based.
+ virtual const MCSymbol *getFunctionFrameSymbol() const { return nullptr; }
+
MCSymbol *getFunctionBegin() const { return CurrentFnBegin; }
MCSymbol *getFunctionEnd() const { return CurrentFnEnd; }
MCSymbol *getCurExceptionSym();
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp?rev=338039&r1=338038&r2=338039&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp Thu Jul 26 09:29:52 2018
@@ -578,8 +578,11 @@ DIE *DwarfCompileUnit::constructVariable
Ops.append(Expr->elements_begin(), Expr->elements_end());
DIExpressionCursor Cursor(Ops);
DwarfExpr.setMemoryLocationKind();
- DwarfExpr.addMachineRegExpression(
- *Asm->MF->getSubtarget().getRegisterInfo(), Cursor, FrameReg);
+ if (const MCSymbol *FrameSymbol = Asm->getFunctionFrameSymbol())
+ addOpAddress(*Loc, FrameSymbol);
+ else
+ DwarfExpr.addMachineRegExpression(
+ *Asm->MF->getSubtarget().getRegisterInfo(), Cursor, FrameReg);
DwarfExpr.addExpression(std::move(Cursor));
}
addBlock(*VariableDie, dwarf::DW_AT_location, DwarfExpr.finalize());
Modified: llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp?rev=338039&r1=338038&r2=338039&view=diff
==============================================================================
--- llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp Thu Jul 26 09:29:52 2018
@@ -495,6 +495,12 @@ void NVPTXAsmPrinter::EmitFunctionBodyEn
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)) {
Modified: llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.h?rev=338039&r1=338038&r2=338039&view=diff
==============================================================================
--- llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.h (original)
+++ llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.h Thu Jul 26 09:29:52 2018
@@ -310,6 +310,8 @@ public:
}
std::string getVirtualRegisterName(unsigned) const;
+
+ const MCSymbol *getFunctionFrameSymbol() const override;
};
} // end namespace llvm
Modified: llvm/trunk/lib/Target/NVPTX/NVPTXFrameLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXFrameLowering.cpp?rev=338039&r1=338038&r2=338039&view=diff
==============================================================================
--- llvm/trunk/lib/Target/NVPTX/NVPTXFrameLowering.cpp (original)
+++ llvm/trunk/lib/Target/NVPTX/NVPTXFrameLowering.cpp Thu Jul 26 09:29:52 2018
@@ -64,6 +64,14 @@ void NVPTXFrameLowering::emitPrologue(Ma
}
}
+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 {}
Modified: llvm/trunk/lib/Target/NVPTX/NVPTXFrameLowering.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXFrameLowering.h?rev=338039&r1=338038&r2=338039&view=diff
==============================================================================
--- llvm/trunk/lib/Target/NVPTX/NVPTXFrameLowering.h (original)
+++ llvm/trunk/lib/Target/NVPTX/NVPTXFrameLowering.h Thu Jul 26 09:29:52 2018
@@ -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,
Modified: llvm/trunk/test/DebugInfo/NVPTX/dbg-declare-alloca.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/NVPTX/dbg-declare-alloca.ll?rev=338039&r1=338038&r2=338039&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/NVPTX/dbg-declare-alloca.ll (original)
+++ llvm/trunk/test/DebugInfo/NVPTX/dbg-declare-alloca.ll Thu Jul 26 09:29:52 2018
@@ -123,12 +123,12 @@
; CHECK: // }
; CHECK: // .section .debug_info
; CHECK: // {
-; CHECK: // .b32 126 // Length of Unit
+; CHECK: // .b32 135 // Length of Unit
; CHECK: // .b8 2 // DWARF version number
; CHECK: // .b8 0
; CHECK: // .b32 .debug_abbrev // Offset Into Abbrev. Section
; CHECK: // .b8 8 // Address Size (in bytes)
-; CHECK: // .b8 1 // Abbrev [1] 0xb:0x77 DW_TAG_compile_unit
+; CHECK: // .b8 1 // Abbrev [1] 0xb:0x80 DW_TAG_compile_unit
; CHECK: // .b8 99 // DW_AT_producer
; CHECK: // .b8 108
; CHECK: // .b8 97
@@ -149,7 +149,7 @@
; CHECK: // .b8 0
; CHECK: // .b64 Lfunc_begin0 // DW_AT_low_pc
; CHECK: // .b64 Lfunc_end0 // DW_AT_high_pc
-; CHECK: // .b8 2 // Abbrev [2] 0x31:0x34 DW_TAG_subprogram
+; CHECK: // .b8 2 // Abbrev [2] 0x31:0x3d DW_TAG_subprogram
; CHECK: // .b64 Lfunc_begin0 // DW_AT_low_pc
; CHECK: // .b64 Lfunc_end0 // DW_AT_high_pc
; CHECK: // .b8 1 // DW_AT_frame_base
@@ -174,17 +174,19 @@
; CHECK: // .b8 3 // DW_AT_decl_line
; CHECK: // .b8 1 // DW_AT_prototyped
; CHECK: // .b8 1 // DW_AT_external
-; CHECK: // .b8 3 // Abbrev [3] 0x58:0xc DW_TAG_variable
-; CHECK: // .b8 2 // DW_AT_location
+; CHECK: // .b8 3 // Abbrev [3] 0x58:0x15 DW_TAG_variable
+; CHECK: // .b8 11 // DW_AT_location
+; CHECK: // .b8 3
+; CHECK: // .b64 __local_depot0
; CHECK: // .b8 35
-; CHECK: // .b8 8
+; CHECK: // .b8 0
; CHECK: // .b8 111 // DW_AT_name
; CHECK: // .b8 0
; CHECK: // .b8 1 // DW_AT_decl_file
; CHECK: // .b8 4 // DW_AT_decl_line
-; CHECK: // .b32 101 // DW_AT_type
+; CHECK: // .b32 110 // DW_AT_type
; CHECK: // .b8 0 // End Of Children Mark
-; CHECK: // .b8 4 // Abbrev [4] 0x65:0x15 DW_TAG_structure_type
+; CHECK: // .b8 4 // Abbrev [4] 0x6e:0x15 DW_TAG_structure_type
; CHECK: // .b8 70 // DW_AT_name
; CHECK: // .b8 111
; CHECK: // .b8 111
@@ -192,17 +194,17 @@
; CHECK: // .b8 4 // DW_AT_byte_size
; CHECK: // .b8 1 // DW_AT_decl_file
; CHECK: // .b8 1 // DW_AT_decl_line
-; CHECK: // .b8 5 // Abbrev [5] 0x6d:0xc DW_TAG_member
+; CHECK: // .b8 5 // Abbrev [5] 0x76:0xc DW_TAG_member
; CHECK: // .b8 120 // DW_AT_name
; CHECK: // .b8 0
-; CHECK: // .b32 122 // DW_AT_type
+; CHECK: // .b32 131 // DW_AT_type
; CHECK: // .b8 1 // DW_AT_decl_file
; CHECK: // .b8 1 // DW_AT_decl_line
; CHECK: // .b8 2 // DW_AT_data_member_location
; CHECK: // .b8 35
; CHECK: // .b8 0
; CHECK: // .b8 0 // End Of Children Mark
-; CHECK: // .b8 6 // Abbrev [6] 0x7a:0x7 DW_TAG_base_type
+; CHECK: // .b8 6 // Abbrev [6] 0x83:0x7 DW_TAG_base_type
; CHECK: // .b8 105 // DW_AT_name
; CHECK: // .b8 110
; CHECK: // .b8 116
More information about the llvm-commits
mailing list