From: Nirav Dave Date: Wed, 9 Aug 2017 13:37:07 +0000 (+0000) Subject: [DAG] Explicitly cleanup merged load values during store merge. NFCI. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=93120fa78491112fd6e1f4ac846c3bafad9068c0;p=llvm [DAG] Explicitly cleanup merged load values during store merge. NFCI. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@310474 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index fd73802cceb..e1ef0de3649 100644 --- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -13182,9 +13182,15 @@ bool DAGCombiner::MergeConsecutiveStores(StoreSDNode *St) { SDValue(NewLoad.getNode(), 1)); } - // Replace the all stores with the new store. - for (unsigned i = 0; i < NumElem; ++i) + // Replace the all stores with the new store. Recursively remove + // corresponding value if its no longer used. + for (unsigned i = 0; i < NumElem; ++i) { + SDValue Val = StoreNodes[i].MemNode->getOperand(1); CombineTo(StoreNodes[i].MemNode, NewStore); + if (Val.getNode()->use_empty()) + recursivelyDeleteUnusedNodes(Val.getNode()); + } + RV = true; StoreNodes.erase(StoreNodes.begin(), StoreNodes.begin() + NumElem); continue;