llvm-project/llvm/test/DebugInfo/X86
Adrian Prantl 7f5866c227 Teach LiveDebugValues about lexical scopes.
This addresses PR26055 LiveDebugValues is very slow.

Contrary to the old LiveDebugVariables pass LiveDebugValues currently
doesn't look at the lexical scopes before inserting a DBG_VALUE
intrinsic. This means that we often propagate DBG_VALUEs much further
down than necessary. This is especially noticeable in large C++
functions with many inlined method calls that all use the same
"this"-pointer.

For example, in the following code it makes no sense to propagate the
inlined variable a from the first inlined call to f() into any of the
subsequent basic blocks, because the variable will always be out of
scope:

void sink(int a);
void __attribute((always_inline)) f(int a) { sink(a); }
void foo(int i) {
   f(i);
   if (i)
     f(i);
   f(i);
}

This patch reuses the LexicalScopes infrastructure we have for
LiveDebugVariables to take this into account.

The effect on compile time and memory consumption is quite noticeable:
I tested a benchmark that is a large C++ source with an enormous
amount of inlined "this"-pointers that would previously eat >24GiB
(most of them for DBG_VALUE intrinsics) and whose compile time was
dominated by LiveDebugValues. With this patch applied the memory
consumption is 1GiB and 1.7% of the time is spent in LiveDebugValues.

https://reviews.llvm.org/D24994
Thanks to Daniel Berlin and Keith Walker for reviewing!

llvm-svn: 282611
2016-09-28 17:51:14 +00:00
..
2010-04-13-PubType.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
2011-09-26-GlobalVarContext.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
2011-12-16-BadStructRef.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
DIModule.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
DIModuleContext.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
DW_AT_byte_size.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
DW_AT_calling-convention.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
DW_AT_linkage_name.ll DebugInfo: Remove MDString-based type references 2016-04-23 21:08:00 +00:00
DW_AT_location-reference.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
DW_AT_object_pointer.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
DW_AT_specification.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
DW_AT_stmt_list_sec_offset.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
DW_TAG_friend.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
InlinedFnLocalVar.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
PR26148.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
abstract_origin.ll Debug Info: Prevent DW_AT_abstract_origin from being emitted twice 2016-05-10 19:38:51 +00:00
aligned_stack_var.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
arange-and-stub.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
arange.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
arguments.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
array.ll Local variables whose address is taken and passed on to a call are described 2016-08-15 18:18:26 +00:00
array2.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
asm-macro-line-number.s IAS: Use the root macro instanciation for location 2015-06-25 21:57:33 +00:00
bbjoin.ll Local variables whose address is taken and passed on to a call are described 2016-08-15 18:18:26 +00:00
bitfields-dwarf4.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
bitfields.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
block-capture.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
byvalstruct.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
c-type-units.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
coff_debug_info_type.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
coff_relative_names.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
concrete_out_of_line.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
constant-aggregate.ll DebugInfo: Remove MDString-based type references 2016-04-23 21:08:00 +00:00
constant-loclist.ll Fix the type signature of DwarfExpression::Add.*Constant to support values >32 bits. 2016-06-24 21:35:09 +00:00
cu-ranges-odr.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
cu-ranges.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
data_member_location.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
dbg-asm.s MC: correct DWARF line info for PE/COFF 2014-09-06 19:57:48 +00:00
dbg-byval-parameter.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
dbg-const-int.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
dbg-const.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
dbg-declare-arg.ll Verifier: Verify that each inlinable callsite of a debug-info-bearing function 2016-04-24 22:23:13 +00:00
dbg-declare.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
dbg-file-name.ll Reverting 268054 & 268063 as they caused PR27579. 2016-04-30 01:44:07 +00:00
dbg-i128-const.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
dbg-merge-loc-entry.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
dbg-prolog-end.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
dbg-subrange.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
dbg-value-const-byref.ll Local variables whose address is taken and passed on to a call are described 2016-08-15 18:18:26 +00:00
dbg-value-dag-combine.ll Preserve DebugInfo when replacing values in DAGCombiner 2016-06-23 17:52:57 +00:00
dbg-value-inlined-parameter.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
dbg-value-isel.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
dbg-value-location.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
dbg-value-range.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
dbg-value-regmask-clobber.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
dbg-value-terminator.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
dbg_value_direct.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
debug-dead-local-var.ll Reverting 268054 & 268063 as they caused PR27579. 2016-04-30 01:44:07 +00:00
debug-info-access.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
debug-info-block-captured-self.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
debug-info-blocks.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
debug-info-packed-struct.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
debug-info-static-member.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
debug-loc-asan.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
debug-loc-frame.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
debug-loc-offset.ll DebugInfo: Remove MDString-based type references 2016-04-23 21:08:00 +00:00
debug-macro.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
debug-ranges-offset.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
debug_frame.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
debugger-tune.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
decl-derived-member.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
deleted-bit-piece.ll DebugInfo: Remove MDString-based type references 2016-04-23 21:08:00 +00:00
discriminator.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
discriminator2.ll Read discriminators correctly from object file. 2016-04-28 22:09:37 +00:00
discriminator3.ll Read discriminators correctly from object file. 2016-04-28 22:09:37 +00:00
dllimport.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
dw_op_minus.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
dwarf-aranges-no-dwarf-labels.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
dwarf-aranges.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
dwarf-linkage-names.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
dwarf-public-names.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
dwarf-pubnames-split.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
earlydup-crash.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
elf-names.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
empty-and-one-elem-array.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
empty-array.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
empty.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
ending-run.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
enum-class.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
enum-fwd-decl.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
externaltyperef.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
fission-cu.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
fission-hash.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
fission-inline.ll DebugInfo: Remove MDString-based type references 2016-04-23 21:08:00 +00:00
fission-no-inlining.ll DebugInfo: Add flag to CU to disable emission of inline debug info into the skeleton CU 2016-08-24 18:29:49 +00:00
fission-ranges.ll Teach LiveDebugValues about lexical scopes. 2016-09-28 17:51:14 +00:00
float_const.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
float_const_loclist.ll [MIR] Print on the given output instead of stderr. 2016-07-13 20:36:03 +00:00
formal_parameter.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
frame-register.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
generate-odr-hash.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
ghost-sdnode-dbgvalues.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
gmlt.test llvm/test/DebugInfo/X86/gmlt.test: Get rid of %llc_dwarf. It should not be used with -mtriple. 2014-10-01 00:29:16 +00:00
gnu-public-names-empty.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
gnu-public-names.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
header.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
inline-asm-locs.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
inline-member-function.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
inline-seldag-test.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
inlined-formal-parameter.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
inlined-indirect-value.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
instcombine-instrinsics.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
isel-cse-line.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
lexical-block-file-inline.ll Reverting 268054 & 268063 as they caused PR27579. 2016-04-30 01:44:07 +00:00
lexical_block.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
line-info.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
line.test Refactor test to be reused across architectures 2015-01-29 20:21:24 +00:00
linkage-name.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
lit.local.cfg
live-debug-values.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
low-pc-cu.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
main-file-name.s
memberfnptr.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
mi-print.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
misched-dbg-value.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
missing-file-line.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
mixed-nodebug-cu.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
multiple-aranges.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
multiple-at-const-val.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
nodebug_with_debug_loc.ll DebugInfo: Remove MDString-based type references 2016-04-23 21:08:00 +00:00
nondefault-subrange-array.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
nophysreg.ll DebugInfo: Remove MDString-based type references 2016-04-23 21:08:00 +00:00
noreturn_c11.ll Move tests to the appropriate subdirectory. 2016-08-17 16:55:56 +00:00
noreturn_cpp11.ll Move tests to the appropriate subdirectory. 2016-08-17 16:55:56 +00:00
noreturn_objc.ll Move tests to the appropriate subdirectory. 2016-08-17 16:55:56 +00:00
objc-fwd-decl.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
objc-property-void.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
op_deref.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
parameters.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
pieces-1.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
pieces-2.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
pieces-3.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
pointer-type-size.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
pr11300.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
pr12831.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
pr13303.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
pr19307.ll DebugInfo: Remove MDString-based type references 2016-04-23 21:08:00 +00:00
pr28270.ll Remove hack introduced by r273641. 2016-06-24 06:58:15 +00:00
processes-relocations.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
prologue-stack.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
ref_addr_relocation.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
reference-argument.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
rematerialize.ll When the inline spiller rematerializes an instruction, take the debug location from the instruction 2016-08-16 17:12:50 +00:00
rvalue-ref.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
safestack-byval.ll [MIR] Print on the given output instead of stderr. 2016-07-13 20:36:03 +00:00
single-dbg_value.ll [MIR] Print on the given output instead of stderr. 2016-07-13 20:36:03 +00:00
sret.ll DebugInfo: Remove MDString-based type references 2016-04-23 21:08:00 +00:00
sroasplit-1.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
sroasplit-2.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
sroasplit-3.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
sroasplit-4.ll DebugInfo: Remove MDString-based type references 2016-04-23 21:08:00 +00:00
sroasplit-5.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
stack-value-dwarf4.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
stmt-list-multiple-compile-units.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
stmt-list.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
stringpool.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
struct-loc.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
subrange-type.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
subreg.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
subregisters.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
template.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
tls.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
type_units_with_addresses.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
unattached-global.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
union-const.ll [PR27284] Reverse the ownership between DICompileUnit and DISubprogram. 2016-04-15 15:57:41 +00:00
union-template.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
vector.ll DebugInfo: New metadata representation for global variables. 2016-09-13 01:12:59 +00:00
vla.ll [SSP, 2/2] Create llvm.stackguard() intrinsic and lower it to LOAD_STACK_GUARD 2016-04-19 19:40:37 +00:00