diff options
author | David Xu <David.Xu@arm.com> | 2014-09-26 02:02:09 +0000 |
---|---|---|
committer | David Xu <David.Xu@arm.com> | 2014-09-26 02:02:09 +0000 |
commit | 64f661ee0bfc5cc581cb80fb2750ff359b48c43c (patch) | |
tree | 3644c767b03e5c468d761c89178761ce8532aa8d /llvm/lib/CodeGen/SelectionDAG | |
parent | a9353d17988f83b09ecaed076772c1a8281c3e12 (diff) | |
download | bcm5719-llvm-64f661ee0bfc5cc581cb80fb2750ff359b48c43c.tar.gz bcm5719-llvm-64f661ee0bfc5cc581cb80fb2750ff359b48c43c.zip |
Redundant store instructions should be removed as dead code
llvm-svn: 218493
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 33e70593d15..fdac0e27ace 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -9799,6 +9799,20 @@ SDValue DAGCombiner::visitSTORE(SDNode *N) { return Chain; } } + // If this is a store followed by a store with the same value to the same + // location, then the store is dead/noop. + if (StoreSDNode *ST1 = dyn_cast<StoreSDNode>(Chain)) { + if (ST1->getBasePtr() == Ptr && ST->getMemoryVT() == ST1->getMemoryVT() && + ST1->getValue() == Value && ST->isUnindexed() && !ST->isVolatile() && + ST1->isUnindexed() && + !ST1->isVolatile() && + // There can't be any side effects between the two stores, such as + // a call or store. + Chain.reachesChainWithoutSideEffects(SDValue(ST1, 0))) { + // The store is dead, remove it. + return Chain; + } + } // If this is an FP_ROUND or TRUNC followed by a store, fold this into a // truncating store. We can do this even if this is already a truncstore. |