Skip to content

Commit

Permalink
[DEBUGINFO, NVPTX] Set DW_AT_frame_base to DW_OP_call_frame_cfa.
Browse files Browse the repository at this point in the history
Summary:
For NVPTX target the value of `DW_AT_frame_base` attribute must be set
to `DW_OP_call_frame_cfa`.

Reviewers: tra, jlebar, echristo

Subscribers: jholewinski, JDevlieghere, llvm-commits

Differential Revision: https://reviews.llvm.org/D45785

llvm-svn: 338036
  • Loading branch information
alexey-bataev committed Jul 26, 2018
1 parent 3d26f12 commit 7ae86fe
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 49 deletions.
14 changes: 10 additions & 4 deletions llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
Expand Up @@ -327,10 +327,16 @@ DIE &DwarfCompileUnit::updateSubprogramScopeDIE(const DISubprogram *SP) {

// Only include DW_AT_frame_base in full debug info
if (!includeMinimalInlineScopes()) {
const TargetRegisterInfo *RI = Asm->MF->getSubtarget().getRegisterInfo();
MachineLocation Location(RI->getFrameRegister(*Asm->MF));
if (RI->isPhysicalRegister(Location.getReg()))
addAddress(*SPDie, dwarf::DW_AT_frame_base, Location);
if (Asm->MF->getTarget().getTargetTriple().isNVPTX()) {
DIELoc *Loc = new (DIEValueAllocator) DIELoc;
addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_call_frame_cfa);
addBlock(*SPDie, dwarf::DW_AT_frame_base, Loc);
} else {
const TargetRegisterInfo *RI = Asm->MF->getSubtarget().getRegisterInfo();
MachineLocation Location(RI->getFrameRegister(*Asm->MF));
if (RI->isPhysicalRegister(Location.getReg()))
addAddress(*SPDie, dwarf::DW_AT_frame_base, Location);
}
}

// Add name to the name table, we do this here because we're guaranteed
Expand Down
28 changes: 17 additions & 11 deletions llvm/test/DebugInfo/NVPTX/cu-range-hole.ll
Expand Up @@ -98,6 +98,8 @@ entry:
; CHECK: // .b8 1 // DW_FORM_addr
; CHECK: // .b8 18 // DW_AT_high_pc
; CHECK: // .b8 1 // DW_FORM_addr
; CHECK: // .b8 64 // DW_AT_frame_base
; CHECK: // .b8 10 // DW_FORM_block1
; CHECK: // .b8 3 // DW_AT_name
; CHECK: // .b8 8 // DW_FORM_string
; CHECK: // .b8 58 // DW_AT_decl_file
Expand Down Expand Up @@ -140,12 +142,12 @@ entry:
; CHECK: // }
; CHECK: // .section .debug_info
; CHECK: // {
; CHECK: // .b32 179 // Length of Unit
; CHECK: // .b32 183 // 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:0xac DW_TAG_compile_unit
; CHECK: // .b8 1 // Abbrev [1] 0xb:0xb0 DW_TAG_compile_unit
; CHECK: // .b8 99 // DW_AT_producer
; CHECK: // .b8 108
; CHECK: // .b8 97
Expand Down Expand Up @@ -218,41 +220,45 @@ entry:
; CHECK: // .b8 0
; CHECK: // .b64 Lfunc_begin0 // DW_AT_low_pc
; CHECK: // .b64 Lfunc_end2 // DW_AT_high_pc
; CHECK: // .b8 2 // Abbrev [2] 0x65:0x25 DW_TAG_subprogram
; CHECK: // .b8 2 // Abbrev [2] 0x65:0x27 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
; CHECK: // .b8 156
; CHECK: // .b8 98 // DW_AT_name
; CHECK: // .b8 0
; CHECK: // .b8 1 // DW_AT_decl_file
; CHECK: // .b8 1 // DW_AT_decl_line
; CHECK: // .b8 1 // DW_AT_prototyped
; CHECK: // .b32 175 // DW_AT_type
; CHECK: // .b32 179 // DW_AT_type
; CHECK: // .b8 1 // DW_AT_external
; CHECK: // .b8 3 // Abbrev [3] 0x80:0x9 DW_TAG_formal_parameter
; CHECK: // .b8 3 // Abbrev [3] 0x82:0x9 DW_TAG_formal_parameter
; CHECK: // .b8 99 // DW_AT_name
; CHECK: // .b8 0
; CHECK: // .b8 1 // DW_AT_decl_file
; CHECK: // .b8 1 // DW_AT_decl_line
; CHECK: // .b32 175 // DW_AT_type
; CHECK: // .b32 179 // DW_AT_type
; CHECK: // .b8 0 // End Of Children Mark
; CHECK: // .b8 2 // Abbrev [2] 0x8a:0x25 DW_TAG_subprogram
; CHECK: // .b8 2 // Abbrev [2] 0x8c:0x27 DW_TAG_subprogram
; CHECK: // .b64 Lfunc_begin2 // DW_AT_low_pc
; CHECK: // .b64 Lfunc_end2 // DW_AT_high_pc
; CHECK: // .b8 1 // DW_AT_frame_base
; CHECK: // .b8 156
; CHECK: // .b8 100 // DW_AT_name
; CHECK: // .b8 0
; CHECK: // .b8 1 // DW_AT_decl_file
; CHECK: // .b8 3 // DW_AT_decl_line
; CHECK: // .b8 1 // DW_AT_prototyped
; CHECK: // .b32 175 // DW_AT_type
; CHECK: // .b32 179 // DW_AT_type
; CHECK: // .b8 1 // DW_AT_external
; CHECK: // .b8 3 // Abbrev [3] 0xa5:0x9 DW_TAG_formal_parameter
; CHECK: // .b8 3 // Abbrev [3] 0xa9:0x9 DW_TAG_formal_parameter
; CHECK: // .b8 101 // DW_AT_name
; CHECK: // .b8 0
; CHECK: // .b8 1 // DW_AT_decl_file
; CHECK: // .b8 3 // DW_AT_decl_line
; CHECK: // .b32 175 // DW_AT_type
; CHECK: // .b32 179 // DW_AT_type
; CHECK: // .b8 0 // End Of Children Mark
; CHECK: // .b8 4 // Abbrev [4] 0xaf:0x7 DW_TAG_base_type
; CHECK: // .b8 4 // Abbrev [4] 0xb3:0x7 DW_TAG_base_type
; CHECK: // .b8 105 // DW_AT_name
; CHECK: // .b8 110
; CHECK: // .b8 116
Expand Down
22 changes: 13 additions & 9 deletions llvm/test/DebugInfo/NVPTX/dbg-declare-alloca.ll
Expand Up @@ -51,6 +51,8 @@
; CHECK: // .b8 1 // DW_FORM_addr
; CHECK: // .b8 18 // DW_AT_high_pc
; CHECK: // .b8 1 // DW_FORM_addr
; CHECK: // .b8 64 // DW_AT_frame_base
; CHECK: // .b8 10 // DW_FORM_block1
; CHECK: // .b8 3 // DW_AT_name
; CHECK: // .b8 8 // DW_FORM_string
; CHECK: // .b8 58 // DW_AT_decl_file
Expand Down Expand Up @@ -121,12 +123,12 @@
; CHECK: // }
; CHECK: // .section .debug_info
; CHECK: // {
; CHECK: // .b32 124 // Length of Unit
; CHECK: // .b32 126 // 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:0x75 DW_TAG_compile_unit
; CHECK: // .b8 1 // Abbrev [1] 0xb:0x77 DW_TAG_compile_unit
; CHECK: // .b8 99 // DW_AT_producer
; CHECK: // .b8 108
; CHECK: // .b8 97
Expand All @@ -147,9 +149,11 @@
; 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:0x32 DW_TAG_subprogram
; CHECK: // .b8 2 // Abbrev [2] 0x31:0x34 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
; CHECK: // .b8 156
; CHECK: // .b8 117 // DW_AT_name
; CHECK: // .b8 115
; CHECK: // .b8 101
Expand All @@ -170,35 +174,35 @@
; CHECK: // .b8 3 // DW_AT_decl_line
; CHECK: // .b8 1 // DW_AT_prototyped
; CHECK: // .b8 1 // DW_AT_external
; CHECK: // .b8 3 // Abbrev [3] 0x56:0xc DW_TAG_variable
; CHECK: // .b8 3 // Abbrev [3] 0x58:0xc DW_TAG_variable
; CHECK: // .b8 2 // DW_AT_location
; CHECK: // .b8 35
; CHECK: // .b8 8
; 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 99 // DW_AT_type
; CHECK: // .b32 101 // DW_AT_type
; CHECK: // .b8 0 // End Of Children Mark
; CHECK: // .b8 4 // Abbrev [4] 0x63:0x15 DW_TAG_structure_type
; CHECK: // .b8 4 // Abbrev [4] 0x65:0x15 DW_TAG_structure_type
; CHECK: // .b8 70 // DW_AT_name
; CHECK: // .b8 111
; CHECK: // .b8 111
; CHECK: // .b8 0
; 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] 0x6b:0xc DW_TAG_member
; CHECK: // .b8 5 // Abbrev [5] 0x6d:0xc DW_TAG_member
; CHECK: // .b8 120 // DW_AT_name
; CHECK: // .b8 0
; CHECK: // .b32 120 // DW_AT_type
; CHECK: // .b32 122 // 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] 0x78:0x7 DW_TAG_base_type
; CHECK: // .b8 6 // Abbrev [6] 0x7a:0x7 DW_TAG_base_type
; CHECK: // .b8 105 // DW_AT_name
; CHECK: // .b8 110
; CHECK: // .b8 116
Expand Down
30 changes: 17 additions & 13 deletions llvm/test/DebugInfo/NVPTX/debug-info.ll
Expand Up @@ -629,6 +629,8 @@ if.end: ; preds = %if.then, %entry
; CHECK: // .b8 1 // DW_FORM_addr
; CHECK: // .b8 18 // DW_AT_high_pc
; CHECK: // .b8 1 // DW_FORM_addr
; CHECK: // .b8 64 // DW_AT_frame_base
; CHECK: // .b8 10 // DW_FORM_block1
; CHECK: // .b8 135 // DW_AT_MIPS_linkage_name
; CHECK: // .b8 64
; CHECK: // .b8 8 // DW_FORM_string
Expand Down Expand Up @@ -696,12 +698,12 @@ if.end: ; preds = %if.then, %entry
; CHECK: // }
; CHECK: // .section .debug_info
; CHECK: // {
; CHECK: // .b32 10023 // Length of Unit
; CHECK: // .b32 10025 // 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:0x2720 DW_TAG_compile_unit
; CHECK: // .b8 1 // Abbrev [1] 0xb:0x2722 DW_TAG_compile_unit
; CHECK: // .b8 0 // DW_AT_producer
; CHECK: // .b8 4 // DW_AT_language
; CHECK: // .b8 0
Expand Down Expand Up @@ -8300,9 +8302,11 @@ if.end: ; preds = %if.then, %entry
; CHECK: // .b8 3 // DW_AT_decl_line
; CHECK: // .b32 3345 // DW_AT_type
; CHECK: // .b8 0 // End Of Children Mark
; CHECK: // .b8 40 // Abbrev [40] 0x2671:0xb9 DW_TAG_subprogram
; CHECK: // .b8 40 // Abbrev [40] 0x2671:0xbb 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
; CHECK: // .b8 156
; CHECK: // .b8 95 // DW_AT_MIPS_linkage_name
; CHECK: // .b8 90
; CHECK: // .b8 53
Expand All @@ -8327,61 +8331,61 @@ if.end: ; preds = %if.then, %entry
; CHECK: // .b8 12 // DW_AT_decl_file
; CHECK: // .b8 5 // DW_AT_decl_line
; CHECK: // .b8 1 // DW_AT_external
; CHECK: // .b8 39 // Abbrev [39] 0x269a:0x9 DW_TAG_formal_parameter
; CHECK: // .b8 39 // Abbrev [39] 0x269c:0x9 DW_TAG_formal_parameter
; CHECK: // .b8 110 // DW_AT_name
; CHECK: // .b8 0
; CHECK: // .b8 12 // DW_AT_decl_file
; CHECK: // .b8 5 // DW_AT_decl_line
; CHECK: // .b32 2332 // DW_AT_type
; CHECK: // .b8 39 // Abbrev [39] 0x26a3:0x9 DW_TAG_formal_parameter
; CHECK: // .b8 39 // Abbrev [39] 0x26a5:0x9 DW_TAG_formal_parameter
; CHECK: // .b8 97 // DW_AT_name
; CHECK: // .b8 0
; CHECK: // .b8 12 // DW_AT_decl_file
; CHECK: // .b8 5 // DW_AT_decl_line
; CHECK: // .b32 1554 // DW_AT_type
; CHECK: // .b8 39 // Abbrev [39] 0x26ac:0x9 DW_TAG_formal_parameter
; CHECK: // .b8 39 // Abbrev [39] 0x26ae:0x9 DW_TAG_formal_parameter
; CHECK: // .b8 120 // DW_AT_name
; CHECK: // .b8 0
; CHECK: // .b8 12 // DW_AT_decl_file
; CHECK: // .b8 5 // DW_AT_decl_line
; CHECK: // .b32 3345 // DW_AT_type
; CHECK: // .b8 39 // Abbrev [39] 0x26b5:0x9 DW_TAG_formal_parameter
; CHECK: // .b8 39 // Abbrev [39] 0x26b7:0x9 DW_TAG_formal_parameter
; CHECK: // .b8 121 // DW_AT_name
; CHECK: // .b8 0
; CHECK: // .b8 12 // DW_AT_decl_file
; CHECK: // .b8 5 // DW_AT_decl_line
; CHECK: // .b32 3345 // DW_AT_type
; CHECK: // .b8 41 // Abbrev [41] 0x26be:0x9 DW_TAG_variable
; CHECK: // .b8 41 // Abbrev [41] 0x26c0:0x9 DW_TAG_variable
; CHECK: // .b8 105 // DW_AT_name
; CHECK: // .b8 0
; CHECK: // .b8 12 // DW_AT_decl_file
; CHECK: // .b8 6 // DW_AT_decl_line
; CHECK: // .b32 2332 // DW_AT_type
; CHECK: // .b8 42 // Abbrev [42] 0x26c7:0x17 DW_TAG_inlined_subroutine
; CHECK: // .b8 42 // Abbrev [42] 0x26c9:0x17 DW_TAG_inlined_subroutine
; CHECK: // .b32 8432 // DW_AT_abstract_origin
; CHECK: // .b64 Ltmp0 // DW_AT_low_pc
; CHECK: // .b64 Ltmp1 // DW_AT_high_pc
; CHECK: // .b8 12 // DW_AT_call_file
; CHECK: // .b8 6 // DW_AT_call_line
; CHECK: // .b8 42 // Abbrev [42] 0x26de:0x17 DW_TAG_inlined_subroutine
; CHECK: // .b8 42 // Abbrev [42] 0x26e0:0x17 DW_TAG_inlined_subroutine
; CHECK: // .b32 9191 // DW_AT_abstract_origin
; CHECK: // .b64 Ltmp1 // DW_AT_low_pc
; CHECK: // .b64 Ltmp2 // DW_AT_high_pc
; CHECK: // .b8 12 // DW_AT_call_file
; CHECK: // .b8 6 // DW_AT_call_line
; CHECK: // .b8 42 // Abbrev [42] 0x26f5:0x17 DW_TAG_inlined_subroutine
; CHECK: // .b8 42 // Abbrev [42] 0x26f7:0x17 DW_TAG_inlined_subroutine
; CHECK: // .b32 9785 // DW_AT_abstract_origin
; CHECK: // .b64 Ltmp2 // DW_AT_low_pc
; CHECK: // .b64 Ltmp3 // DW_AT_high_pc
; CHECK: // .b8 12 // DW_AT_call_file
; CHECK: // .b8 6 // DW_AT_call_line
; CHECK: // .b8 43 // Abbrev [43] 0x270c:0x1d DW_TAG_inlined_subroutine
; CHECK: // .b8 43 // Abbrev [43] 0x270e:0x1d DW_TAG_inlined_subroutine
; CHECK: // .b32 9791 // DW_AT_abstract_origin
; CHECK: // .b64 Ltmp8 // DW_AT_low_pc
; CHECK: // .b64 Ltmp9 // DW_AT_high_pc
; CHECK: // .b8 12 // DW_AT_call_file
; CHECK: // .b8 8 // DW_AT_call_line
; CHECK: // .b8 44 // Abbrev [44] 0x2723:0x5 DW_TAG_formal_parameter
; CHECK: // .b8 44 // Abbrev [44] 0x2725:0x5 DW_TAG_formal_parameter
; CHECK: // .b32 9820 // DW_AT_abstract_origin
; CHECK: // .b8 0 // End Of Children Mark
; CHECK: // .b8 0 // End Of Children Mark
Expand Down

0 comments on commit 7ae86fe

Please sign in to comment.