diff options
author | Nirav Dave <niravd@google.com> | 2017-08-09 13:37:07 +0000 |
---|---|---|
committer | Nirav Dave <niravd@google.com> | 2017-08-09 13:37:07 +0000 |
commit | 6110d3ad0095f81823e74d4f47a1efa3e095a406 (patch) | |
tree | be2123b6c50d1ae3363263f992181ded8637dd75 /llvm/lib/CodeGen/SelectionDAG | |
parent | 5a1f8726234a84c9520d6a1e68d0427b6984863e (diff) | |
download | bcm5719-llvm-6110d3ad0095f81823e74d4f47a1efa3e095a406.tar.gz bcm5719-llvm-6110d3ad0095f81823e74d4f47a1efa3e095a406.zip |
[DAG] Explicitly cleanup merged load values during store merge. NFCI.
llvm-svn: 310474
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index fd73802cceb..e1ef0de3649 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/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; |