]> granicus.if.org Git - llvm/commit
[DebugInfo] LiveDebugValues: move DBG_VALUE creation into VarLoc class
authorJeremy Morse <jeremy.morse.llvm@gmail.com>
Fri, 4 Oct 2019 10:53:47 +0000 (10:53 +0000)
committerJeremy Morse <jeremy.morse.llvm@gmail.com>
Fri, 4 Oct 2019 10:53:47 +0000 (10:53 +0000)
commitc1878fadc3202f8c6f339ae7eb0fa9ee3a8d5516
tree338840010bf163e3f5642db380fbafacb95fba02
parent94ef6147f33dad5a9d23b7d88966d8e130e1be72
[DebugInfo] LiveDebugValues: move DBG_VALUE creation into VarLoc class

Rather than having a mixture of location-state shared between DBG_VALUEs
and VarLoc objects in LiveDebugValues, this patch makes VarLoc the
master record of variable locations. The refactoring means that the
transfer of locations from one place to another is always a performed by
an operation on an existing VarLoc, that produces another transferred
VarLoc. DBG_VALUEs are only created at the end of LiveDebugValues, once
all locations are known. As a plus, there is now only one method where
DBG_VALUEs can be created.

The test case added covers a circumstance that is now impossible to
express in LiveDebugValues: if an already-indirect DBG_VALUE is spilt,
previously it would have been restored-from-spill as a direct DBG_VALUE.
We now don't lose this information along the way, as VarLocs always
refer back to the "original" non-transfer DBG_VALUE, and we can always
work out whether a location was "originally" indirect.

Differential Revision: https://reviews.llvm.org/D67398

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373727 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/LiveDebugValues.cpp
test/DebugInfo/MIR/X86/live-debug-values-restore.mir