[all-commits] [llvm/llvm-project] 0eee84: [DebugInfo][InstrRef] Terminate overlapping variab...
Jeremy Morse via All-commits
all-commits at lists.llvm.org
Mon Nov 29 15:38:03 PST 2021
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 0eee844539e406dfa8010a129ea3655d2298ac10
https://github.com/llvm/llvm-project/commit/0eee844539e406dfa8010a129ea3655d2298ac10
Author: Jeremy Morse <jeremy.morse at sony.com>
Date: 2021-11-29 (Mon, 29 Nov 2021)
Changed paths:
M llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp
M llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.h
M llvm/test/DebugInfo/MIR/X86/live-debug-values-fragments.mir
M llvm/unittests/CodeGen/InstrRefLDVTest.cpp
Log Message:
-----------
[DebugInfo][InstrRef] Terminate overlapping variable fragments
If we have a variable where its fragments are split into overlapping
segments:
DBG_VALUE $ax, $noreg, !123, !DIExpression(DW_OP_LLVM_fragment_0, 16)
...
DBG_VALUE $eax, $noreg, !123, !DIExpression(DW_OP_LLVM_fragment_0, 32)
we should only propagate the most recently assigned fragment out of a
block. LiveDebugValues only deals with live-in variable locations, as
overlaps within blocks is DbgEntityHistoryCalculators domain.
InstrRefBasedLDV has kept the accumulateFragmentMap method from
VarLocBasedLDV, we just need it to recognise DBG_INSTR_REFs. Once it's
produced a mapping of variable / fragments to the overlapped variable /
fragments, VLocTracker uses it to identify when a debug instruction needs
to terminate the other parts it overlaps with. The test is updated for
some standard "InstrRef picks different registers" variation, and the
order of some unrelated DBG_VALUEs changes.
Differential Revision: https://reviews.llvm.org/D114603
More information about the All-commits
mailing list