================ @@ -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 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits