[llvm-branch-commits] [llvm] [SSAUpdaterBulk] Add PHI simplification pass. (PR #135180)
Matt Arsenault via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sun Apr 13 00:44:47 PDT 2025
================
@@ -222,3 +223,38 @@ void SSAUpdaterBulk::RewriteAllUses(DominatorTree *DT,
}
}
}
+
+// Perform a single pass of simplification over the worklist of PHIs.
+static void SimplifyPass(MutableArrayRef<PHINode *> Worklist) {
+ if (Worklist.empty())
+ return;
+
+ const DataLayout &DL = Worklist.front()->getParent()->getDataLayout();
+ for (PHINode *&PHI : Worklist) {
+ if (Value *Simplified = simplifyInstruction(PHI, DL)) {
+ PHI->replaceAllUsesWith(Simplified);
+ PHI->eraseFromParent();
+ PHI = nullptr; // Mark as removed.
+ }
+ }
+}
+
+static void DeduplicatePass(ArrayRef<PHINode *> Worklist) {
+ SmallDenseMap<BasicBlock *, unsigned> BBs;
+ for (PHINode *PHI : Worklist) {
+ if (PHI)
+ ++BBs[PHI->getParent()];
+ }
+
+ for (auto [BB, NumNewPHIs] : BBs) {
+ auto FirstExistedPN = std::next(BB->phis().begin(), NumNewPHIs);
+ EliminateNewDuplicatePHINodes(BB, FirstExistedPN);
+ }
+}
+
+void SSAUpdaterBulk::RewriteAndOptimizeAllUses(DominatorTree *DT) {
+ SmallVector<PHINode *, 4> PHIs;
+ RewriteAllUses(DT, &PHIs);
+ SimplifyPass(PHIs);
+ DeduplicatePass(PHIs);
+}
----------------
arsenm wrote:
```suggestion
}
```
https://github.com/llvm/llvm-project/pull/135180
More information about the llvm-branch-commits
mailing list