diff options
author | Adrian Prantl <aprantl@apple.com> | 2017-06-16 22:40:04 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2017-06-16 22:40:04 +0000 |
commit | 274bcbc139463b72d949cd32b972b3721c99f4be (patch) | |
tree | bdf9a11f77ea2571267b090a9481b45b152c1047 /llvm/test/DebugInfo/X86 | |
parent | f6ca97284c916e1e0206c58854ca471f6484b1da (diff) | |
download | bcm5719-llvm-274bcbc139463b72d949cd32b972b3721c99f4be.tar.gz bcm5719-llvm-274bcbc139463b72d949cd32b972b3721c99f4be.zip |
Improve the accuracy of variable ranges .debug_loc location lists.
For the following motivating example
bool c();
void f();
bool start() {
bool result = c();
if (!c()) {
result = false;
goto exit;
}
f();
result = true;
exit:
return result;
}
we would previously generate a single DW_AT_const_value(1) because
only the DBG_VALUE in the second-to-last basic block survived
codegen. This patch improves the heuristic used to determine when a
DBG_VALUE is available at the beginning of its variable's enclosing
lexical scope:
- Stop giving singular constants blanket permission to take over the
entire scope. There is still a special case for constants in the
function prologue that we also miight want to retire later.
- Use the lexical scope information to determine available-at-entry
instead of proximity to the function prologue.
After this patch we generate a location list with a more accurate
narrower availability for the constant true value. As a pleasant side
effect, we also generate inline locations instead of location lists
where a loacation covers the entire range of the enclosing lexical
scope.
Measured on compiling llc with four targets this doesn't have an
effect on compile time and reduces the size of the debug info for llc
by ~600K.
rdar://problem/30286912
llvm-svn: 305599
Diffstat (limited to 'llvm/test/DebugInfo/X86')
-rw-r--r-- | llvm/test/DebugInfo/X86/dbg-merge-loc-entry.ll | 2 | ||||
-rw-r--r-- | llvm/test/DebugInfo/X86/inlined-formal-parameter.ll | 14 | ||||
-rw-r--r-- | llvm/test/DebugInfo/X86/parameters.ll | 13 | ||||
-rw-r--r-- | llvm/test/DebugInfo/X86/pieces-3.ll | 9 | ||||
-rw-r--r-- | llvm/test/DebugInfo/X86/reference-argument.ll | 10 | ||||
-rw-r--r-- | llvm/test/DebugInfo/X86/this-stack_value.ll | 4 |
6 files changed, 26 insertions, 26 deletions
diff --git a/llvm/test/DebugInfo/X86/dbg-merge-loc-entry.ll b/llvm/test/DebugInfo/X86/dbg-merge-loc-entry.ll index 17fd0d54d40..272ee0b6c8e 100644 --- a/llvm/test/DebugInfo/X86/dbg-merge-loc-entry.ll +++ b/llvm/test/DebugInfo/X86/dbg-merge-loc-entry.ll @@ -6,6 +6,7 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" target triple = "x86_64-apple-darwin8" +; Test that consecutive, identical DBG_VALUEs are merged. ;CHECK: DW_AT_location{{.*}}(<0x1> 55 ) %0 = type { i64, i1 } @@ -19,6 +20,7 @@ entry: br i1 undef, label %bb2, label %bb4, !dbg !22 bb2: ; preds = %entry + tail call void @llvm.dbg.value(metadata i128 %u, i64 0, metadata !14, metadata !DIExpression()), !dbg !15 br label %bb4, !dbg !23 bb4: ; preds = %bb2, %entry diff --git a/llvm/test/DebugInfo/X86/inlined-formal-parameter.ll b/llvm/test/DebugInfo/X86/inlined-formal-parameter.ll index 78dc905f5e4..3b603c954fb 100644 --- a/llvm/test/DebugInfo/X86/inlined-formal-parameter.ll +++ b/llvm/test/DebugInfo/X86/inlined-formal-parameter.ll @@ -1,5 +1,5 @@ ; RUN: llc -filetype=obj -o %t.o %s -; RUN: llvm-dwarfdump -debug-dump=info %t.o | FileCheck %s +; RUN: llvm-dwarfdump %t.o | FileCheck %s ; Testcase generated using 'clang -g -O2 -S -emit-llvm' from the following: ;; void sink(void); @@ -10,6 +10,7 @@ ;; } ; Check that we have formal parameters for 'a' in both inlined subroutines. +; CHECK: .debug_info ; CHECK: DW_TAG_inlined_subroutine ; CHECK-NEXT: DW_AT_abstract_origin {{.*}} "bar" ; CHECK: DW_TAG_formal_parameter @@ -18,9 +19,11 @@ ; CHECK: DW_TAG_inlined_subroutine ; CHECK-NEXT: DW_AT_abstract_origin {{.*}} "bar" ; CHECK: DW_TAG_formal_parameter -; CHECK-NEXT: DW_AT_const_value +; CHECK-NEXT: DW_AT_location [DW_FORM_data4] (0x00000000) ; CHECK-NEXT: DW_AT_abstract_origin {{.*}} "a" - +; +; CHECK: .debug_loc +; CHECK: Location description: 11 00 target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-apple-darwin" @@ -34,13 +37,12 @@ entry: ret void, !dbg !24 } -declare void @sink() #1 +declare void @sink() ; Function Attrs: nounwind readnone declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #2 -attributes #0 = { nounwind ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="core2" "unsafe-fp-math"="false" "use-soft-float"="false" } -attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="core2" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #0 = { nounwind ssp uwtable } attributes #2 = { nounwind readnone } attributes #3 = { nounwind } diff --git a/llvm/test/DebugInfo/X86/parameters.ll b/llvm/test/DebugInfo/X86/parameters.ll index a8494f9e963..26fb82df1f3 100644 --- a/llvm/test/DebugInfo/X86/parameters.ll +++ b/llvm/test/DebugInfo/X86/parameters.ll @@ -24,8 +24,9 @@ ; CHECK: debug_info contents ; 0x74 is DW_OP_breg4, showing that the parameter is accessed indirectly -; (with a zero offset) from the register parameter -; CHECK: DW_AT_location [DW_FORM_data4] ([[F_LOC:0x[0-9]*]]) +; (with a zero offset) from the register parameter. +; CHECK: DW_AT_location {{.*}} 74 00 06 + ; CHECK-NOT: DW_TAG ; CHECK: DW_AT_name{{.*}} = "f" ; @@ -34,9 +35,6 @@ ; CHECK: DW_AT_name{{.*}} = "g" ; ; CHECK: debug_loc contents -; CHECK: [[F_LOC]]: Beginning -; CHECK-NEXT: Ending -; CHECK-NEXT: Location description: 74 00 ; CHECK: [[G_LOC]]: Beginning ; CHECK-NEXT: Ending ; CHECK-NEXT: Location description: 74 00 @@ -77,11 +75,10 @@ if.end: ; preds = %if.then, %entry ret void, !dbg !32 } -declare void @_ZN7pr147634sinkEPv(i8*) #2 +declare void @_ZN7pr147634sinkEPv(i8*) -attributes #0 = { uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #0 = { uwtable } attributes #1 = { nounwind readnone } -attributes #2 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!21, !33} diff --git a/llvm/test/DebugInfo/X86/pieces-3.ll b/llvm/test/DebugInfo/X86/pieces-3.ll index fd5a8b8617a..0f80f71af68 100644 --- a/llvm/test/DebugInfo/X86/pieces-3.ll +++ b/llvm/test/DebugInfo/X86/pieces-3.ll @@ -19,7 +19,9 @@ ; CHECK-NEXT: DW_AT_location [DW_FORM_data4] ([[LOC1:.*]]) ; CHECK-NEXT: DW_AT_name {{.*}}"outer" ; CHECK: DW_TAG_variable -; CHECK-NEXT: DW_AT_location [DW_FORM_data4] ([[LOC2:.*]]) +; CHECK-NEXT: DW_AT_location +; rsi, piece 0x00000004 +; CHECK-SAME: 54 93 04 ; CHECK-NEXT: "i1" ; ; CHECK: .debug_loc @@ -32,10 +34,6 @@ ; CHECK: Beginning address offset: 0x0000000000000004 ; CHECK-NEXT: Ending address offset: 0x0000000000000008 ; CHECK-NEXT: Location description: 55 93 08 93 04 54 93 04 -; CHECK: [[LOC2]]: Beginning address offset: 0x0000000000000004 -; CHECK-NEXT: Ending address offset: 0x0000000000000008 -; rsi, piece 0x00000004 -; CHECK-NEXT: Location description: 54 93 04 ; ; ModuleID = '/Volumes/Data/llvm/test/DebugInfo/X86/sroasplit-2.ll' @@ -48,6 +46,7 @@ define i32 @foo(i64 %outer.coerce0, i64 %outer.coerce1) #0 !dbg !4 { call void @llvm.dbg.declare(metadata !{null}, metadata !27, metadata !28), !dbg !26 call void @llvm.dbg.value(metadata i64 %outer.coerce1, i64 0, metadata !29, metadata !30), !dbg !26 call void @llvm.dbg.declare(metadata !{null}, metadata !31, metadata !32), !dbg !26 + ; The 'trunc' generates no extra code, thus i1 is visible throughout its scope. %outer.sroa.1.8.extract.trunc = trunc i64 %outer.coerce1 to i32, !dbg !33 call void @llvm.dbg.value(metadata i32 %outer.sroa.1.8.extract.trunc, i64 0, metadata !34, metadata !35), !dbg !33 %outer.sroa.1.12.extract.shift = lshr i64 %outer.coerce1, 32, !dbg !33 diff --git a/llvm/test/DebugInfo/X86/reference-argument.ll b/llvm/test/DebugInfo/X86/reference-argument.ll index 52e9290eacc..4b8caa13b72 100644 --- a/llvm/test/DebugInfo/X86/reference-argument.ll +++ b/llvm/test/DebugInfo/X86/reference-argument.ll @@ -1,4 +1,5 @@ -; RUN: llc -mtriple=x86_64-apple-macosx10.9.0 -filetype=obj -O0 < %s | llvm-dwarfdump -debug-dump=all - | FileCheck %s +; RUN: llc -mtriple=x86_64-apple-macosx10.9.0 -filetype=obj -O0 < %s \ +; RUN: | llvm-dwarfdump -debug-dump=info - | FileCheck %s ; ModuleID = 'aggregate-indirect-arg.cpp' ; extracted from debuginfo-tests/aggregate-indirect-arg.cpp @@ -11,11 +12,10 @@ ; CHECK: DW_AT_name {{.*}} "this" ; CHECK-NOT: DW_TAG_subprogram ; CHECK: DW_TAG_formal_parameter -; CHECK-NEXT: DW_AT_location [DW_FORM_data4] (0x00000000) -; CHECK-NEXT: DW_AT_name {{.*}} "v" -; CHECK: .debug_loc contents: +; CHECK-NEXT: DW_AT_location ; rsi+0 -; CHECK: Location description: 74 00 +; CHECK-SAME: 74 00 +; CHECK-NEXT: DW_AT_name {{.*}} "v" target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" target triple = "x86_64-apple-macosx10.9.0" diff --git a/llvm/test/DebugInfo/X86/this-stack_value.ll b/llvm/test/DebugInfo/X86/this-stack_value.ll index c292b67543d..6ea96c2538c 100644 --- a/llvm/test/DebugInfo/X86/this-stack_value.ll +++ b/llvm/test/DebugInfo/X86/this-stack_value.ll @@ -1,5 +1,5 @@ ; RUN: llc -filetype=asm -o - %s | FileCheck %s --check-prefix=ASM -; RUN: llc -filetype=obj -o - %s | llvm-dwarfdump - | FileCheck %s +; RUN: llc -filetype=obj -o - %s | llvm-dwarfdump --debug-dump=info - | FileCheck %s ; ; Generated at -O2 from: ; struct B; @@ -18,7 +18,7 @@ ; modified by the debugger. ; ; ASM: [DW_OP_stack_value] -; CHECK: Location description: 70 00 9f +; CHECK: DW_AT_location {{.*}} 70 00 9f ; rax+0, stack-value source_filename = "ab.cpp" target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" |