diff options
author | dim <dim@FreeBSD.org> | 2014-11-24 18:43:37 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2014-11-24 18:43:37 +0000 |
commit | 82ca21468e7fe6a5112961ba86434579bed3f204 (patch) | |
tree | c2772f1f62ff857fee7802d46eb79f45d45d6d54 /contrib/llvm/patches/patch-r274442-llvm-r221709-debug-oom.diff | |
parent | 6148c19c738a92f344008aa3f88f4e008bada0ee (diff) | |
download | FreeBSD-src-82ca21468e7fe6a5112961ba86434579bed3f204.zip FreeBSD-src-82ca21468e7fe6a5112961ba86434579bed3f204.tar.gz |
Cleanup patch set, and update README.TXT. Add three new patches.
Diffstat (limited to 'contrib/llvm/patches/patch-r274442-llvm-r221709-debug-oom.diff')
-rw-r--r-- | contrib/llvm/patches/patch-r274442-llvm-r221709-debug-oom.diff | 73 |
1 files changed, 0 insertions, 73 deletions
diff --git a/contrib/llvm/patches/patch-r274442-llvm-r221709-debug-oom.diff b/contrib/llvm/patches/patch-r274442-llvm-r221709-debug-oom.diff deleted file mode 100644 index f70ddce..0000000 --- a/contrib/llvm/patches/patch-r274442-llvm-r221709-debug-oom.diff +++ /dev/null @@ -1,73 +0,0 @@ -Pull in r221709 from upstream llvm trunk (by Frédéric Riss): - - 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. - -This should fix abnormally large memory usage and resulting OOM crashes -when compiling certain ports with debug information. - -Reported by: Dmitry Marakasov <amdmi3@amdmi3.ru> -Upstream PRs: http://llvm.org/PR19031 http://llvm.org/PR20893 - -Introduced here: http://svnweb.freebsd.org/changeset/base/274442 - -Index: include/llvm/CodeGen/SelectionDAG.h -=================================================================== ---- include/llvm/CodeGen/SelectionDAG.h -+++ include/llvm/CodeGen/SelectionDAG.h -@@ -127,6 +127,10 @@ class SDDbgInfo { - 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(); -Index: lib/CodeGen/SelectionDAG/SelectionDAG.cpp -=================================================================== ---- lib/CodeGen/SelectionDAG/SelectionDAG.cpp -+++ lib/CodeGen/SelectionDAG/SelectionDAG.cpp -@@ -625,6 +625,15 @@ void SelectionDAG::DeleteNodeNotInCSEMaps(SDNode * - DeallocateNode(N); - } - -+void SDDbgInfo::erase(const SDNode *Node) { -+ DbgValMapType::iterator I = DbgValMap.find(Node); -+ if (I == DbgValMap.end()) -+ return; -+ for (unsigned J = 0, N = I->second.size(); J != N; ++J) -+ I->second[J]->setIsInvalidated(); -+ DbgValMap.erase(I); -+} -+ - void SelectionDAG::DeallocateNode(SDNode *N) { - if (N->OperandsNeedDelete) - delete[] N->OperandList; -@@ -635,10 +644,9 @@ void SelectionDAG::DeallocateNode(SDNode *N) { - - NodeAllocator.Deallocate(AllNodes.remove(N)); - -- // If any of the SDDbgValue nodes refer to this SDNode, invalidate them. -- ArrayRef<SDDbgValue*> DbgVals = DbgInfo->getSDDbgValues(N); -- for (unsigned i = 0, e = DbgVals.size(); i != e; ++i) -- DbgVals[i]->setIsInvalidated(); -+ // If any of the SDDbgValue nodes refer to this SDNode, invalidate -+ // them and forget about that node. -+ DbgInfo->erase(N); - } - - /// RemoveNodeFromCSEMaps - Take the specified node out of the CSE map that |