[DAG] Explicitly cleanup merged load values during store merge. NFCI.
authorNirav Dave <niravd@google.com>
Wed, 9 Aug 2017 13:37:07 +0000 (13:37 +0000)
committerNirav Dave <niravd@google.com>
Wed, 9 Aug 2017 13:37:07 +0000 (13:37 +0000)
llvm-svn: 310474

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

index fd73802..e1ef0de 100644 (file)
@@ -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;