Skip to content

Commit f7dfaf3

Browse files
authored
[NVPTX] add address class for variables with a single register location (#110030)
This is the final piece to enable register debugging for variables in registers that have single locations that last throughout their enclosing scope. The next step after this for supporting register debugging for NVPTX is to support the .debug_loc section. Stacked on top of: #109495
1 parent 44950de commit f7dfaf3

File tree

4 files changed

+1165
-1147
lines changed

4 files changed

+1165
-1147
lines changed

llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -779,6 +779,13 @@ DIE *DwarfCompileUnit::constructVariableDIE(DbgVariable &DV, bool Abstract) {
779779
void DwarfCompileUnit::applyConcreteDbgVariableAttributes(
780780
const Loc::Single &Single, const DbgVariable &DV, DIE &VariableDie) {
781781
const DbgValueLoc *DVal = &Single.getValueLoc();
782+
if (Asm->TM.getTargetTriple().isNVPTX() && DD->tuneForGDB() &&
783+
!Single.getExpr()) {
784+
// Lack of expression means it is a register. Registers for PTX need to
785+
// be marked with DW_AT_address_class = 2. See
786+
// https://docs.nvidia.com/cuda/archive/10.0/ptx-writers-guide-to-interoperability/index.html#cuda-specific-dwarf
787+
addUInt(VariableDie, dwarf::DW_AT_address_class, dwarf::DW_FORM_data1, 2);
788+
}
782789
if (!DVal->isVariadic()) {
783790
const DbgValueLocEntry *Entry = DVal->getLocEntries().begin();
784791
if (Entry->isLocation()) {

llvm/test/DebugInfo/NVPTX/cu-range-hole.ll

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,8 @@ entry:
120120
; CHECK-NEXT: .b8 3 // Abbreviation Code
121121
; CHECK-NEXT: .b8 5 // DW_TAG_formal_parameter
122122
; CHECK-NEXT: .b8 0 // DW_CHILDREN_no
123+
; CHECK-NEXT: .b8 51 // DW_AT_address_class
124+
; CHECK-NEXT: .b8 11 // DW_FORM_data1
123125
; CHECK-NEXT: .b8 2 // DW_AT_location
124126
; CHECK-NEXT: .b8 10 // DW_FORM_block1
125127
; CHECK-NEXT: .b8 3 // DW_AT_name
@@ -147,12 +149,12 @@ entry:
147149
; CHECK-NEXT: }
148150
; CHECK-NEXT: .section .debug_info
149151
; CHECK-NEXT: {
150-
; CHECK-NEXT: .b32 195 // Length of Unit
152+
; CHECK-NEXT: .b32 197 // Length of Unit
151153
; CHECK-NEXT: .b8 2 // DWARF version number
152154
; CHECK-NEXT: .b8 0
153155
; CHECK-NEXT: .b32 .debug_abbrev // Offset Into Abbrev. Section
154156
; CHECK-NEXT: .b8 8 // Address Size (in bytes)
155-
; CHECK-NEXT: .b8 1 // Abbrev [1] 0xb:0xbc DW_TAG_compile_unit
157+
; CHECK-NEXT: .b8 1 // Abbrev [1] 0xb:0xbe DW_TAG_compile_unit
156158
; CHECK-NEXT: .b8 99 // DW_AT_producer
157159
; CHECK-NEXT: .b8 108
158160
; CHECK-NEXT: .b8 97
@@ -225,7 +227,7 @@ entry:
225227
; CHECK-NEXT: .b8 0
226228
; CHECK-NEXT: .b64 $L__func_begin0 // DW_AT_low_pc
227229
; CHECK-NEXT: .b64 $L__func_end2 // DW_AT_high_pc
228-
; CHECK-NEXT: .b8 2 // Abbrev [2] 0x65:0x2d DW_TAG_subprogram
230+
; CHECK-NEXT: .b8 2 // Abbrev [2] 0x65:0x2e DW_TAG_subprogram
229231
; CHECK-NEXT: .b64 $L__func_begin0 // DW_AT_low_pc
230232
; CHECK-NEXT: .b64 $L__func_end0 // DW_AT_high_pc
231233
; CHECK-NEXT: .b8 1 // DW_AT_frame_base
@@ -235,9 +237,10 @@ entry:
235237
; CHECK-NEXT: .b8 1 // DW_AT_decl_file
236238
; CHECK-NEXT: .b8 1 // DW_AT_decl_line
237239
; CHECK-NEXT: .b8 1 // DW_AT_prototyped
238-
; CHECK-NEXT: .b32 191 // DW_AT_type
240+
; CHECK-NEXT: .b32 193 // DW_AT_type
239241
; CHECK-NEXT: .b8 1 // DW_AT_external
240-
; CHECK-NEXT: .b8 3 // Abbrev [3] 0x82:0xf DW_TAG_formal_parameter
242+
; CHECK-NEXT: .b8 3 // Abbrev [3] 0x82:0x10 DW_TAG_formal_parameter
243+
; CHECK-NEXT: .b8 2 // DW_AT_address_class
241244
; CHECK-NEXT: .b8 5 // DW_AT_location
242245
; CHECK-NEXT: .b8 144
243246
; CHECK-NEXT: .b8 177
@@ -248,9 +251,9 @@ entry:
248251
; CHECK-NEXT: .b8 0
249252
; CHECK-NEXT: .b8 1 // DW_AT_decl_file
250253
; CHECK-NEXT: .b8 1 // DW_AT_decl_line
251-
; CHECK-NEXT: .b32 191 // DW_AT_type
254+
; CHECK-NEXT: .b32 193 // DW_AT_type
252255
; CHECK-NEXT: .b8 0 // End Of Children Mark
253-
; CHECK-NEXT: .b8 2 // Abbrev [2] 0x92:0x2d DW_TAG_subprogram
256+
; CHECK-NEXT: .b8 2 // Abbrev [2] 0x93:0x2e DW_TAG_subprogram
254257
; CHECK-NEXT: .b64 $L__func_begin2 // DW_AT_low_pc
255258
; CHECK-NEXT: .b64 $L__func_end2 // DW_AT_high_pc
256259
; CHECK-NEXT: .b8 1 // DW_AT_frame_base
@@ -260,9 +263,10 @@ entry:
260263
; CHECK-NEXT: .b8 1 // DW_AT_decl_file
261264
; CHECK-NEXT: .b8 3 // DW_AT_decl_line
262265
; CHECK-NEXT: .b8 1 // DW_AT_prototyped
263-
; CHECK-NEXT: .b32 191 // DW_AT_type
266+
; CHECK-NEXT: .b32 193 // DW_AT_type
264267
; CHECK-NEXT: .b8 1 // DW_AT_external
265-
; CHECK-NEXT: .b8 3 // Abbrev [3] 0xaf:0xf DW_TAG_formal_parameter
268+
; CHECK-NEXT: .b8 3 // Abbrev [3] 0xb0:0x10 DW_TAG_formal_parameter
269+
; CHECK-NEXT: .b8 2 // DW_AT_address_class
266270
; CHECK-NEXT: .b8 5 // DW_AT_location
267271
; CHECK-NEXT: .b8 144
268272
; CHECK-NEXT: .b8 177
@@ -273,9 +277,9 @@ entry:
273277
; CHECK-NEXT: .b8 0
274278
; CHECK-NEXT: .b8 1 // DW_AT_decl_file
275279
; CHECK-NEXT: .b8 3 // DW_AT_decl_line
276-
; CHECK-NEXT: .b32 191 // DW_AT_type
280+
; CHECK-NEXT: .b32 193 // DW_AT_type
277281
; CHECK-NEXT: .b8 0 // End Of Children Mark
278-
; CHECK-NEXT: .b8 4 // Abbrev [4] 0xbf:0x7 DW_TAG_base_type
282+
; CHECK-NEXT: .b8 4 // Abbrev [4] 0xc1:0x7 DW_TAG_base_type
279283
; CHECK-NEXT: .b8 105 // DW_AT_name
280284
; CHECK-NEXT: .b8 110
281285
; CHECK-NEXT: .b8 116

llvm/test/DebugInfo/NVPTX/debug-addr-class.ll

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,8 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata)
160160
; CHECK-NEXT:.b8 5 // Abbreviation Code
161161
; CHECK-NEXT:.b8 5 // DW_TAG_formal_parameter
162162
; CHECK-NEXT:.b8 0 // DW_CHILDREN_no
163+
; CHECK-NEXT:.b8 51 // DW_AT_address_class
164+
; CHECK-NEXT:.b8 11 // DW_FORM_data1
163165
; CHECK-NEXT:.b8 2 // DW_AT_location
164166
; CHECK-NEXT:.b8 10 // DW_FORM_block1
165167
; CHECK-NEXT:.b8 3 // DW_AT_name
@@ -193,15 +195,15 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata)
193195
; CHECK-NEXT:.b8 0 // EOM(1)
194196
; CHECK-NEXT:.b8 0 // EOM(2)
195197
; CHECK-NEXT:.b8 0 // EOM(3)
196-
; CHECK-NEXT: }
197-
; CHECK-NEXT: .section .debug_info
198-
; CHECK-NEXT: {
199-
; CHECK-NEXT:.b32 252 // Length of Unit
198+
; CHECK-NEXT: }
199+
; CHECK-NEXT: .section .debug_info
200+
; CHECK-NEXT: {
201+
; CHECK-NEXT:.b32 254 // Length of Unit
200202
; CHECK-NEXT:.b8 2 // DWARF version number
201203
; CHECK-NEXT:.b8 0
202204
; CHECK-NEXT:.b32 .debug_abbrev // Offset Into Abbrev. Section
203205
; CHECK-NEXT:.b8 8 // Address Size (in bytes)
204-
; CHECK-NEXT:.b8 1 // Abbrev [1] 0xb:0xf5 DW_TAG_compile_unit
206+
; CHECK-NEXT:.b8 1 // Abbrev [1] 0xb:0xf7 DW_TAG_compile_unit
205207
; CHECK-NEXT:.b8 99 // DW_AT_producer
206208
; CHECK-NEXT:.b8 108
207209
; CHECK-NEXT:.b8 97
@@ -313,7 +315,7 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata)
313315
; CHECK-NEXT:.b8 9 // DW_AT_location
314316
; CHECK-NEXT:.b8 3
315317
; CHECK-NEXT:.b64 SHARED
316-
; CHECK-NEXT:.b8 4 // Abbrev [4] 0xa0:0x51 DW_TAG_subprogram
318+
; CHECK-NEXT:.b8 4 // Abbrev [4] 0xa0:0x53 DW_TAG_subprogram
317319
; CHECK-NEXT:.b64 $L__func_begin0 // DW_AT_low_pc
318320
; CHECK-NEXT:.b64 $L__func_end0 // DW_AT_high_pc
319321
; CHECK-NEXT:.b8 1 // DW_AT_frame_base
@@ -331,7 +333,8 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata)
331333
; CHECK-NEXT:.b8 1 // DW_AT_decl_file
332334
; CHECK-NEXT:.b8 6 // DW_AT_decl_line
333335
; CHECK-NEXT:.b8 1 // DW_AT_external
334-
; CHECK-NEXT:.b8 5 // Abbrev [5] 0xc0:0xf DW_TAG_formal_parameter
336+
; CHECK-NEXT:.b8 5 // Abbrev [5] 0xc0:0x10 DW_TAG_formal_parameter
337+
; CHECK-NEXT:.b8 2 // DW_AT_address_class
335338
; CHECK-NEXT:.b8 5 // DW_AT_location
336339
; CHECK-NEXT:.b8 144
337340
; CHECK-NEXT:.b8 177
@@ -342,20 +345,21 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata)
342345
; CHECK-NEXT:.b8 0
343346
; CHECK-NEXT:.b8 1 // DW_AT_decl_file
344347
; CHECK-NEXT:.b8 6 // DW_AT_decl_line
345-
; CHECK-NEXT:.b32 241 // DW_AT_type
346-
; CHECK-NEXT:.b8 6 // Abbrev [6] 0xcf:0x9 DW_TAG_formal_parameter
348+
; CHECK-NEXT:.b32 243 // DW_AT_type
349+
; CHECK-NEXT:.b8 6 // Abbrev [6] 0xd0:0x9 DW_TAG_formal_parameter
347350
; CHECK-NEXT:.b8 120 // DW_AT_name
348351
; CHECK-NEXT:.b8 0
349352
; CHECK-NEXT:.b8 1 // DW_AT_decl_file
350353
; CHECK-NEXT:.b8 6 // DW_AT_decl_line
351-
; CHECK-NEXT:.b32 250 // DW_AT_type
352-
; CHECK-NEXT:.b8 6 // Abbrev [6] 0xd8:0x9 DW_TAG_formal_parameter
354+
; CHECK-NEXT:.b32 252 // DW_AT_type
355+
; CHECK-NEXT:.b8 6 // Abbrev [6] 0xd9:0x9 DW_TAG_formal_parameter
353356
; CHECK-NEXT:.b8 121 // DW_AT_name
354357
; CHECK-NEXT:.b8 0
355358
; CHECK-NEXT:.b8 1 // DW_AT_decl_file
356359
; CHECK-NEXT:.b8 6 // DW_AT_decl_line
357-
; CHECK-NEXT:.b32 250 // DW_AT_type
358-
; CHECK-NEXT:.b8 5 // Abbrev [5] 0xe1:0xf DW_TAG_formal_parameter
360+
; CHECK-NEXT:.b32 252 // DW_AT_type
361+
; CHECK-NEXT:.b8 5 // Abbrev [5] 0xe2:0x10 DW_TAG_formal_parameter
362+
; CHECK-NEXT:.b8 2 // DW_AT_address_class
359363
; CHECK-NEXT:.b8 5 // DW_AT_location
360364
; CHECK-NEXT:.b8 144
361365
; CHECK-NEXT:.b8 177
@@ -368,7 +372,7 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata)
368372
; CHECK-NEXT:.b8 6 // DW_AT_decl_line
369373
; CHECK-NEXT:.b32 127 // DW_AT_type
370374
; CHECK-NEXT:.b8 0 // End Of Children Mark
371-
; CHECK-NEXT:.b8 3 // Abbrev [3] 0xf1:0x9 DW_TAG_base_type
375+
; CHECK-NEXT:.b8 3 // Abbrev [3] 0xf3:0x9 DW_TAG_base_type
372376
; CHECK-NEXT:.b8 102 // DW_AT_name
373377
; CHECK-NEXT:.b8 108
374378
; CHECK-NEXT:.b8 111
@@ -377,8 +381,8 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata)
377381
; CHECK-NEXT:.b8 0
378382
; CHECK-NEXT:.b8 4 // DW_AT_encoding
379383
; CHECK-NEXT:.b8 4 // DW_AT_byte_size
380-
; CHECK-NEXT:.b8 7 // Abbrev [7] 0xfa:0x5 DW_TAG_pointer_type
381-
; CHECK-NEXT:.b32 241 // DW_AT_type
384+
; CHECK-NEXT:.b8 7 // Abbrev [7] 0xfc:0x5 DW_TAG_pointer_type
385+
; CHECK-NEXT:.b32 243 // DW_AT_type
382386
; CHECK-NEXT:.b8 0 // End Of Children Mark
383387
; CHECK-NEXT: }
384388
; CHECK-NEXT: .section .debug_loc { }

0 commit comments

Comments
 (0)