summaryrefslogtreecommitdiffstats
path: root/llvm/test/DebugInfo/X86/live-debug-values-remove-range.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/DebugInfo/X86/live-debug-values-remove-range.ll')
-rw-r--r--llvm/test/DebugInfo/X86/live-debug-values-remove-range.ll69
1 files changed, 67 insertions, 2 deletions
diff --git a/llvm/test/DebugInfo/X86/live-debug-values-remove-range.ll b/llvm/test/DebugInfo/X86/live-debug-values-remove-range.ll
index 3d5219e74c1..6fec3f8150e 100644
--- a/llvm/test/DebugInfo/X86/live-debug-values-remove-range.ll
+++ b/llvm/test/DebugInfo/X86/live-debug-values-remove-range.ll
@@ -5,12 +5,43 @@
; know the location of "toast" at the start of the %loop block. Test that no
; location is given until after the call to @booler.
;
-; CHECK: ![[VARNUM:[0-9]+]] = !DILocalVariable(name: "toast"
+; Second function @baz added with an even tighter loop -- this tests different
+; code-paths through LiveDebugValues. Any blocks with an incoming backedge need
+; reconsideration after the parent of the backedge has had its OutLocs
+; initialized, even if OutLocs hasn't changed.
;
+; Third function @quux tests that we don't delete too many variable locations.
+; A variable that is live across the body of the loop should maintain its
+; location across that loop, and not be invalidated.
+;
+; CHECK: ![[FOOVARNUM:[0-9]+]] = !DILocalVariable(name: "toast"
+; CHECK: ![[BAZVARNUM:[0-9]+]] = !DILocalVariable(name: "crumpets"
+; CHECK: ![[QUUXVARNUM:[0-9]+]] = !DILocalVariable(name: "teacake"
+;
+; foo tests
+; CHECK-LABEL: bb.1.loop
+; CHECK-NOT: DBG_VALUE
+; CHECK-LABEL: CALL64pcrel32 @booler
+; CHECK: DBG_VALUE 0, $noreg, ![[FOOVARNUM]]
+;
+; baz tests
+; CHECK-LABEL: name: baz
; CHECK-LABEL: bb.1.loop
; CHECK-NOT: DBG_VALUE
; CHECK-LABEL: CALL64pcrel32 @booler
-; CHECK: DBG_VALUE 0, $noreg, ![[VARNUM]]
+; CHECK: DBG_VALUE 0, $noreg, ![[BAZVARNUM]]
+;
+; quux tests -- the variable arrives in $edi, should get a non-undef location
+; before the loop, and its position re-stated in each block.
+; CHECK-LABEL: name: quux
+; CHECK: DBG_VALUE $edi, $noreg, ![[QUUXVARNUM]]
+; CHECK: DBG_VALUE [[QUUXLOC:[a-zA-Z0-9$_]+]], $noreg, ![[QUUXVARNUM]]
+; CHECK-LABEL: bb.1.loop
+; CHECK: DBG_VALUE [[QUUXLOC]], $noreg, ![[QUUXVARNUM]]
+; CHECK-NOT: DBG_VALUE $noreg
+; CHECK-LABEL: bb.2.exit
+; CHECK: DBG_VALUE [[QUUXLOC]], $noreg, ![[QUUXVARNUM]]
+; CHECK-NOT: DBG_VALUE $noreg
declare i1 @booler()
declare void @escape(i32)
@@ -33,6 +64,32 @@ exit:
ret i32 %bar
}
+define i32 @baz(i32 %bar) !dbg !104 {
+entry:
+ call void @llvm.dbg.value(metadata i32 %bar, metadata !103, metadata !DIExpression()), !dbg !106
+ br label %loop
+loop:
+ call void @escape(i32 %bar)
+ %retval = call i1 @booler(), !dbg !106
+ call void @llvm.dbg.value(metadata i32 0, metadata !103, metadata !DIExpression()), !dbg !106
+ br i1 %retval, label %loop, label %exit
+exit:
+ ret i32 %bar
+}
+
+define i32 @quux(i32 %bar) !dbg !204 {
+entry:
+ ; %bar will be placed in a nonvolatile or spill location for the loop,
+ ; before being returned later.
+ call void @llvm.dbg.value(metadata i32 %bar, metadata !203, metadata !DIExpression()), !dbg !206
+ br label %loop
+loop:
+ %retval = call i1 @booler(), !dbg !206
+ br i1 %retval, label %loop, label %exit
+exit:
+ ret i32 %bar
+}
+
!llvm.module.flags = !{!0, !100}
!llvm.dbg.cu = !{!1}
@@ -47,3 +104,11 @@ exit:
!14 = !DISubroutineType(types: !15)
!15 = !{!16}
!16 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
+!103 = !DILocalVariable(name: "crumpets", scope: !104, file: !2, line: 1, type: !16)
+!104 = distinct !DISubprogram(name: "ribbit", scope: !2, file: !2, line: 1, spFlags: DISPFlagDefinition, unit: !1, retainedNodes: !113, type: !14, isDefinition: true)
+!106 = !DILocation(line: 1, scope: !104)
+!113 = !{!103}
+!203 = !DILocalVariable(name: "teacake", scope: !204, file: !2, line: 1, type: !16)
+!204 = distinct !DISubprogram(name: "toad", scope: !2, file: !2, line: 1, spFlags: DISPFlagDefinition, unit: !1, retainedNodes: !113, type: !14, isDefinition: true)
+!206 = !DILocation(line: 1, scope: !204)
+!213 = !{!203}
OpenPOWER on IntegriCloud