dzhidzhoev updated this revision to Diff 522254.
dzhidzhoev added a comment.
Herald added subscribers: mattd, gchakrabarti, asavonic, kerbowa, jvesely, 
jholewinski.

Fixed split-dwarf-local-import*.ll tests.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D144004/new/

https://reviews.llvm.org/D144004

Files:
  llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
  llvm/test/CodeGen/AMDGPU/dwarf-multi-register-use-crash.ll
  llvm/test/DebugInfo/Generic/cross-cu-linkonce-distinct.ll
  llvm/test/DebugInfo/Generic/debug-info-qualifiers.ll
  llvm/test/DebugInfo/Generic/enum-types.ll
  llvm/test/DebugInfo/Generic/incorrect-variable-debugloc.ll
  llvm/test/DebugInfo/Generic/local-type-as-template-parameter.ll
  llvm/test/DebugInfo/Generic/namespace.ll
  llvm/test/DebugInfo/Generic/varargs.ll
  llvm/test/DebugInfo/MIR/AArch64/implicit-def-dead-scope.mir
  llvm/test/DebugInfo/NVPTX/debug-loc-offset.ll
  llvm/test/DebugInfo/X86/align_cpp11.ll
  llvm/test/DebugInfo/X86/debug-info-blocks.ll
  llvm/test/DebugInfo/X86/debug-loc-offset.mir
  llvm/test/DebugInfo/X86/generate-odr-hash.ll
  llvm/test/DebugInfo/X86/gnu-public-names.ll
  llvm/test/DebugInfo/X86/ref_addr_relocation.ll
  llvm/test/DebugInfo/X86/sret.ll
  llvm/test/DebugInfo/X86/string-offsets-multiple-cus.ll
  llvm/test/DebugInfo/X86/string-offsets-table.ll
  llvm/test/DebugInfo/X86/subprogram-across-cus.ll

Index: llvm/test/DebugInfo/X86/subprogram-across-cus.ll
===================================================================
--- llvm/test/DebugInfo/X86/subprogram-across-cus.ll
+++ llvm/test/DebugInfo/X86/subprogram-across-cus.ll
@@ -35,12 +35,12 @@
 ; Check that there are no verifier failures, and that the SP for "main" appears
 ; in the correct CU.
 ; CHECK-LABEL:      DW_TAG_compile_unit
-; CHECK:              DW_AT_name ("1.cpp")
-; CHECK-NOT:          DW_AT_name ("main")
-; CHECK-LABEL:      DW_TAG_compile_unit
 ; CHECK:              DW_AT_name ("2.cpp")
 ; CHECK:            DW_TAG_subprogram
 ; CHECK:              DW_AT_name ("main")
+; CHECK-LABEL:      DW_TAG_compile_unit
+; CHECK:              DW_AT_name ("1.cpp")
+; CHECK-NOT:          DW_AT_name ("main")
 
 source_filename = "ld-temp.o"
 target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
Index: llvm/test/DebugInfo/X86/string-offsets-table.ll
===================================================================
--- llvm/test/DebugInfo/X86/string-offsets-table.ll
+++ llvm/test/DebugInfo/X86/string-offsets-table.ll
@@ -72,11 +72,11 @@
 ; SPLIT-NOT:  contents:
 ; SPLIT:      DW_TAG_enumerator
 ; SPLIT-NOT:  {{DW_TAG|NULL}}
-; SPLIT:      DW_AT_name [DW_FORM_strx1]    (indexed (00000000) string = "a")
+; SPLIT:      DW_AT_name [DW_FORM_strx1]    (indexed (00000001) string = "a")
 ; SPLIT-NOT:  contents:
 ; SPLIT:      DW_TAG_enumerator
 ; SPLIT-NOT:  {{DW_TAG|NULL}}
-; SPLIT:      DW_AT_name [DW_FORM_strx1]    (indexed (00000001) string = "b")
+; SPLIT:      DW_AT_name [DW_FORM_strx1]    (indexed (00000002) string = "b")
 ;
 ; Extract the string offsets referenced in the main file by the skeleton unit.
 ; SPLIT:      .debug_str contents:
Index: llvm/test/DebugInfo/X86/string-offsets-multiple-cus.ll
===================================================================
--- llvm/test/DebugInfo/X86/string-offsets-multiple-cus.ll
+++ llvm/test/DebugInfo/X86/string-offsets-multiple-cus.ll
@@ -42,21 +42,21 @@
 ; TYPEUNITS-NOT:  NULL
 ; TYPEUNITS:      DW_TAG_enumerator
 ; TYPEUNITS-NOT:  {{DW_TAG|NULL}}
-; TYPEUNITS:      DW_AT_name [DW_FORM_strx1] (indexed (00000004) string = "b")
+; TYPEUNITS:      DW_AT_name [DW_FORM_strx1] (indexed (00000005) string = "b")
 ; TYPEUNITS-NOT:  contents:
 ; TYPEUNITS:      DW_TAG_type_unit
 ; TYPEUNITS-NOT:  {{DW_TAG|NULL}}
 ; TYPEUNITS:      DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x[[CU1_STROFF]])
 ; TYPEUNITS-NOT:  NULL
 ; TYPEUNITS:      DW_TAG_enumeration_type
-; TYPEUNITS:      DW_AT_name [DW_FORM_strx1] (indexed (0000000b) string = "E2")
+; TYPEUNITS:      DW_AT_name [DW_FORM_strx1] (indexed (0000000d) string = "E2")
 ; TYPEUNITS-NOT:  contents:
 ; TYPEUNITS:      DW_TAG_type_unit
 ; TYPEUNITS-NOT:  {{DW_TAG|NULL}}
 ; TYPEUNITS:      DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x[[CU1_STROFF]])
 ; TYPEUNITS-NOT:  NULL
 ; TYPEUNITS:      DW_TAG_enumeration_type
-; TYPEUNITS:      DW_AT_name [DW_FORM_strx1] (indexed (00000010) string = "E3")
+; TYPEUNITS:      DW_AT_name [DW_FORM_strx1] (indexed (00000013) string = "E3")
 
 ; CU 1
 ; BOTH-NOT:    .contents:
@@ -70,20 +70,20 @@
 ; BOTH:        DW_TAG_compile_unit
 ; BOTH-NOT:    {{DW_TAG|NULL}}
 ; BOTH:        DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x[[CU1_STROFF]])
-; DEFUALT:     NULL
+; BOTH-NOT:    NULL
 ; BOTH:        DW_TAG_variable
 ; BOTH-NOT:    {{DW_TAG|NULL}}
-; BOTH:        DW_AT_name [DW_FORM_strx1] (indexed (00000012) string = "glob2")
+; BOTH:        DW_AT_name [DW_FORM_strx1] (indexed (00000009) string = "glob2")
 ;
 ; CU 3
 ; BOTH-NOT:    contents:
 ; BOTH:        DW_TAG_compile_unit
 ; BOTH-NOT:    {{DW_TAG|NULL}}
 ; BOTH:        DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x[[CU1_STROFF]])
-; DEFAULT:     NULL
+; BOTH-NOT:    NULL
 ; BOTH:        DW_TAG_variable
 ; BOTH-NOT:    {{DW_TAG|NULL}}
-; BOTH:        DW_AT_name [DW_FORM_strx1] (indexed (00000013) string = "glob3")
+; BOTH:        DW_AT_name [DW_FORM_strx1] (indexed (0000000f) string = "glob3")
 ;
 ; Extract the offset of a string to verify that it is referenced in the string
 ; offsets section.
@@ -104,16 +104,7 @@
 ; BOTH-NEXT:      {{.*:}}
 ; BOTH-NEXT:      {{.*:}}
 ; BOTH-NEXT:      {{.*:}}
-; BOTH-NEXT:      {{.*:}}
-; BOTH-NEXT:      {{.*:}}
-; BOTH-NEXT:      {{.*:}}
-; BOTH-NEXT:      {{.*:}}
-; BOTH-NEXT:      {{.*:}}
-; BOTH-NEXT:      {{.*:}}
-; BOTH-NEXT:      {{.*:}}
-; BOTH-NEXT:      {{.*:}}
-; BOTH-NEXT:      {{.*:}}
-; The string with index 12 should be "glob2"
+; The string with index 9 should be "glob2"
 ; BOTH-NEXT:      {{.*:}} [[GLOB2OFF]]
 ;
 ; ModuleID = 'test.bc'
Index: llvm/test/DebugInfo/X86/sret.ll
===================================================================
--- llvm/test/DebugInfo/X86/sret.ll
+++ llvm/test/DebugInfo/X86/sret.ll
@@ -3,8 +3,8 @@
 
 ; Based on the debuginfo-tests/sret.cpp code.
 
-; CHECK-DWO: DW_AT_GNU_dwo_id (0x7db1cc8453a47c44)
-; CHECK-DWO: DW_AT_GNU_dwo_id (0x7db1cc8453a47c44)
+; CHECK-DWO: DW_AT_GNU_dwo_id (0x1b2f2750df1fd599)
+; CHECK-DWO: DW_AT_GNU_dwo_id (0x1b2f2750df1fd599)
 
 ; RUN: llc -O0 -fast-isel=true -mtriple=x86_64-apple-darwin -filetype=obj -o - %s | llvm-dwarfdump -debug-info - | FileCheck -check-prefixes=CHECK,FASTISEL %s
 ; RUN: llc -O0 -fast-isel=false -mtriple=x86_64-apple-darwin -filetype=obj -o - %s | llvm-dwarfdump -debug-info - | FileCheck -check-prefixes=CHECK,SDAG %s
Index: llvm/test/DebugInfo/X86/ref_addr_relocation.ll
===================================================================
--- llvm/test/DebugInfo/X86/ref_addr_relocation.ll
+++ llvm/test/DebugInfo/X86/ref_addr_relocation.ll
@@ -33,12 +33,12 @@
 
 ; Make sure we use relocation for ref_addr on non-darwin platforms.
 ; CHECK: DW_TAG_compile_unit
-; CHECK: DW_TAG_structure_type
 ; CHECK: DW_TAG_variable
 ; ELF-ASM: .long [[TYPE:.*]] # DW_AT_type
 ; DARWIN-ASM2: .long [[TYPE:.*]] ## DW_AT_type
 ; DARWIN-ASM4: .long [[TYPE:.*]] ## DW_AT_type
 ; COFF-ASM: .long [[TYPE:.*]] # DW_AT_type
+; CHECK: DW_TAG_structure_type
 ; CHECK: cu_begin1
 ; CHECK: DW_TAG_compile_unit
 ; CHECK-NOT: DW_TAG_structure_type
@@ -60,9 +60,9 @@
 ; CHECK-DWARF: DW_AT_type [DW_FORM_ref_addr] {{.*}}[[ADDR]]
 
 ; CHECK-DWARF2: DW_TAG_compile_unit
-; CHECK-DWARF2: [[ADDR:.*]]: DW_TAG_structure_type
 ; CHECK-DWARF2: DW_TAG_variable
-; CHECK-DWARF2: DW_AT_type [DW_FORM_ref4] {{.*}} => {[[ADDR]]}
+; CHECK-DWARF2: DW_AT_type [DW_FORM_ref4] {{.*}} => {[[ADDR:.*]]}
+; CHECK-DWARF2: [[ADDR]]: DW_TAG_structure_type
 
 source_filename = "test/DebugInfo/X86/ref_addr_relocation.ll"
 
Index: llvm/test/DebugInfo/X86/gnu-public-names.ll
===================================================================
--- llvm/test/DebugInfo/X86/gnu-public-names.ll
+++ llvm/test/DebugInfo/X86/gnu-public-names.ll
@@ -71,7 +71,7 @@
 ; ASM-NEXT: .asciz  "global_variable"       # External Name
 
 ; ASM: .section        .debug_gnu_pubtypes
-; ASM: .long 109                       # DIE offset
+; ASM: .long 42                        # DIE offset
 ; ASM: .byte   16                      # Attributes: TYPE, EXTERNAL
 ; ASM-NEXT: .asciz  "C"                     # External Name
 
@@ -80,29 +80,6 @@
 ; CHECK:   DW_AT_GNU_pubnames (true)
 ; CHECK-NOT: DW_AT_GNU_pubtypes [
 
-; CHECK:   DW_TAG_enumeration
-; CHECK:     [[UNNAMED_ENUM_ENUMERATOR:0x[0-9a-f]+]]:  DW_TAG_enumerator
-; CHECK:       DW_AT_name ("unnamed_enum_enumerator")
-; CHECK:     NULL
-
-; CHECK:   [[UNSIGNED_INT:0x[0-9a-f]+]]: DW_TAG_base_type
-; CHECK:     DW_AT_name ("unsigned int")
-
-; CHECK:   [[NAMED_ENUM:0x[0-9a-f]+]]: DW_TAG_enumeration
-; CHECK:     DW_AT_name ("named_enum")
-; CHECK:     [[NAMED_ENUM_ENUMERATOR:0x[0-9a-f]+]]:  DW_TAG_enumerator
-; CHECK:       DW_AT_name ("named_enum_enumerator")
-; CHECK:     NULL
-
-; CHECK:   [[NAMED_ENUM_CLASS:0x[0-9a-f]+]]: DW_TAG_enumeration
-; CHECK:     DW_AT_name ("named_enum_class")
-; CHECK:     [[NAMED_ENUM_CLASS_ENUMERATOR:0x[0-9a-f]+]]:  DW_TAG_enumerator
-; CHECK:       DW_AT_name ("named_enum_class_enumerator")
-; CHECK:     NULL
-
-; CHECK:   [[INT:0x[0-9a-f]+]]: DW_TAG_base_type
-; CHECK:     DW_AT_name ("int")
-
 ; CHECK:   [[C:0x[0-9a-f]+]]: DW_TAG_structure_type
 ; CHECK:     DW_AT_name ("C")
 ; CHECK:     DW_TAG_member
@@ -117,6 +94,9 @@
 ; CHECK:       DW_AT_name ("static_member_function")
 ; CHECK:     NULL
 
+; CHECK:   [[INT:0x[0-9a-f]+]]: DW_TAG_base_type
+; CHECK:     DW_AT_name ("int")
+
 ; CHECK:   DW_TAG_pointer_type
 
 ; CHECK:   [[MEM_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram
@@ -190,6 +170,26 @@
 ; CHECK:       NULL
 ; CHECK:     NULL
 
+; CHECK:   DW_TAG_enumeration
+; CHECK:     [[UNNAMED_ENUM_ENUMERATOR:0x[0-9a-f]+]]:  DW_TAG_enumerator
+; CHECK:       DW_AT_name ("unnamed_enum_enumerator")
+; CHECK:     NULL
+
+; CHECK:   [[UNSIGNED_INT:0x[0-9a-f]+]]: DW_TAG_base_type
+; CHECK:     DW_AT_name ("unsigned int")
+
+; CHECK:   [[NAMED_ENUM:0x[0-9a-f]+]]: DW_TAG_enumeration
+; CHECK:     DW_AT_name ("named_enum")
+; CHECK:     [[NAMED_ENUM_ENUMERATOR:0x[0-9a-f]+]]:  DW_TAG_enumerator
+; CHECK:       DW_AT_name ("named_enum_enumerator")
+; CHECK:     NULL
+
+; CHECK:   [[NAMED_ENUM_CLASS:0x[0-9a-f]+]]: DW_TAG_enumeration
+; CHECK:     DW_AT_name ("named_enum_class")
+; CHECK:     [[NAMED_ENUM_CLASS_ENUMERATOR:0x[0-9a-f]+]]:  DW_TAG_enumerator
+; CHECK:       DW_AT_name ("named_enum_class_enumerator")
+; CHECK:     NULL
+
 ; CHECK:   DW_TAG_imported_declaration
 ; CHECK:   DW_TAG_pointer_type
 ; CHECK:   DW_TAG_pointer_type
@@ -203,16 +203,16 @@
 ; CHECK-NEXT:  [[MEM_FUNC]] EXTERNAL FUNCTION "C::member_function"
 ; CHECK-NEXT:  [[OUTER]] EXTERNAL TYPE "outer"
 ; CHECK-NEXT:  [[GLOB_NS_VAR]] EXTERNAL VARIABLE "ns::global_namespace_variable"
-; CHECK-NEXT:  [[NAMED_ENUM_CLASS_ENUMERATOR]] STATIC VARIABLE  "named_enum_class_enumerator"
+; CHECK-NEXT:  [[GLOB_VAR]] EXTERNAL VARIABLE "global_variable"
 ; CHECK-NEXT:  [[UNNAMED_ENUM_ENUMERATOR]] STATIC VARIABLE  "unnamed_enum_enumerator"
 ; CHECK-NEXT:  [[GLOBAL_F7]] EXTERNAL FUNCTION "f7"
-; CHECK-NEXT:  [[GLOB_VAR]] EXTERNAL VARIABLE "global_variable"
 ; CHECK-NEXT:  [[OUTER_ANON]] EXTERNAL TYPE "outer::(anonymous namespace)"
+; CHECK-NEXT:  [[NAMED_ENUM_CLASS_ENUMERATOR]] STATIC VARIABLE  "named_enum_class_enumerator"
 ; FIXME: GCC produces enumerators as EXTERNAL, not STATIC
 ; CHECK-NEXT:  [[GLOBAL_FUNC]] EXTERNAL FUNCTION "global_function"
 ; CHECK-NEXT:  [[GLOB_NS_FUNC]] EXTERNAL FUNCTION "ns::global_namespace_function"
-; CHECK-NEXT:  [[NAMED_ENUM_ENUMERATOR]] STATIC VARIABLE  "named_enum_enumerator"
 ; CHECK-NEXT:  [[NS]] EXTERNAL TYPE     "ns"
+; CHECK-NEXT:  [[NAMED_ENUM_ENUMERATOR]] STATIC VARIABLE  "named_enum_enumerator"
 ; CHECK-NEXT:  [[ANON]] EXTERNAL TYPE "(anonymous namespace)"
 ; CHECK-NEXT:  [[OUTER_ANON_C]] STATIC VARIABLE "outer::(anonymous namespace)::c"
 ; CHECK-NEXT:  [[D_VAR]] EXTERNAL VARIABLE "ns::d"
@@ -230,9 +230,9 @@
 ; CHECK-LABEL: debug_gnu_pubtypes contents:
 ; CHECK: Offset     Linkage  Kind     Name
 ; CHECK-NEXT:  [[INT]] STATIC   TYPE     "int"
+; CHECK-NEXT:  [[C]] EXTERNAL TYPE     "C"
 ; CHECK-NEXT:  [[UNSIGNED_INT]] STATIC   TYPE     "unsigned int"
 ; CHECK-NEXT:  [[NAMED_ENUM]] EXTERNAL TYPE     "named_enum"
-; CHECK-NEXT:  [[C]] EXTERNAL TYPE     "C"
 ; CHECK-NEXT:  [[NAMED_ENUM_CLASS]] EXTERNAL TYPE     "named_enum_class"
 ; CHECK-NEXT:  [[D]] EXTERNAL TYPE     "ns::D"
 
Index: llvm/test/DebugInfo/X86/generate-odr-hash.ll
===================================================================
--- llvm/test/DebugInfo/X86/generate-odr-hash.ll
+++ llvm/test/DebugInfo/X86/generate-odr-hash.ll
@@ -54,6 +54,15 @@
 ; FISSION-LABEL: .debug_info.dwo contents:
 ; CHECK: Compile Unit: length = [[CU_SIZE:[0-9a-f]+]]
 
+; CHECK: DW_TAG_structure_type
+
+; Ensure the CU-local type 'walrus' is not placed in a type unit.
+; CHECK: [[WALRUS:^0x........]]: DW_TAG_structure_type
+; CHECK-NEXT: DW_AT_name{{.*}}"walrus"
+; CHECK-NEXT: DW_AT_byte_size
+; CHECK-NEXT: DW_AT_decl_file
+; CHECK-NEXT: DW_AT_decl_line
+
 ; CHECK: [[BAR:^0x........]]: DW_TAG_structure_type
 ; CHECK-NEXT: DW_AT_declaration
 ; CHECK-NEXT: DW_AT_signature {{.*}} (0x1d02f3be30cc5688)
@@ -65,17 +74,6 @@
 ; CHECK-NEXT: DW_AT_declaration
 ; CHECK-NEXT: DW_AT_signature {{.*}} (0xfd756cee88f8a118)
 
-; CHECK: DW_TAG_structure_type
-
-; CHECK: DW_TAG_structure_type
-
-; Ensure the CU-local type 'walrus' is not placed in a type unit.
-; CHECK: [[WALRUS:^0x........]]: DW_TAG_structure_type
-; CHECK-NEXT: DW_AT_name{{.*}}"walrus"
-; CHECK-NEXT: DW_AT_byte_size
-; CHECK-NEXT: DW_AT_decl_file
-; CHECK-NEXT: DW_AT_decl_line
-
 ; SINGLE-LABEL: .debug_types contents:
 ; FISSION: .debug_types.dwo contents:
 
@@ -125,10 +123,10 @@
 ; CHECK-LABEL: .debug_line contents:
 ; CHECK: Line table prologue
 ; CHECK-NOT: file_names[
-; SINGLE: file_names[
-; SINGLE-NEXT: name: "bar.h"
 ; CHECK: file_names[
 ; CHECK-NEXT: name: "bar.cpp"
+; SINGLE: file_names[
+; SINGLE-NEXT: name: "bar.h"
 ; CHECK-NOT: file_names[
 
 ; FISSION: .debug_line.dwo contents:
Index: llvm/test/DebugInfo/X86/debug-loc-offset.mir
===================================================================
--- llvm/test/DebugInfo/X86/debug-loc-offset.mir
+++ llvm/test/DebugInfo/X86/debug-loc-offset.mir
@@ -32,38 +32,38 @@
 # Checking that we have two compile units with two sets of high/lo_pc.
 # CHECK: .debug_info contents
 # CHECK: DW_TAG_compile_unit
-# CHECK: DW_AT_low_pc {{.*}} (0x00000020 ".text")
+# CHECK: DW_AT_low_pc {{.*}} (0x00000000 ".text")
 # CHECK: DW_AT_high_pc
 #
 # CHECK: DW_TAG_subprogram
 # CHECK-NOT: DW_TAG
-# CHECK: DW_AT_linkage_name [DW_FORM_strp]{{.*}}"_Z3baz1A"
+# CHECK: DW_AT_linkage_name [DW_FORM_strp]{{.*}}"_Z3bari"
 # CHECK-NOT: {{DW_TAG|NULL}}
 # CHECK: DW_TAG_formal_parameter
 # CHECK-NOT: DW_TAG
 # CHECK:       DW_AT_location [DW_FORM_sec_offset]   ({{.*}}
-# CHECK-NEXT:    [0x00000029, 0x00000037) ".text": DW_OP_breg0 EAX+0, DW_OP_deref
-# CHECK-NEXT:    [0x00000037, 0x00000063) ".text": DW_OP_breg5 EBP-8, DW_OP_deref, DW_OP_deref
-# CHECK-NEXT:  DW_AT_name [DW_FORM_strp]{{.*}}"a"
-#
-# CHECK: DW_TAG_variable
-# CHECK: DW_AT_location [DW_FORM_exprloc]
-# CHECK-NOT: DW_AT_location
+# CHECK-NEXT:    [0x00000000, 0x0000000a) ".text": DW_OP_consts +0, DW_OP_stack_value
+# CHECK-NEXT:    [0x0000000a, 0x00000017) ".text": DW_OP_consts +1, DW_OP_stack_value)
+# CHECK-NEXT:  DW_AT_name [DW_FORM_strp]{{.*}}"b"
 #
 # CHECK: DW_TAG_compile_unit
-# CHECK: DW_AT_low_pc {{.*}} (0x00000000 ".text")
+# CHECK: DW_AT_low_pc {{.*}} (0x00000020 ".text")
 # CHECK: DW_AT_high_pc
 #
 # CHECK: DW_TAG_subprogram
 # CHECK-NOT: DW_TAG
-# CHECK: DW_AT_linkage_name [DW_FORM_strp]{{.*}}"_Z3bari"
+# CHECK: DW_AT_linkage_name [DW_FORM_strp]{{.*}}"_Z3baz1A"
 # CHECK-NOT: {{DW_TAG|NULL}}
 # CHECK: DW_TAG_formal_parameter
 # CHECK-NOT: DW_TAG
 # CHECK:       DW_AT_location [DW_FORM_sec_offset]   ({{.*}}
-# CHECK-NEXT:    [0x00000000, 0x0000000a) ".text": DW_OP_consts +0, DW_OP_stack_value
-# CHECK-NEXT:    [0x0000000a, 0x00000017) ".text": DW_OP_consts +1, DW_OP_stack_value)
-# CHECK-NEXT:  DW_AT_name [DW_FORM_strp]{{.*}}"b"
+# CHECK-NEXT:    [0x00000029, 0x00000037) ".text": DW_OP_breg0 EAX+0, DW_OP_deref
+# CHECK-NEXT:    [0x00000037, 0x00000063) ".text": DW_OP_breg5 EBP-8, DW_OP_deref, DW_OP_deref
+# CHECK-NEXT:  DW_AT_name [DW_FORM_strp]{{.*}}"a"
+#
+# CHECK: DW_TAG_variable
+# CHECK: DW_AT_location [DW_FORM_exprloc]
+# CHECK-NOT: DW_AT_location
 #
 # CHECK: .debug_loc contents:
 # CHECK:       0x00000000:
Index: llvm/test/DebugInfo/X86/debug-info-blocks.ll
===================================================================
--- llvm/test/DebugInfo/X86/debug-info-blocks.ll
+++ llvm/test/DebugInfo/X86/debug-info-blocks.ll
@@ -5,10 +5,6 @@
 ; rdar://problem/9279956
 ; test that the DW_AT_location of self is at ( fbreg +{{[0-9]+}}, deref, +{{[0-9]+}} )
 
-; CHECK: [[A:.*]]:   DW_TAG_structure_type
-; CHECK-NEXT: DW_AT_APPLE_objc_complete_type
-; CHECK-NEXT: DW_AT_name{{.*}}"A"
-
 ; CHECK: DW_TAG_subprogram
 ; CHECK: DW_TAG_subprogram
 ; CHECK: DW_TAG_subprogram
@@ -35,6 +31,10 @@
 ; CHECK-NOT: DW_TAG
 ; CHECK: DW_AT_artificial
 
+; CHECK: [[A:.*]]:   DW_TAG_structure_type
+; CHECK-NEXT: DW_AT_APPLE_objc_complete_type
+; CHECK-NEXT: DW_AT_name{{.*}}"A"
+
 ; CHECK: [[APTR]]:   DW_TAG_pointer_type
 ; CHECK-NEXT: {[[A]]}
 
Index: llvm/test/DebugInfo/X86/align_cpp11.ll
===================================================================
--- llvm/test/DebugInfo/X86/align_cpp11.ll
+++ llvm/test/DebugInfo/X86/align_cpp11.ll
@@ -33,12 +33,6 @@
 ;     auto Lambda = [i](){};
 ; }
 
-; CHECK:   DW_TAG_enumeration_type
-; CHECK:     DW_AT_alignment{{.*}}16
-; CHECK:       DW_TAG_enumerator
-; CHECK:       DW_TAG_enumerator
-; CHECK:       DW_TAG_enumerator
-
 ; CHECK:   DW_TAG_subprogram
 ; CHECK:     DW_TAG_variable
 ; CHECK:     DW_TAG_variable
@@ -68,6 +62,12 @@
 ; CHECK:       DW_AT_name{{.*}}"xx"
 ; CHECK:       DW_AT_alignment{{.*}}128
 
+; CHECK:   DW_TAG_enumeration_type
+; CHECK:     DW_AT_alignment{{.*}}16
+; CHECK:       DW_TAG_enumerator
+; CHECK:       DW_TAG_enumerator
+; CHECK:       DW_TAG_enumerator
+
 ; CHECK:   DW_TAG_class_type
 ; CHECK:     DW_AT_name{{.*}}"C1"
 ; CHECK:     DW_TAG_member
Index: llvm/test/DebugInfo/NVPTX/debug-loc-offset.ll
===================================================================
--- llvm/test/DebugInfo/NVPTX/debug-loc-offset.ll
+++ llvm/test/DebugInfo/NVPTX/debug-loc-offset.ll
@@ -154,15 +154,6 @@
 ; CHECK-NEXT: .b8 0                                // EOM(1)
 ; CHECK-NEXT: .b8 0                                // EOM(2)
 ; CHECK-NEXT: .b8 2                                // Abbreviation Code
-; CHECK-NEXT: .b8 19                               // DW_TAG_structure_type
-; CHECK-NEXT: .b8 0                                // DW_CHILDREN_no
-; CHECK-NEXT: .b8 3                                // DW_AT_name
-; CHECK-NEXT: .b8 8                                // DW_FORM_string
-; CHECK-NEXT: .b8 60                               // DW_AT_declaration
-; CHECK-NEXT: .b8 12                               // DW_FORM_flag
-; CHECK-NEXT: .b8 0                                // EOM(1)
-; CHECK-NEXT: .b8 0                                // EOM(2)
-; CHECK-NEXT: .b8 3                                // Abbreviation Code
 ; CHECK-NEXT: .b8 46                               // DW_TAG_subprogram
 ; CHECK-NEXT: .b8 1                                // DW_CHILDREN_yes
 ; CHECK-NEXT: .b8 17                               // DW_AT_low_pc
@@ -180,11 +171,13 @@
 ; CHECK-NEXT: .b8 11                               // DW_FORM_data1
 ; CHECK-NEXT: .b8 59                               // DW_AT_decl_line
 ; CHECK-NEXT: .b8 11                               // DW_FORM_data1
+; CHECK-NEXT: .b8 73                               // DW_AT_type
+; CHECK-NEXT: .b8 19                               // DW_FORM_ref4
 ; CHECK-NEXT: .b8 63                               // DW_AT_external
 ; CHECK-NEXT: .b8 12                               // DW_FORM_flag
 ; CHECK-NEXT: .b8 0                                // EOM(1)
 ; CHECK-NEXT: .b8 0                                // EOM(2)
-; CHECK-NEXT: .b8 4                                // Abbreviation Code
+; CHECK-NEXT: .b8 3                                // Abbreviation Code
 ; CHECK-NEXT: .b8 5                                // DW_TAG_formal_parameter
 ; CHECK-NEXT: .b8 0                                // DW_CHILDREN_no
 ; CHECK-NEXT: .b8 3                                // DW_AT_name
@@ -197,20 +190,18 @@
 ; CHECK-NEXT: .b8 19                               // DW_FORM_ref4
 ; CHECK-NEXT: .b8 0                                // EOM(1)
 ; CHECK-NEXT: .b8 0                                // EOM(2)
-; CHECK-NEXT: .b8 5                                // Abbreviation Code
-; CHECK-NEXT: .b8 52                               // DW_TAG_variable
+; CHECK-NEXT: .b8 4                                // Abbreviation Code
+; CHECK-NEXT: .b8 36                               // DW_TAG_base_type
 ; CHECK-NEXT: .b8 0                                // DW_CHILDREN_no
 ; CHECK-NEXT: .b8 3                                // DW_AT_name
 ; CHECK-NEXT: .b8 8                                // DW_FORM_string
-; CHECK-NEXT: .b8 58                               // DW_AT_decl_file
+; CHECK-NEXT: .b8 62                               // DW_AT_encoding
 ; CHECK-NEXT: .b8 11                               // DW_FORM_data1
-; CHECK-NEXT: .b8 59                               // DW_AT_decl_line
+; CHECK-NEXT: .b8 11                               // DW_AT_byte_size
 ; CHECK-NEXT: .b8 11                               // DW_FORM_data1
-; CHECK-NEXT: .b8 73                               // DW_AT_type
-; CHECK-NEXT: .b8 16                               // DW_FORM_ref_addr
 ; CHECK-NEXT: .b8 0                                // EOM(1)
 ; CHECK-NEXT: .b8 0                                // EOM(2)
-; CHECK-NEXT: .b8 6                                // Abbreviation Code
+; CHECK-NEXT: .b8 5                                // Abbreviation Code
 ; CHECK-NEXT: .b8 46                               // DW_TAG_subprogram
 ; CHECK-NEXT: .b8 1                                // DW_CHILDREN_yes
 ; CHECK-NEXT: .b8 17                               // DW_AT_low_pc
@@ -228,33 +219,42 @@
 ; CHECK-NEXT: .b8 11                               // DW_FORM_data1
 ; CHECK-NEXT: .b8 59                               // DW_AT_decl_line
 ; CHECK-NEXT: .b8 11                               // DW_FORM_data1
-; CHECK-NEXT: .b8 73                               // DW_AT_type
-; CHECK-NEXT: .b8 19                               // DW_FORM_ref4
 ; CHECK-NEXT: .b8 63                               // DW_AT_external
 ; CHECK-NEXT: .b8 12                               // DW_FORM_flag
 ; CHECK-NEXT: .b8 0                                // EOM(1)
 ; CHECK-NEXT: .b8 0                                // EOM(2)
-; CHECK-NEXT: .b8 7                                // Abbreviation Code
-; CHECK-NEXT: .b8 36                               // DW_TAG_base_type
+; CHECK-NEXT: .b8 6                                // Abbreviation Code
+; CHECK-NEXT: .b8 52                               // DW_TAG_variable
 ; CHECK-NEXT: .b8 0                                // DW_CHILDREN_no
 ; CHECK-NEXT: .b8 3                                // DW_AT_name
 ; CHECK-NEXT: .b8 8                                // DW_FORM_string
-; CHECK-NEXT: .b8 62                               // DW_AT_encoding
+; CHECK-NEXT: .b8 58                               // DW_AT_decl_file
 ; CHECK-NEXT: .b8 11                               // DW_FORM_data1
-; CHECK-NEXT: .b8 11                               // DW_AT_byte_size
+; CHECK-NEXT: .b8 59                               // DW_AT_decl_line
 ; CHECK-NEXT: .b8 11                               // DW_FORM_data1
+; CHECK-NEXT: .b8 73                               // DW_AT_type
+; CHECK-NEXT: .b8 16                               // DW_FORM_ref_addr
+; CHECK-NEXT: .b8 0                                // EOM(1)
+; CHECK-NEXT: .b8 0                                // EOM(2)
+; CHECK-NEXT: .b8 7                                // Abbreviation Code
+; CHECK-NEXT: .b8 19                               // DW_TAG_structure_type
+; CHECK-NEXT: .b8 0                                // DW_CHILDREN_no
+; CHECK-NEXT: .b8 3                                // DW_AT_name
+; CHECK-NEXT: .b8 8                                // DW_FORM_string
+; CHECK-NEXT: .b8 60                               // DW_AT_declaration
+; CHECK-NEXT: .b8 12                               // DW_FORM_flag
 ; CHECK-NEXT: .b8 0                                // EOM(1)
 ; CHECK-NEXT: .b8 0                                // EOM(2)
 ; CHECK-NEXT: .b8 0                                // EOM(3)
 ; CHECK-NEXT: }
 ; CHECK-NEXT: .section .debug_info
 ; CHECK-NEXT: {
-; CHECK-NEXT: .b32 159                             // Length of Unit
+; CHECK-NEXT: .b32 152                             // Length of Unit
 ; CHECK-NEXT: .b8 2                                // DWARF version number
 ; CHECK-NEXT: .b8 0
 ; CHECK-NEXT: .b32 .debug_abbrev                   // Offset Into Abbrev. Section
 ; CHECK-NEXT: .b8 8                                // Address Size (in bytes)
-; CHECK-NEXT: .b8 1                                // Abbrev [1] 0xb:0x98 DW_TAG_compile_unit
+; CHECK-NEXT: .b8 1                                // Abbrev [1] 0xb:0x91 DW_TAG_compile_unit
 ; CHECK-NEXT: .b8 99                               // DW_AT_producer
 ; CHECK-NEXT: .b8 108
 ; CHECK-NEXT: .b8 97
@@ -302,7 +302,7 @@
 ; CHECK-NEXT: .b8 115
 ; CHECK-NEXT: .b8 101
 ; CHECK-NEXT: .b8 116
-; CHECK-NEXT: .b8 50
+; CHECK-NEXT: .b8 49
 ; CHECK-NEXT: .b8 46
 ; CHECK-NEXT: .b8 99
 ; CHECK-NEXT: .b8 99
@@ -324,15 +324,11 @@
 ; CHECK-NEXT: .b8 99
 ; CHECK-NEXT: .b8 99
 ; CHECK-NEXT: .b8 0
-; CHECK-NEXT: .b64 $L__func_begin1                 // DW_AT_low_pc
-; CHECK-NEXT: .b64 $L__func_end1                   // DW_AT_high_pc
-; CHECK-NEXT: .b8 2                                // Abbrev [2] 0x64:0x4 DW_TAG_structure_type
-; CHECK-NEXT: .b8 65                               // DW_AT_name
-; CHECK-NEXT: .b8 0
-; CHECK-NEXT: .b8 1                                // DW_AT_declaration
-; CHECK-NEXT: .b8 3                                // Abbrev [3] 0x68:0x3a DW_TAG_subprogram
-; CHECK-NEXT: .b64 $L__func_begin1                 // DW_AT_low_pc
-; CHECK-NEXT: .b64 $L__func_end1                   // DW_AT_high_pc
+; CHECK-NEXT: .b64 $L__func_begin0                 // DW_AT_low_pc
+; CHECK-NEXT: .b64 $L__func_end0                   // DW_AT_high_pc
+; CHECK-NEXT: .b8 2                                // Abbrev [2] 0x64:0x30 DW_TAG_subprogram
+; CHECK-NEXT: .b64 $L__func_begin0                 // DW_AT_low_pc
+; CHECK-NEXT: .b64 $L__func_end0                   // DW_AT_high_pc
 ; CHECK-NEXT: .b8 1                                // DW_AT_frame_base
 ; CHECK-NEXT: .b8 156
 ; CHECK-NEXT: .b8 95                               // DW_AT_MIPS_linkage_name
@@ -340,37 +336,38 @@
 ; CHECK-NEXT: .b8 51
 ; CHECK-NEXT: .b8 98
 ; CHECK-NEXT: .b8 97
-; CHECK-NEXT: .b8 122
-; CHECK-NEXT: .b8 49
-; CHECK-NEXT: .b8 65
+; CHECK-NEXT: .b8 114
+; CHECK-NEXT: .b8 105
 ; CHECK-NEXT: .b8 0
 ; CHECK-NEXT: .b8 98                               // DW_AT_name
 ; CHECK-NEXT: .b8 97
-; CHECK-NEXT: .b8 122
+; CHECK-NEXT: .b8 114
 ; CHECK-NEXT: .b8 0
-; CHECK-NEXT: .b8 2                                // DW_AT_decl_file
-; CHECK-NEXT: .b8 6                                // DW_AT_decl_line
+; CHECK-NEXT: .b8 1                                // DW_AT_decl_file
+; CHECK-NEXT: .b8 1                                // DW_AT_decl_line
+; CHECK-NEXT: .b32 148                             // DW_AT_type
 ; CHECK-NEXT: .b8 1                                // DW_AT_external
-; CHECK-NEXT: .b8 4                                // Abbrev [4] 0x8b:0x9 DW_TAG_formal_parameter
-; CHECK-NEXT: .b8 97                               // DW_AT_name
-; CHECK-NEXT: .b8 0
-; CHECK-NEXT: .b8 2                                // DW_AT_decl_file
-; CHECK-NEXT: .b8 6                                // DW_AT_decl_line
-; CHECK-NEXT: .b32 100                             // DW_AT_type
-; CHECK-NEXT: .b8 5                                // Abbrev [5] 0x94:0xd DW_TAG_variable
-; CHECK-NEXT: .b8 122                              // DW_AT_name
+; CHECK-NEXT: .b8 3                                // Abbrev [3] 0x8a:0x9 DW_TAG_formal_parameter
+; CHECK-NEXT: .b8 98                               // DW_AT_name
 ; CHECK-NEXT: .b8 0
-; CHECK-NEXT: .b8 2                                // DW_AT_decl_file
-; CHECK-NEXT: .b8 7                                // DW_AT_decl_line
-; CHECK-NEXT: .b64 .debug_info+311                 // DW_AT_type
+; CHECK-NEXT: .b8 1                                // DW_AT_decl_file
+; CHECK-NEXT: .b8 1                                // DW_AT_decl_line
+; CHECK-NEXT: .b32 148                             // DW_AT_type
 ; CHECK-NEXT: .b8 0                                // End Of Children Mark
+; CHECK-NEXT: .b8 4                                // Abbrev [4] 0x94:0x7 DW_TAG_base_type
+; CHECK-NEXT: .b8 105                              // DW_AT_name
+; CHECK-NEXT: .b8 110
+; CHECK-NEXT: .b8 116
+; CHECK-NEXT: .b8 0
+; CHECK-NEXT: .b8 5                                // DW_AT_encoding
+; CHECK-NEXT: .b8 4                                // DW_AT_byte_size
 ; CHECK-NEXT: .b8 0                                // End Of Children Mark
-; CHECK-NEXT: .b32 152                             // Length of Unit
+; CHECK-NEXT: .b32 159                             // Length of Unit
 ; CHECK-NEXT: .b8 2                                // DWARF version number
 ; CHECK-NEXT: .b8 0
 ; CHECK-NEXT: .b32 .debug_abbrev                   // Offset Into Abbrev. Section
 ; CHECK-NEXT: .b8 8                                // Address Size (in bytes)
-; CHECK-NEXT: .b8 1                                // Abbrev [1] 0xb:0x91 DW_TAG_compile_unit
+; CHECK-NEXT: .b8 1                                // Abbrev [1] 0xb:0x98 DW_TAG_compile_unit
 ; CHECK-NEXT: .b8 99                               // DW_AT_producer
 ; CHECK-NEXT: .b8 108
 ; CHECK-NEXT: .b8 97
@@ -418,7 +415,7 @@
 ; CHECK-NEXT: .b8 115
 ; CHECK-NEXT: .b8 101
 ; CHECK-NEXT: .b8 116
-; CHECK-NEXT: .b8 49
+; CHECK-NEXT: .b8 50
 ; CHECK-NEXT: .b8 46
 ; CHECK-NEXT: .b8 99
 ; CHECK-NEXT: .b8 99
@@ -440,11 +437,11 @@
 ; CHECK-NEXT: .b8 99
 ; CHECK-NEXT: .b8 99
 ; CHECK-NEXT: .b8 0
-; CHECK-NEXT: .b64 $L__func_begin0                 // DW_AT_low_pc
-; CHECK-NEXT: .b64 $L__func_end0                   // DW_AT_high_pc
-; CHECK-NEXT: .b8 6                                // Abbrev [6] 0x64:0x30 DW_TAG_subprogram
-; CHECK-NEXT: .b64 $L__func_begin0                 // DW_AT_low_pc
-; CHECK-NEXT: .b64 $L__func_end0                   // DW_AT_high_pc
+; CHECK-NEXT: .b64 $L__func_begin1                 // DW_AT_low_pc
+; CHECK-NEXT: .b64 $L__func_end1                   // DW_AT_high_pc
+; CHECK-NEXT: .b8 5                                // Abbrev [5] 0x64:0x3a DW_TAG_subprogram
+; CHECK-NEXT: .b64 $L__func_begin1                 // DW_AT_low_pc
+; CHECK-NEXT: .b64 $L__func_end1                   // DW_AT_high_pc
 ; CHECK-NEXT: .b8 1                                // DW_AT_frame_base
 ; CHECK-NEXT: .b8 156
 ; CHECK-NEXT: .b8 95                               // DW_AT_MIPS_linkage_name
@@ -452,31 +449,34 @@
 ; CHECK-NEXT: .b8 51
 ; CHECK-NEXT: .b8 98
 ; CHECK-NEXT: .b8 97
-; CHECK-NEXT: .b8 114
-; CHECK-NEXT: .b8 105
+; CHECK-NEXT: .b8 122
+; CHECK-NEXT: .b8 49
+; CHECK-NEXT: .b8 65
 ; CHECK-NEXT: .b8 0
 ; CHECK-NEXT: .b8 98                               // DW_AT_name
 ; CHECK-NEXT: .b8 97
-; CHECK-NEXT: .b8 114
+; CHECK-NEXT: .b8 122
 ; CHECK-NEXT: .b8 0
-; CHECK-NEXT: .b8 1                                // DW_AT_decl_file
-; CHECK-NEXT: .b8 1                                // DW_AT_decl_line
-; CHECK-NEXT: .b32 148                             // DW_AT_type
+; CHECK-NEXT: .b8 2                                // DW_AT_decl_file
+; CHECK-NEXT: .b8 6                                // DW_AT_decl_line
 ; CHECK-NEXT: .b8 1                                // DW_AT_external
-; CHECK-NEXT: .b8 4                                // Abbrev [4] 0x8a:0x9 DW_TAG_formal_parameter
-; CHECK-NEXT: .b8 98                               // DW_AT_name
+; CHECK-NEXT: .b8 3                                // Abbrev [3] 0x87:0x9 DW_TAG_formal_parameter
+; CHECK-NEXT: .b8 97                               // DW_AT_name
 ; CHECK-NEXT: .b8 0
-; CHECK-NEXT: .b8 1                                // DW_AT_decl_file
-; CHECK-NEXT: .b8 1                                // DW_AT_decl_line
-; CHECK-NEXT: .b32 148                             // DW_AT_type
+; CHECK-NEXT: .b8 2                                // DW_AT_decl_file
+; CHECK-NEXT: .b8 6                                // DW_AT_decl_line
+; CHECK-NEXT: .b32 158                             // DW_AT_type
+; CHECK-NEXT: .b8 6                                // Abbrev [6] 0x90:0xd DW_TAG_variable
+; CHECK-NEXT: .b8 122                              // DW_AT_name
+; CHECK-NEXT: .b8 0
+; CHECK-NEXT: .b8 2                                // DW_AT_decl_file
+; CHECK-NEXT: .b8 7                                // DW_AT_decl_line
+; CHECK-NEXT: .b64 .debug_info+148                 // DW_AT_type
 ; CHECK-NEXT: .b8 0                                // End Of Children Mark
-; CHECK-NEXT: .b8 7                                // Abbrev [7] 0x94:0x7 DW_TAG_base_type
-; CHECK-NEXT: .b8 105                              // DW_AT_name
-; CHECK-NEXT: .b8 110
-; CHECK-NEXT: .b8 116
+; CHECK-NEXT: .b8 7                                // Abbrev [7] 0x9e:0x4 DW_TAG_structure_type
+; CHECK-NEXT: .b8 65                               // DW_AT_name
 ; CHECK-NEXT: .b8 0
-; CHECK-NEXT: .b8 5                                // DW_AT_encoding
-; CHECK-NEXT: .b8 4                                // DW_AT_byte_size
+; CHECK-NEXT: .b8 1                                // DW_AT_declaration
 ; CHECK-NEXT: .b8 0                                // End Of Children Mark
 ; CHECK-NEXT: }
 ; CHECK-NEXT: .section .debug_loc { }
Index: llvm/test/DebugInfo/MIR/AArch64/implicit-def-dead-scope.mir
===================================================================
--- llvm/test/DebugInfo/MIR/AArch64/implicit-def-dead-scope.mir
+++ llvm/test/DebugInfo/MIR/AArch64/implicit-def-dead-scope.mir
@@ -5,7 +5,7 @@
 #  encountering an IMPLICIT_DEF in its own lexical scope.
 
 # CHECK: .debug_info contents:
-# CHECK:       DW_TAG_formal_parameter [14]
+# CHECK:       DW_TAG_formal_parameter [13]
 # CHECK-NEXT:  DW_AT_const_value [DW_FORM_udata]    (0)
 # CHECK-NEXT:  DW_AT_abstract_origin {{.*}} "name"
 --- |
Index: llvm/test/DebugInfo/Generic/varargs.ll
===================================================================
--- llvm/test/DebugInfo/Generic/varargs.ll
+++ llvm/test/DebugInfo/Generic/varargs.ll
@@ -12,23 +12,23 @@
 ;
 ; CHECK: DW_TAG_subprogram
 ; CHECK-NOT: DW_TAG
-; CHECK: DW_AT_name ("a")
+; CHECK: DW_AT_name ("b")
 ; CHECK-NOT: DW_TAG
 ; CHECK: DW_TAG_formal_parameter
 ; CHECK-NOT: DW_TAG
-; CHECK: DW_TAG_formal_parameter
+; CHECK: DW_TAG_variable
+; CHECK-NOT: DW_TAG
+; CHECK: DW_TAG_variable
 ; CHECK-NOT: DW_TAG
 ; CHECK: DW_TAG_unspecified_parameters
 ;
 ; CHECK: DW_TAG_subprogram
 ; CHECK-NOT: DW_TAG
-; CHECK: DW_AT_name ("b")
+; CHECK: DW_AT_name ("a")
 ; CHECK-NOT: DW_TAG
 ; CHECK: DW_TAG_formal_parameter
 ; CHECK-NOT: DW_TAG
-; CHECK: DW_TAG_variable
-; CHECK-NOT: DW_TAG
-; CHECK: DW_TAG_variable
+; CHECK: DW_TAG_formal_parameter
 ; CHECK-NOT: DW_TAG
 ; CHECK: DW_TAG_unspecified_parameters
 ;
Index: llvm/test/DebugInfo/Generic/namespace.ll
===================================================================
--- llvm/test/DebugInfo/Generic/namespace.ll
+++ llvm/test/DebugInfo/Generic/namespace.ll
@@ -13,12 +13,6 @@
 ; CHECK-NOT: DW_AT_decl_file
 ; CHECK-NOT: DW_AT_decl_line
 
-; CHECK: [[FOO:0x[0-9a-f]*]]:{{ *}}DW_TAG_structure_type
-; CHECK:   DW_AT_name ("foo")
-; CHECK:   DW_AT_declaration
-; CHECK: [[BAR:0x[0-9a-f]*]]:{{ *}}DW_TAG_structure_type
-; CHECK:   DW_AT_name ("bar")
-
 ; CHECK: DW_TAG_subprogram
 ; CHECK:   DW_AT_MIPS_linkage_name
 ; CHECK:   DW_AT_name ("f1")
@@ -37,6 +31,12 @@
 ; CHECK: [[VAR_FWD:0x[0-9a-f]*]]:{{ *}}DW_TAG_variable
 ; CHECK:   DW_AT_name ("var_fwd")
 
+; CHECK: [[FOO:0x[0-9a-f]*]]:{{ *}}DW_TAG_structure_type
+; CHECK:   DW_AT_name ("foo")
+; CHECK:   DW_AT_declaration
+; CHECK: [[BAR:0x[0-9a-f]*]]:{{ *}}DW_TAG_structure_type
+; CHECK:   DW_AT_name ("bar")
+
 ; CHECK: [[BAZ:0x[0-9a-f]*]]:{{.*}}DW_TAG_typedef
 ; CHECK:   DW_AT_name ("baz")
 
Index: llvm/test/DebugInfo/Generic/local-type-as-template-parameter.ll
===================================================================
--- llvm/test/DebugInfo/Generic/local-type-as-template-parameter.ll
+++ llvm/test/DebugInfo/Generic/local-type-as-template-parameter.ll
@@ -27,17 +27,17 @@
 ; Concrete out-of-line tree of foo().
 ; CHECK: DW_TAG_subprogram
 ; CHECK:   DW_AT_abstract_origin {{.*}} "_Z3foov"
+;
+; CHECK:   DW_TAG_variable
+; CHECK:     DW_AT_abstract_origin {{.*}} "objB"
+; CHECK:   DW_TAG_variable
+; CHECK:     DW_AT_abstract_origin {{.*}} "objA"
 
 ; FIXME: 'struct B' should be in the abstract tree below, not here.
 ; CHECK:   DW_TAG_structure_type
 ; CHECK:     DW_AT_name	("B")
 ; CHECK:     DW_TAG_member
 ; CHECK:     NULL
-;
-; CHECK:   DW_TAG_variable
-; CHECK:     DW_AT_abstract_origin {{.*}} "objB"
-; CHECK:   DW_TAG_variable
-; CHECK:     DW_AT_abstract_origin {{.*}} "objA"
 
 ; CHECK:   NULL
 
Index: llvm/test/DebugInfo/Generic/incorrect-variable-debugloc.ll
===================================================================
--- llvm/test/DebugInfo/Generic/incorrect-variable-debugloc.ll
+++ llvm/test/DebugInfo/Generic/incorrect-variable-debugloc.ll
@@ -34,6 +34,9 @@
 ;   b.m_fn2();
 ; }
 
+; CHECK: DW_TAG_structure_type
+; CHECK-NEXT: DW_AT_name ("B")
+
 ; CHECK: DW_TAG_structure_type
 ; CHECK-NEXT: DW_AT_name ("C")
 ; CHECK: [[M_FN3_DECL:.*]]:  DW_TAG_subprogram
Index: llvm/test/DebugInfo/Generic/enum-types.ll
===================================================================
--- llvm/test/DebugInfo/Generic/enum-types.ll
+++ llvm/test/DebugInfo/Generic/enum-types.ll
@@ -6,12 +6,12 @@
 ; rdar://17628609
 
 ; CHECK: DW_TAG_compile_unit
-; CHECK: 0x[[ENUM:.*]]: DW_TAG_enumeration_type
-; CHECK-NEXT:   DW_AT_name {{.*}}"EA"
 ; CHECK: DW_TAG_subprogram
 ; CHECK: DW_AT_MIPS_linkage_name {{.*}}"_Z4topA2EA"
 ; CHECK: DW_TAG_formal_parameter
-; CHECK: DW_AT_type [DW_FORM_ref4] (cu + 0x{{.*}} => {0x[[ENUM]]}
+; CHECK: DW_AT_type [DW_FORM_ref4] (cu + 0x{{.*}} => {0x[[ENUM:.*]]}
+; CHECK: 0x[[ENUM]]: DW_TAG_enumeration_type
+; CHECK-NEXT:   DW_AT_name {{.*}}"EA"
 
 ; CHECK: DW_TAG_compile_unit
 ; CHECK: DW_TAG_subprogram
Index: llvm/test/DebugInfo/Generic/debug-info-qualifiers.ll
===================================================================
--- llvm/test/DebugInfo/Generic/debug-info-qualifiers.ll
+++ llvm/test/DebugInfo/Generic/debug-info-qualifiers.ll
@@ -18,6 +18,10 @@
 ; CHECK-NEXT: DW_AT_reference  DW_FORM_flag_present
 ; CHECK: DW_TAG_subroutine_type     DW_CHILDREN_yes
 ; CHECK-NEXT: DW_AT_rvalue_reference DW_FORM_flag_present
+
+; CHECK: DW_TAG_subprogram
+; CHECK-NOT: DW_TAG_subprogram
+; CHECK:   DW_AT_name {{.*}} "g")
 ;
 ; CHECK: DW_TAG_subprogram
 ; CHECK-NOT: DW_TAG_subprogram
Index: llvm/test/DebugInfo/Generic/cross-cu-linkonce-distinct.ll
===================================================================
--- llvm/test/DebugInfo/Generic/cross-cu-linkonce-distinct.ll
+++ llvm/test/DebugInfo/Generic/cross-cu-linkonce-distinct.ll
@@ -25,11 +25,6 @@
 ; int (*y)(int) = &func;
 
 ; The DISubprogram should show up in compile unit a.
-; CHECK: DW_TAG_compile_unit
-; CHECK-NOT: DW_TAG
-; CHECK:    DW_AT_name ("b.cpp")
-; CHECK-NOT: DW_TAG_subprogram
-
 ; CHECK: DW_TAG_compile_unit
 ; CHECK-NOT: DW_TAG
 ; CHECK:     DW_AT_name ("a.cpp")
@@ -37,6 +32,11 @@
 ; CHECK-NOT: DW_TAG
 ; CHECK:     DW_AT_name ("func")
 
+; CHECK: DW_TAG_compile_unit
+; CHECK-NOT: DW_TAG
+; CHECK:    DW_AT_name ("b.cpp")
+; CHECK-NOT: DW_TAG_subprogram
+
 source_filename = "test/DebugInfo/Generic/cross-cu-linkonce-distinct.ll"
 target triple = "x86_64-unknown-linux-gnu"
 
Index: llvm/test/CodeGen/AMDGPU/dwarf-multi-register-use-crash.ll
===================================================================
--- llvm/test/CodeGen/AMDGPU/dwarf-multi-register-use-crash.ll
+++ llvm/test/CodeGen/AMDGPU/dwarf-multi-register-use-crash.ll
@@ -11,6 +11,7 @@
 define weak_odr void @test(i32 %0) !dbg !34 {
 ; CHECK-LABEL: test:
 ; CHECK:       .Lfunc_begin0:
+; CHECK-NEXT:    .file 1 "dummy" "dummy" md5 0xb67bec84bdce3730b4a6f2ed8d50b85c
 ; CHECK-NEXT:    .loc 1 288 0 ; dummy:288:0
 ; CHECK-NEXT:    .cfi_sections .debug_frame
 ; CHECK-NEXT:    .cfi_startproc
Index: llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
===================================================================
--- llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -1187,27 +1187,6 @@
   // address table (.debug_addr) header.
   AddrPool.setLabel(Asm->createTempSymbol("addr_table_base"));
   DebugLocs.setSym(Asm->createTempSymbol("loclists_table_base"));
-
-  for (DICompileUnit *CUNode : M->debug_compile_units()) {
-    if (CUNode->getImportedEntities().empty() &&
-        CUNode->getEnumTypes().empty() && CUNode->getRetainedTypes().empty() &&
-        CUNode->getGlobalVariables().empty() && CUNode->getMacros().empty())
-      continue;
-
-    DwarfCompileUnit &CU = getOrCreateDwarfCompileUnit(CUNode);
-
-    for (auto *Ty : CUNode->getEnumTypes()) {
-      assert(!isa_and_nonnull<DILocalScope>(Ty->getScope()) &&
-             "Unexpected function-local entity in 'enums' CU field.");
-      CU.getOrCreateTypeDIE(cast<DIType>(Ty));
-    }
-
-    for (auto *Ty : CUNode->getRetainedTypes()) {
-      if (DIType *RT = dyn_cast<DIType>(Ty))
-        // There is no point in force-emitting a forward declaration.
-        CU.getOrCreateTypeDIE(RT);
-    }
-  }
 }
 
 void DwarfDebug::finishEntityDefinitions() {
@@ -1422,6 +1401,16 @@
         CU->getOrCreateGlobalVariableDIE(GV, sortGlobalExprs(GVMap[GV]));
     }
 
+    // Emit types.
+    for (auto *Ty : CUNode->getEnumTypes())
+      CU->getOrCreateTypeDIE(cast<DIType>(Ty));
+
+    for (auto *Ty : CUNode->getRetainedTypes()) {
+      if (DIType *RT = dyn_cast<DIType>(Ty))
+        // There is no point in force-emitting a forward declaration.
+        CU->getOrCreateTypeDIE(RT);
+    }
+
     // Emit imported entities.
     for (auto *IE : CUNode->getImportedEntities()) {
       assert(!isa_and_nonnull<DILocalScope>(IE->getScope()) &&
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
  • [PATCH] D144004: [Deb... Vladislav Dzhidzhoev via Phabricator via cfe-commits
    • [PATCH] D144004:... Vladislav Dzhidzhoev via Phabricator via cfe-commits
    • [PATCH] D144004:... Vladislav Dzhidzhoev via Phabricator via cfe-commits

Reply via email to