aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
diff options
context:
space:
mode:
authorJeremy Morse <jeremy.morse.llvm@gmail.com>2019-06-13 12:51:57 +0000
committerJeremy Morse <jeremy.morse.llvm@gmail.com>2019-06-13 12:51:57 +0000
commitbf2b2f08b02d424ee70260336974fb34d8779c3e (patch)
treeb9e679d738fe0b0cb1fb2089e45b542dd0288200 /llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
parent1fca3b1972ddc33536b0f8d3b8a3b19285da800c (diff)
downloadllvm-bf2b2f08b02d424ee70260336974fb34d8779c3e.zip
llvm-bf2b2f08b02d424ee70260336974fb34d8779c3e.tar.gz
llvm-bf2b2f08b02d424ee70260336974fb34d8779c3e.tar.bz2
[DebugInfo] Honour variable fragments in LiveDebugValues
This patch makes the LiveDebugValues pass consider fragments when propagating DBG_VALUE insts between blocks, fixing PR41979. Fragment info for a variable location is added to the open-ranges key, which allows distinct fragments to be tracked separately. To handle overlapping fragments things become slightly funkier. To avoid excessive searching for overlaps in the data-flow part of LiveDebugValues, this patch: * Pre-computes pairings of fragments that overlap, for each DILocalVariable * During data-flow, whenever something happens that causes an open range to be terminated (via erase), any fragments pre-determined to overlap are also terminated. The effect of which is that when encountering a DBG_VALUE fragment that overlaps others, the overlapped fragments do not get propagated to other blocks. We still rely on later location-list building to correctly handle overlapping fragments within blocks. It's unclear whether a mixture of DBG_VALUEs with and without fragmented expressions are legitimate. To avoid suprises, this patch interprets a DBG_VALUE with no fragment as overlapping any DBG_VALUE _with_ a fragment. Differential Revision: https://reviews.llvm.org/D62904 llvm-svn: 363256
Diffstat (limited to 'llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp')
0 files changed, 0 insertions, 0 deletions