[llvm] [DeadStoreElimination] Optimize tautological assignments (PR #75744)
Shreyansh Chouhan via llvm-commits
llvm-commits at lists.llvm.org
Sat Dec 23 08:18:16 PST 2023
================
@@ -1926,6 +1926,43 @@ struct DSEState {
if (InitC && InitC == StoredConstant)
return MSSA.isLiveOnEntryDef(
MSSA.getSkipSelfWalker()->getClobberingMemoryAccess(Def, BatchAA));
+
+ if (!Store)
+ return false;
+
+ // If there is a dominating condition, that ensures that the value
+ // being stored in a memory location is already present at the
+ // memory location, the store is a noop.
+ BasicBlock *StoreBB = DefI->getParent();
+ auto *StorePtr = Store->getOperand(1);
+
+ DomTreeNode *IDom = DT.getNode(StoreBB)->getIDom();
+ if (!IDom)
+ return false;
+
+ auto *TI = IDom->getBlock()->getTerminator();
+ ICmpInst::Predicate Pred;
+ BasicBlock *TrueBB, *FalseBB;
+
+ if (!match(TI, m_Br(m_ICmp(Pred, m_Load(m_Specific(StorePtr)),
+ m_Specific(StoredConstant)),
+ TrueBB, FalseBB)))
+ return false;
+
+ MemoryAccess *LastMod =
+ MSSA.getSkipSelfWalker()->getClobberingMemoryAccess(Def, BatchAA);
+
+ DomTreeNode *CDom = DT.getNode(LastMod->getBlock());
----------------
BK1603 wrote:
Thanks a lot @nikic! Resolved this in the latest commit.
https://github.com/llvm/llvm-project/pull/75744
More information about the llvm-commits
mailing list