mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-21 16:31:16 +00:00
f4a702c079
Don't terminate location ranges for register-described variables at the end of machine basic block if this register is never modified in the function body, except for the prologue and epilogue. Prologue location is guessed by FrameSetup flags on MachineInstructions, while epilogue location is deduced from debug locations of instructions in the basic blocks ending with return instructions. This patch is mostly targeted to fix non-trivial debug locations for variables addressed via stack and frame pointers. It is not really a generic fix. We can still produce poor debug info for register-described variables if this register *is* modified somewhere in the function, but in unrelated places. This might be the case for the debug info in optimized binaries (e.g. for local variables in inlined functions). LiveDebugVariables pass in CodeGen attempts to fix this problem by adjusting DBG_VALUE instructions, but this pass is tied to greedy register allocator, which is used in optimized builds only. Proper fix would likely involve generalizing LiveDebugVariables to all register allocators. See more discussion in http://reviews.llvm.org/D3933 review thread. I'm proceeding with this patch to fix immediate severe problems and important cases, e.g. fix completely broken debug info with AddressSanitizer and fix PR19307 (missing debug info for by-value std::string arguments). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@210492 91177308-0d34-0410-b5e6-96231b3b80d8 |
||
---|---|---|
.. | ||
AArch64 | ||
ARM | ||
COFF | ||
Inputs | ||
Mips | ||
PowerPC | ||
Sparc | ||
SystemZ | ||
X86 | ||
2009-10-16-Phi.ll | ||
2009-11-03-InsertExtractValue.ll | ||
2009-11-05-DeadGlobalVariable.ll | ||
2009-11-06-NamelessGlobalVariable.ll | ||
2009-11-10-CurrentFn.ll | ||
2010-01-05-DbgScope.ll | ||
2010-01-19-DbgScope.ll | ||
2010-03-12-llc-crash.ll | ||
2010-03-19-DbgDeclare.ll | ||
2010-03-24-MemberFn.ll | ||
2010-03-30-InvalidDbgInfoCrash.ll | ||
2010-04-06-NestedFnDbgInfo.ll | ||
2010-04-19-FramePtr.ll | ||
2010-05-03-DisableFramePtr.ll | ||
2010-05-03-OriginDIE.ll | ||
2010-05-10-MultipleCU.ll | ||
2010-06-29-InlinedFnLocalVar.ll | ||
2010-07-19-Crash.ll | ||
2010-10-01-crash.ll | ||
arm-relocs.test | ||
array.ll | ||
bug_null_debuginfo.ll | ||
constant-pointers.ll | ||
cross-cu-inlining.ll | ||
cross-cu-linkonce.ll | ||
cu-line-tables.ll | ||
cu-range-hole.ll | ||
cu-ranges.ll | ||
dead-argument-order.ll | ||
debug-info-qualifiers.ll | ||
debuginfofinder-multiple-cu.ll | ||
debuglineinfo.test | ||
dwarf-public-names.ll | ||
dwarfdump-debug-frame-simple.test | ||
dwarfdump-debug-loc-simple.test | ||
dwarfdump-dump-flags.test | ||
dwarfdump-line-dwo.test | ||
dwarfdump-pubnames.test | ||
dwarfdump-ranges.test | ||
dwarfdump-type-units.test | ||
dwarfdump-zlib.test | ||
empty.ll | ||
enum.ll | ||
global.ll | ||
incorrect-variable-debugloc.ll | ||
inheritance.ll | ||
inline-debug-info-multiret.ll | ||
inline-debug-info.ll | ||
inline-no-debug-info.ll | ||
inline-scopes.ll | ||
inlined-arguments.ll | ||
inlined-vars.ll | ||
llvm-symbolizer-zlib.test | ||
llvm-symbolizer.test | ||
lto-comp-dir.ll | ||
member-order.ll | ||
member-pointers.ll | ||
missing-abstract-variable.ll | ||
namespace_function_definition.ll | ||
namespace_inline_function_definition.ll | ||
namespace.ll | ||
restrict.ll | ||
sugared-constants.ll | ||
template-recursive-void.ll | ||
tu-composite.ll | ||
tu-member-pointer.ll | ||
two-cus-from-same-file.ll | ||
typedef.ll | ||
unconditional-branch.ll | ||
varargs.ll | ||
version.ll |