diff options
author | Jeremy Morse <jeremy.morse.llvm@gmail.com> | 2019-06-13 12:51:57 +0000 |
---|---|---|
committer | Jeremy Morse <jeremy.morse.llvm@gmail.com> | 2019-06-13 12:51:57 +0000 |
commit | bf2b2f08b02d424ee70260336974fb34d8779c3e (patch) | |
tree | b9e679d738fe0b0cb1fb2089e45b542dd0288200 /llvm/lib/CodeGen/MachineFunction.cpp | |
parent | 1fca3b1972ddc33536b0f8d3b8a3b19285da800c (diff) | |
download | llvm-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/CodeGen/MachineFunction.cpp')
0 files changed, 0 insertions, 0 deletions