[DEBUGINFO, NVPTX] Set `DW_AT_frame_base` to `DW_OP_call_frame_cfa`.
authorAlexey Bataev <a.bataev@hotmail.com>
Thu, 26 Jul 2018 16:10:05 +0000 (16:10 +0000)
committerAlexey Bataev <a.bataev@hotmail.com>
Thu, 26 Jul 2018 16:10:05 +0000 (16:10 +0000)
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

llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
llvm/test/DebugInfo/NVPTX/cu-range-hole.ll
llvm/test/DebugInfo/NVPTX/dbg-declare-alloca.ll
llvm/test/DebugInfo/NVPTX/debug-info.ll
llvm/test/DebugInfo/NVPTX/debug-loc-offset.ll

index cf941a9..aec161c 100644 (file)
@@ -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
index 30fa2d0..a1f1b21 100644 (file)
@@ -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
@@ -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
@@ -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
index e741376..be9ef26 100644 (file)
@@ -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
 ; 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
 ; 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
 ; 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 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 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
index 48cda91..fcc6343 100644 (file)
@@ -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
@@ -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
@@ -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
@@ -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
index 7cf4ab3..e836f96 100644 (file)
@@ -164,6 +164,8 @@ attributes #2 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "n
 ; 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
@@ -197,6 +199,8 @@ attributes #2 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "n
 ; 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
@@ -240,12 +244,12 @@ attributes #2 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "n
 ; CHECK: // }
 ; CHECK: // .section .debug_info
 ; CHECK: // {
-; CHECK: // .b32 148                             // Length of Unit
+; CHECK: // .b32 150                             // 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:0x8d DW_TAG_compile_unit
+; CHECK: // .b8 1                                // Abbrev [1] 0xb:0x8f DW_TAG_compile_unit
 ; CHECK: // .b8 99                               // DW_AT_producer
 ; CHECK: // .b8 108
 ; CHECK: // .b8 97
@@ -321,9 +325,11 @@ attributes #2 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "n
 ; CHECK: // .b8 65                               // DW_AT_name
 ; CHECK: // .b8 0
 ; CHECK: // .b8 1                                // DW_AT_declaration
-; CHECK: // .b8 3                                // Abbrev [3] 0x68:0x2f DW_TAG_subprogram
+; CHECK: // .b8 3                                // Abbrev [3] 0x68:0x31 DW_TAG_subprogram
 ; CHECK: // .b64 Lfunc_begin1                    // DW_AT_low_pc
 ; CHECK: // .b64 Lfunc_end1                      // 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 51
@@ -340,20 +346,20 @@ attributes #2 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "n
 ; CHECK: // .b8 2                                // DW_AT_decl_file
 ; CHECK: // .b8 6                                // DW_AT_decl_line
 ; CHECK: // .b8 1                                // DW_AT_external
-; CHECK: // .b8 4                                // Abbrev [4] 0x89:0xd DW_TAG_variable
+; CHECK: // .b8 4                                // Abbrev [4] 0x8b:0xd DW_TAG_variable
 ; CHECK: // .b8 122                              // DW_AT_name
 ; CHECK: // .b8 0
 ; CHECK: // .b8 2                                // DW_AT_decl_file
 ; CHECK: // .b8 7                                // DW_AT_decl_line
-; CHECK: // .b64 .debug_info+298                 // DW_AT_type
+; CHECK: // .b64 .debug_info+302                 // DW_AT_type
 ; CHECK: // .b8 0                                // End Of Children Mark
 ; CHECK: // .b8 0                                // End Of Children Mark
-; CHECK: // .b32 150                             // Length of Unit
+; CHECK: // .b32 152                             // 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:0x8f DW_TAG_compile_unit
+; CHECK: // .b8 1                                // Abbrev [1] 0xb:0x91 DW_TAG_compile_unit
 ; CHECK: // .b8 99                               // DW_AT_producer
 ; CHECK: // .b8 108
 ; CHECK: // .b8 97
@@ -425,9 +431,11 @@ attributes #2 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "n
 ; CHECK: // .b8 0
 ; CHECK: // .b64 Lfunc_begin0                    // DW_AT_low_pc
 ; CHECK: // .b64 Lfunc_end0                      // DW_AT_high_pc
-; CHECK: // .b8 5                                // Abbrev [5] 0x64:0x2e DW_TAG_subprogram
+; CHECK: // .b8 5                                // Abbrev [5] 0x64:0x30 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 51
@@ -442,16 +450,16 @@ attributes #2 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "n
 ; CHECK: // .b8 0
 ; CHECK: // .b8 1                                // DW_AT_decl_file
 ; CHECK: // .b8 1                                // DW_AT_decl_line
-; CHECK: // .b32 146                             // DW_AT_type
+; CHECK: // .b32 148                             // DW_AT_type
 ; CHECK: // .b8 1                                // DW_AT_external
-; CHECK: // .b8 6                                // Abbrev [6] 0x88:0x9 DW_TAG_formal_parameter
+; CHECK: // .b8 6                                // Abbrev [6] 0x8a:0x9 DW_TAG_formal_parameter
 ; CHECK: // .b8 98                               // DW_AT_name
 ; CHECK: // .b8 0
 ; CHECK: // .b8 1                                // DW_AT_decl_file
 ; CHECK: // .b8 1                                // DW_AT_decl_line
-; CHECK: // .b32 146                             // DW_AT_type
+; CHECK: // .b32 148                             // DW_AT_type
 ; CHECK: // .b8 0                                // End Of Children Mark
-; CHECK: // .b8 7                                // Abbrev [7] 0x92:0x7 DW_TAG_base_type
+; CHECK: // .b8 7                                // Abbrev [7] 0x94:0x7 DW_TAG_base_type
 ; CHECK: // .b8 105                              // DW_AT_name
 ; CHECK: // .b8 110
 ; CHECK: // .b8 116