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.