mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
Totally forget deallocated SDNodes in SDDbgInfo.
What would happen before that commit is that the SDDbgValues associated with a deallocated SDNode would be marked Invalidated, but SDDbgInfo would keep a map entry keyed by the SDNode pointer pointing to this list of invalidated SDDbgNodes. As the memory gets reused, the list might get wrongly associated with another new SDNode. As the SDDbgValues are cloned when they are transfered, this can lead to an exponential number of SDDbgValues being produced during DAGCombine like in http://llvm.org/bugs/show_bug.cgi?id=20893 Note that the previous behavior wasn't really buggy as the invalidation made sure that the SDDbgValues won't be used. This commit can be considered a memory optimization and as such is really hard to validate in a unit-test. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221709 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -128,6 +128,10 @@ public:
|
||||
DbgValMap[Node].push_back(V);
|
||||
}
|
||||
|
||||
/// \brief Invalidate all DbgValues attached to the node and remove
|
||||
/// it from the Node-to-DbgValues map.
|
||||
void erase(const SDNode *Node);
|
||||
|
||||
void clear() {
|
||||
DbgValMap.clear();
|
||||
DbgValues.clear();
|
||||
|
Reference in New Issue
Block a user