summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorEric Christopher <echristo@gmail.com>2019-05-08 23:54:03 +0000
committerEric Christopher <echristo@gmail.com>2019-05-08 23:54:03 +0000
commitc93f56d39e629b7bcd0f4657705264fcd7e47c0d (patch)
treecf3d539b73111ac40ce46323dc886de0c223eb1f /llvm/test
parent327626368c5d37acf9f13776a72d148e136dff8b (diff)
downloadbcm5719-llvm-c93f56d39e629b7bcd0f4657705264fcd7e47c0d.tar.gz
bcm5719-llvm-c93f56d39e629b7bcd0f4657705264fcd7e47c0d.zip
Temporarily Revert "[DebugInfo] Terminate more location-list ranges at the end of blocks"
as it was causing significant compile time regressions. This reverts commit r359426 while we come up with testcases and additional ideas. llvm-svn: 360301
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/DebugInfo/COFF/pieces.ll20
-rw-r--r--llvm/test/DebugInfo/MIR/AArch64/implicit-def-dead-scope.mir8
-rw-r--r--llvm/test/DebugInfo/X86/fission-ranges.ll22
-rw-r--r--llvm/test/DebugInfo/X86/live-debug-values-constprop.mir347
4 files changed, 15 insertions, 382 deletions
diff --git a/llvm/test/DebugInfo/COFF/pieces.ll b/llvm/test/DebugInfo/COFF/pieces.ll
index 8fbdce3cbeb..dc5045cc88d 100644
--- a/llvm/test/DebugInfo/COFF/pieces.ll
+++ b/llvm/test/DebugInfo/COFF/pieces.ll
@@ -40,10 +40,9 @@
; ASM: # %bb.2: # %for.body.preheader
; ASM: xorl %edi, %edi
; ASM: xorl %esi, %esi
-; ASM: [[oy_ox_start:\.Ltmp[0-9]+]]:
; ASM: .p2align 4, 0x90
; ASM: .LBB0_3: # %for.body
-; ASM: #DEBUG_VALUE: loop_csr:o <- [DW_OP_LLVM_fragment 0 32] 0
+; ASM: [[oy_ox_start:\.Ltmp[0-9]+]]:
; ASM: #DEBUG_VALUE: loop_csr:o <- [DW_OP_LLVM_fragment 0 32] $edi
; ASM: #DEBUG_VALUE: loop_csr:o <- [DW_OP_LLVM_fragment 32 32] $esi
; ASM: .cv_loc 0 1 13 11 # t.c:13:11
@@ -60,21 +59,13 @@
; ASM: #DEBUG_VALUE: loop_csr:o <- [DW_OP_LLVM_fragment 32 32] $esi
; ASM: cmpl n(%rip), %eax
; ASM: jl .LBB0_3
-; ASM: [[loopskip_start:\.Ltmp[0-9]+]]:
-; ASM: #DEBUG_VALUE: loop_csr:o <- [DW_OP_LLVM_fragment 0 32] 0
-; ASM: xorl %esi, %esi
-; ASM: xorl %edi, %edi
; ASM: [[oy_end:\.Ltmp[0-9]+]]:
; ASM: addl %edi, %esi
; ASM: movl %esi, %eax
-; XXX FIXME: the debug value line after loopskip_start should be repeated
-; because both fields of 'o' are zero flowing into this block. However, it
-; appears livedebugvalues doesn't account for fragments.
; ASM-LABEL: pad_right: # @pad_right
; ASM: movq %rcx, %rax
-; ASM: [[pad_right_tmp:\.Ltmp[0-9]+]]:
; ASM: #DEBUG_VALUE: pad_right:o <- [DW_OP_LLVM_fragment 32 32] $eax
; ASM: retq
@@ -82,7 +73,6 @@
; ASM-LABEL: pad_left: # @pad_left
; ASM: .cv_loc 2 1 24 3 # t.c:24:3
; ASM: movq %rcx, %rax
-; ASM: [[pad_left_tmp:\.Ltmp[0-9]+]]:
; ASM: #DEBUG_VALUE: pad_left:o <- [DW_OP_LLVM_fragment 0 32] $eax
; ASM: retq
@@ -114,8 +104,8 @@
; ASM: .asciz "o"
; ASM: .cv_def_range [[oy_ox_start]] [[ox_start]], "C\021\030\000\000\000\000\000\000\000"
; ASM: .cv_def_range [[oy_ox_start]] [[oy_start]], "C\021\027\000\000\000\004\000\000\000"
-; ASM: .cv_def_range [[ox_start]] [[loopskip_start]], "C\021\030\000\000\000\000\000\000\000"
-; ASM: .cv_def_range [[oy_start]] [[loopskip_start]], "C\021\027\000\000\000\004\000\000\000"
+; ASM: .cv_def_range [[ox_start]] [[oy_end]], "C\021\030\000\000\000\000\000\000\000"
+; ASM: .cv_def_range [[oy_start]] [[oy_end]], "C\021\027\000\000\000\004\000\000\000"
; OBJ-LABEL: GlobalProcIdSym {
@@ -146,7 +136,7 @@
; ASM: .asciz "pad_right" # Function name
; ASM: .short 4414 # Record kind: S_LOCAL
; ASM: .asciz "o"
-; ASM: .cv_def_range [[pad_right_tmp]] [[pad_right_tmp]], "C\021\021\000\000\000\004\000\000\000"
+; ASM: .cv_def_range .Ltmp8 .Ltmp8, "C\021\021\000\000\000\004\000\000\000"
; OBJ-LABEL: GlobalProcIdSym {
; OBJ: Kind: S_GPROC32_ID (0x1147)
@@ -169,7 +159,7 @@
; ASM: .asciz "pad_left" # Function name
; ASM: .short 4414 # Record kind: S_LOCAL
; ASM: .asciz "o"
-; ASM: .cv_def_range [[pad_left_tmp]] [[pad_left_tmp]], "C\021\021\000\000\000\000\000\000\000"
+; ASM: .cv_def_range .Ltmp10 .Ltmp10, "C\021\021\000\000\000\000\000\000\000"
; OBJ-LABEL: GlobalProcIdSym {
; OBJ: Kind: S_GPROC32_ID (0x1147)
diff --git a/llvm/test/DebugInfo/MIR/AArch64/implicit-def-dead-scope.mir b/llvm/test/DebugInfo/MIR/AArch64/implicit-def-dead-scope.mir
index d2a8d4cd322..06db4150684 100644
--- a/llvm/test/DebugInfo/MIR/AArch64/implicit-def-dead-scope.mir
+++ b/llvm/test/DebugInfo/MIR/AArch64/implicit-def-dead-scope.mir
@@ -5,10 +5,8 @@
# encountering an IMPLICIT_DEF in its own lexical scope.
# CHECK: .debug_info contents:
-# CHECK: DW_TAG_formal_parameter
-# CHECK: DW_AT_location [DW_FORM_sec_offset]
-# CHECK-NEXT: DW_OP_lit0, DW_OP_stack_value
-# CHECK-NEXT: DW_AT_abstract_origin {{.*}} "name"
+# CHECK: DW_TAG_formal_parameter
+# CHECK: DW_AT_const_value [DW_FORM_udata] (0)
--- |
; ModuleID = 't.ll'
source_filename = "t.ll"
@@ -105,7 +103,7 @@
!15 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "v", file: !5, line: 97, size: 64, elements: !2, identifier: "_ZTS1v")
!16 = !DISubroutineType(types: !2)
!17 = !DISubprogram(name: "bv", linkageName: "_ZN1v2bvEv", scope: !15, file: !5, line: 98, type: !16, isLocal: false, isDefinition: false, scopeLine: 98, flags: DIFlagPrototyped, isOptimized: true)
- !18 = !DILocalVariable(name: "name", arg: 2, scope: !19, file: !5, line: 22, type: !21)
+ !18 = !DILocalVariable(arg: 2, scope: !19, file: !5, line: 22, type: !21)
!19 = distinct !DISubprogram(name: "m", linkageName: "_ZN1jILi6EN1a1fEE1mEj", scope: !11, file: !5, line: 22, type: !16, isLocal: false, isDefinition: true, scopeLine: 22, flags: DIFlagPrototyped, isOptimized: true, unit: !0, declaration: !20, retainedNodes: !2)
!20 = !DISubprogram(name: "m", linkageName: "_ZN1jILi6EN1a1fEE1mEj", scope: !11, file: !5, line: 22, type: !16, isLocal: false, isDefinition: false, scopeLine: 22, flags: DIFlagPublic | DIFlagPrototyped, isOptimized: true)
!21 = !DIDerivedType(tag: DW_TAG_typedef, name: "h", file: !5, line: 10, baseType: !22)
diff --git a/llvm/test/DebugInfo/X86/fission-ranges.ll b/llvm/test/DebugInfo/X86/fission-ranges.ll
index b9a1675d608..1a1dc22870a 100644
--- a/llvm/test/DebugInfo/X86/fission-ranges.ll
+++ b/llvm/test/DebugInfo/X86/fission-ranges.ll
@@ -15,7 +15,6 @@
; CHECK-NEXT: DW_AT_GNU_addr_base [DW_FORM_sec_offset] (0x00000000)
; CHECK: .debug_info.dwo contents:
-; CHECK: DW_AT_location [DW_FORM_sec_offset] ([[P:0x[0-9a-z]*]]
; CHECK: DW_AT_location [DW_FORM_sec_offset] ([[A:0x[0-9a-z]*]]
; CHECK: DW_AT_location [DW_FORM_sec_offset] ([[E:0x[0-9a-z]*]]
; CHECK: DW_AT_location [DW_FORM_sec_offset] ([[B:0x[0-9a-z]*]]
@@ -28,31 +27,24 @@
; Don't assume these locations are entirely correct - feel free to update them
; if they've changed due to a bugfix, change in register allocation, etc.
-; CHECK: [[P]]:
-; CHECK-NEXT: Addr idx 1 (w/ length 204): DW_OP_consts +1, DW_OP_stack_value
; CHECK: [[A]]:
; CHECK-NEXT: Addr idx 2 (w/ length 169): DW_OP_consts +0, DW_OP_stack_value
-; CHECK-NEXT: Addr idx 3 (w/ length 15): DW_OP_reg0 RAX
-; CHECK-NEXT: Addr idx 4 (w/ length 6): DW_OP_breg7 RSP-8
-; CHECK-NEXT: Addr idx 5 (w/ length 4): DW_OP_reg0 RAX
+; CHECK-NEXT: Addr idx 3 (w/ length 25): DW_OP_reg0 RAX
; CHECK: [[E]]:
-; CHECK-NEXT: Addr idx 6 (w/ length 9): DW_OP_reg0 RAX
-; CHECK-NEXT: Addr idx 7 (w/ length 98): DW_OP_breg7 RSP-44
+; CHECK-NEXT: Addr idx 4 (w/ length 19): DW_OP_reg0 RAX
; CHECK: [[B]]:
-; CHECK-NEXT: Addr idx 8 (w/ length 15): DW_OP_reg0 RAX
-; CHECK-NEXT: Addr idx 9 (w/ length 66): DW_OP_breg7 RSP-32
+; CHECK-NEXT: Addr idx 5 (w/ length 17): DW_OP_reg0 RAX
; CHECK: [[D]]:
-; CHECK-NEXT: Addr idx 10 (w/ length 15): DW_OP_reg0 RAX
-; CHECK-NEXT: Addr idx 11 (w/ length 42): DW_OP_breg7 RSP-20
+; CHECK-NEXT: Addr idx 6 (w/ length 17): DW_OP_reg0 RAX
; Make sure we don't produce any relocations in any .dwo section (though in particular, debug_info.dwo)
; HDR-NOT: .rela.{{.*}}.dwo
; Make sure we have enough stuff in the debug_addr to cover the address indexes
-; (11 is the last index in debug_loc.dwo, making 12 entries of 8 bytes each,
-; 12 * 8 == 96 base 10 == 60 base 16)
+; (6 is the last index in debug_loc.dwo, making 7 entries of 8 bytes each, 7 * 8
+; == 56 base 10 == 38 base 16)
-; HDR: .debug_addr 00000060
+; HDR: .debug_addr 00000038
; HDR-NOT: .rela.{{.*}}.dwo
; Check for the existence of a DWARF v5-style range list table in the .debug_rnglists
diff --git a/llvm/test/DebugInfo/X86/live-debug-values-constprop.mir b/llvm/test/DebugInfo/X86/live-debug-values-constprop.mir
deleted file mode 100644
index 086f664e19a..00000000000
--- a/llvm/test/DebugInfo/X86/live-debug-values-constprop.mir
+++ /dev/null
@@ -1,347 +0,0 @@
-# RUN: llc %s -o - -run-pass=livedebugvalues -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefix=CHECK
-# RUN: llc %s -o - -start-before=livedebugvalues -filetype=obj -mtriple=x86_64-unknown-unknown | llvm-dwarfdump - | FileCheck %s --check-prefix=RANGES
-# Check that livedebugvalues does the right thing when register and constant
-# DBG_VALUEs interact, and that their ranges are correctly terminated by the
-# debug printing backend.
---- |
- ; All these IR functions are duds, see the MIR below.
- source_filename = "<stdin>"
- target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
-
- define i32 @foo(i32* %bees, i32* %output) !dbg !4 {
- entry:
- br i1 undef, label %bb1, label %bb1
- bb1:
- br label %bb3
- bb2:
- br label %bb3
- bb3:
- ret i32 0
- }
-
- define i32 @bar(i32* %bees, i32* %output) !dbg !40 {
- entry:
- br i1 undef, label %bb1, label %bb1
- bb1:
- br label %bb3
- bb2:
- br label %bb3
- bb3:
- ret i32 0
- }
-
- define i32 @baz(i32* %bees, i32* %output) !dbg !80 {
- entry:
- br i1 undef, label %bb1, label %bb1
- bb1:
- br label %bb3
- bb2:
- br label %bb3
- bb3:
- ret i32 0
- }
-
- define i32 @qux(i32* %bees, i32* %output) !dbg !120 {
- entry:
- br i1 undef, label %bb1, label %bb1
- bb1:
- br label %bb3
- bb2:
- br label %bb3
- bb3:
- ret i32 0
- }
-
- ; Function Attrs: nounwind readnone speculatable
- declare void @llvm.dbg.value(metadata, metadata, metadata)
-
- ; Function Attrs: nounwind readnone speculatable
- declare void @llvm.dbg.declare(metadata, metadata, metadata)
-
- ; Function Attrs: nounwind
- declare void @llvm.stackprotector(i8*, i8**)
-
- !llvm.module.flags = !{!0, !100}
- !llvm.dbg.cu = !{!1}
-
- !100 = !{i32 2, !"Dwarf Version", i32 4}
- !0 = !{i32 2, !"Debug Info Version", i32 3}
- !1 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !2, producer: "beards", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug)
- !2 = !DIFile(filename: "bees.cpp", directory: ".")
- !3 = !DILocalVariable(name: "flannel", scope: !4, file: !2, line: 1, type: !16)
- !4 = distinct !DISubprogram(name: "nope", scope: !2, file: !2, line: 1, spFlags: DISPFlagDefinition, unit: !1, retainedNodes: !13, type: !14, isDefinition: true)
- !5 = !DILocation(line: 0, scope: !4)
- !6 = !DILocation(line: 1, scope: !4)
- !7 = !DILocation(line: 2, scope: !4)
- !8 = !DILocation(line: 4, scope: !4)
- !9 = !DILocation(line: 5, scope: !4)
- !10 = !DILocation(line: 6, scope: !4)
- !11 = !DILocation(line: 7, scope: !4)
- !12 = !DILocation(line: 8, scope: !4)
- !13 = !{!3}
- !14 = !DISubroutineType(types: !15)
- !15 = !{!16}
- !16 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
- !40 = distinct !DISubprogram(name: "bar", scope: !2, file: !2, line: 1, spFlags: DISPFlagDefinition, unit: !1, retainedNodes: !13, type: !14, isDefinition: true)
- !41 = !DILocalVariable(name: "towel", scope: !40, file: !2, line: 1, type: !16)
- !42 = !DILocation(line: 40, scope: !40)
- !80 = distinct !DISubprogram(name: "baz", scope: !2, file: !2, line: 1, spFlags: DISPFlagDefinition, unit: !1, retainedNodes: !13, type: !14, isDefinition: true)
- !81 = !DILocalVariable(name: "socks", scope: !80, file: !2, line: 1, type: !16)
- !82 = !DILocation(line: 40, scope: !80)
- !120 = distinct !DISubprogram(name: "qux", scope: !2, file: !2, line: 1, spFlags: DISPFlagDefinition, unit: !1, retainedNodes: !13, type: !14, isDefinition: true)
- !121 = !DILocalVariable(name: "shoes", scope: !120, file: !2, line: 1, type: !16)
- !122 = !DILocation(line: 40, scope: !120)
-
-...
----
-name: foo
-alignment: 4
-tracksRegLiveness: true
-registers: []
-liveins:
- - { reg: '$rdi', virtual-reg: '' }
-body: |
-
- ; Two DBG_VALUEs for eax merge into bb3, check that livedebugvalues propagates
- ; the location.
- ; CHECK-LABEL: name: foo
- ; CHECK-LABEL: bb.1.bb1
- ; CHECK: $eax = MOV32rr
- ; CHECK-NEXT: DBG_VALUE $eax
- ; CHECK-NEXT: JMP_1 %bb.3
- ; CHECK-LABEL: bb.2.bb2
- ; CHECK: $eax = ADD32ri8
- ; CHECK-NEXT: DBG_VALUE $eax
- ; CHECK-NEXT: JMP_1 %bb.3
- ; CHECK-LABEL: bb.3.bb3
- ; CHECK: DBG_VALUE $eax
- ; Test for there being a location-list gap between bb1 and bb2, as the
- ; variable does not have a location over the ADD32ri. The range should also
- ; extend over the final bb.
- ; RANGES-LABEL: DW_TAG_subprogram
- ; RANGES: DW_AT_high_pc (0x[[NOPEHIGHPC:[0-9a-f]+]])
- ; RANGES-LABEL: DW_AT_name ("nope")
- ; RANGES: DW_AT_location (0x{{[0-9a-f]+}}
- ; RANGES-NEXT: [0x{{[0-9a-f]+}}, 0x[[NOPEADDR:[0-9a-f]+]]): DW_OP_reg0 RAX
- ; RANGES-NEXT: [
- ; RANGES-NOT: 0x[[NOPEADDR]]
- ; RANGES-SAME: , 0x[[NOPEHIGHPC]]): DW_OP_reg0 RAX
-
- bb.0.entry:
- successors: %bb.1, %bb.2
- liveins: $rdi
-
- $ecx = XOR32rr undef $ecx, undef $ecx, implicit-def $eflags
- JCC_1 %bb.1, 2, implicit killed $eflags
- JMP_1 %bb.2
-
- bb.1.bb1 (align 4):
- successors: %bb.3
- liveins: $ecx, $rdi
-
- $eax = MOV32rr killed $ecx, implicit-def $rax
- DBG_VALUE $eax, $noreg, !3, !DIExpression(), debug-location !8
- JMP_1 %bb.3
-
- bb.2.bb2:
- successors: %bb.3
- liveins: $rax
-
- $eax = ADD32ri8 $eax, 3, implicit-def dead $eflags, implicit killed $rax, implicit-def $rax
- DBG_VALUE $eax, $noreg, !3, !DIExpression(), debug-location !8
- JMP_1 %bb.3
-
- bb.3.bb3:
- liveins: $rax
- RETQ $eax, debug-location !9
-
-...
----
-name: bar
-alignment: 4
-tracksRegLiveness: true
-registers: []
-liveins:
- - { reg: '$rdi', virtual-reg: '' }
-body: |
- ; Two DBG_VALUEs, one for eax, the other for zero, merge into bb3. Check that
- ; livedebugvalues does not propagate anything.
- ; the location.
- ; CHECK-LABEL: name: bar
- ; CHECK-LABEL: bb.1.bb1
- ; CHECK: $eax = MOV32rr
- ; CHECK-NEXT: DBG_VALUE 0
- ; CHECK-NEXT: JMP_1 %bb.3
- ; CHECK-LABEL: bb.2.bb2
- ; CHECK: $eax = ADD32ri8
- ; CHECK-NEXT: DBG_VALUE $eax
- ; CHECK-NEXT: JMP_1 %bb.3
- ; CHECK-LABEL: bb.3.bb3
- ; CHECK-NOT: DBG_VALUE
- ; Test for there being a location-list gap between bb1 and bb2, the variable
- ; should not have a location over the ADD32ri. The range of the last entry
- ; should not cover the last block.
- ; RANGES-LABEL: DW_TAG_subprogram
- ; RANGES: DW_AT_high_pc (0x[[BARHIGHPC:[0-9a-f]+]])
- ; RANGES-LABEL: DW_AT_name ("bar")
- ; RANGES: DW_AT_location (0x{{[0-9a-f]+}}
- ; RANGES-NEXT: [0x{{[0-9a-f]+}}, 0x[[BARADDR:[0-9a-f]+]]): DW_OP_consts +0, DW_OP_stack_value
- ; RANGES-NEXT: [
- ; RANGES-NOT: 0x[[BARADDR]]
- ; RANGES-NOT: 0x[[BARHIGHPC]]
- ; RANGES-SAME: ): DW_OP_reg0 RAX
-
- bb.0.entry:
- successors: %bb.1, %bb.2
- liveins: $rdi
-
- $ecx = XOR32rr undef $ecx, undef $ecx, implicit-def $eflags
- JCC_1 %bb.1, 2, implicit killed $eflags
- JMP_1 %bb.2
-
- bb.1.bb1 (align 4):
- successors: %bb.3
- liveins: $ecx, $rdi
-
- $eax = MOV32rr killed $ecx, implicit-def $rax
- DBG_VALUE 0, $noreg, !41, !DIExpression(), debug-location !42
- JMP_1 %bb.3
-
- bb.2.bb2:
- successors: %bb.3
- liveins: $rax
-
- $eax = ADD32ri8 $eax, 3, implicit-def dead $eflags, implicit killed $rax, implicit-def $rax
- DBG_VALUE $eax, $noreg, !41, !DIExpression(), debug-location !42
- JMP_1 %bb.3
-
- bb.3.bb3:
- liveins: $rax
- RETQ $eax, debug-location !42
-
-...
----
-name: baz
-alignment: 4
-tracksRegLiveness: true
-registers: []
-liveins:
- - { reg: '$rdi', virtual-reg: '' }
-body: |
- ; Two DBG_VALUEs, one for zero, the other for eax, merge into bb3. Check that
- ; livedebugvalues does not propagate anything.
- ; the location.
- ; CHECK-LABEL: name: baz
- ; CHECK-LABEL: bb.1.bb1
- ; CHECK: $eax = MOV32rr
- ; CHECK-NEXT: DBG_VALUE $eax
- ; CHECK-NEXT: JMP_1 %bb.3
- ; CHECK-LABEL: bb.2.bb2
- ; CHECK: $eax = ADD32ri8
- ; CHECK-NEXT: DBG_VALUE 0
- ; CHECK-NEXT: JMP_1 %bb.3
- ; CHECK-LABEL: bb.3.bb3
- ; CHECK-NOT: DBG_VALUE
- ; Test for there being a location-list gap between bb1 and bb2, the variable
- ; should not have a location over the ADD32ri. The range of the last item
- ; should not cover the last block.
- ; RANGES-LABEL: DW_TAG_subprogram
- ; RANGES: DW_AT_high_pc (0x[[BAZHIGHPC:[0-9a-f]+]])
- ; RANGES-LABEL: DW_AT_name ("baz")
- ; RANGES: DW_AT_location (0x{{[0-9a-f]+}}
- ; RANGES-NEXT: [0x{{[0-9a-f]+}}, 0x[[BAZADDR:[0-9a-f]+]]): DW_OP_reg0 RAX
- ; RANGES-NEXT: [
- ; RANGES-NOT: 0x[[BAZADDR]]
- ; RANGES-NOT: 0x[[BAZHIGHPC]]
- ; RANGES-SAME: ): DW_OP_consts +0, DW_OP_stack_value
-
- bb.0.entry:
- successors: %bb.1, %bb.2
- liveins: $rdi
-
- $ecx = XOR32rr undef $ecx, undef $ecx, implicit-def $eflags
- JCC_1 %bb.1, 2, implicit killed $eflags
- JMP_1 %bb.2
-
- bb.1.bb1 (align 4):
- successors: %bb.3
- liveins: $ecx, $rdi
-
- $eax = MOV32rr killed $ecx, implicit-def $rax
- DBG_VALUE $eax, $noreg, !81, !DIExpression(), debug-location !82
- JMP_1 %bb.3
-
- bb.2.bb2:
- successors: %bb.3
- liveins: $rax
-
- $eax = ADD32ri8 $eax, 3, implicit-def dead $eflags, implicit killed $rax, implicit-def $rax
- DBG_VALUE 0, $noreg, !81, !DIExpression(), debug-location !82
- JMP_1 %bb.3
-
- bb.3.bb3:
- liveins: $rax
- RETQ $eax, debug-location !82
-
-...
----
-name: qux
-alignment: 4
-tracksRegLiveness: true
-registers: []
-liveins:
- - { reg: '$rdi', virtual-reg: '' }
-body: |
- ; Two DBG_VALUEs for zero merging into bb3, Check that livedebugvalues does
- ; propagate the zero into the merging block.
- ; CHECK-LABEL: name: qux
- ; CHECK-LABEL: bb.1.bb1
- ; CHECK: $eax = MOV32rr
- ; CHECK-NEXT: DBG_VALUE 0
- ; CHECK-NEXT: JMP_1 %bb.3
- ; CHECK-LABEL: bb.2.bb2
- ; CHECK: $eax = ADD32ri8
- ; CHECK-NEXT: DBG_VALUE 0
- ; CHECK-NEXT: JMP_1 %bb.3
- ; CHECK-LABEL: bb.3.bb3
- ; CHECK: DBG_VALUE 0
- ; Test for there being a location-list gap between bb1 and bb2, the variable
- ; should not have a location over the ADD32ri. The final entry should cover
- ; the final block.
- ; RANGES-LABEL: DW_TAG_subprogram
- ; RANGES: DW_AT_high_pc (0x[[QUXHIGHPC:[0-9a-f]+]])
- ; RANGES-LABEL: DW_AT_name ("qux")
- ; RANGES: DW_AT_location (0x{{[0-9a-f]+}}
- ; RANGES-NEXT: [0x{{[0-9a-f]+}}, 0x[[QUXADDR:[0-9a-f]+]]): DW_OP_consts +0, DW_OP_stack_value
- ; RANGES-NOT: 0x[[QUXADDR]]
- ; RANGES-NEXT: [0x{{[0-9a-f]+}}, 0x[[QUXHIGHPC]]): DW_OP_consts +0, DW_OP_stack_value
-
- bb.0.entry:
- successors: %bb.1, %bb.2
- liveins: $rdi
-
- $ecx = XOR32rr undef $ecx, undef $ecx, implicit-def $eflags
- JCC_1 %bb.1, 2, implicit killed $eflags
- JMP_1 %bb.2
-
- bb.1.bb1 (align 4):
- successors: %bb.3
- liveins: $ecx, $rdi
-
- $eax = MOV32rr killed $ecx, implicit-def $rax
- DBG_VALUE 0, $noreg, !121, !DIExpression(), debug-location !122
- JMP_1 %bb.3
-
- bb.2.bb2:
- successors: %bb.3
- liveins: $rax
-
- $eax = ADD32ri8 $eax, 3, implicit-def dead $eflags, implicit killed $rax, implicit-def $rax
- DBG_VALUE 0, $noreg, !121, !DIExpression(), debug-location !122
- JMP_1 %bb.3
-
- bb.3.bb3:
- liveins: $rax
- RETQ $eax, debug-location !122
-
-...
OpenPOWER on IntegriCloud