[llvm] [VPlan] Use RPOT traversal in CSE, fixing potential crash (PR #187548)

Ramkumar Ramachandra via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 31 01:02:46 PDT 2026


================
@@ -2687,6 +2687,12 @@ void VPlanTransforms::cse(VPlan &Plan) {
       auto *Def = dyn_cast<VPSingleDefRecipe>(&R);
       if (!Def || !VPCSEDenseMapInfo::canHandle(Def))
         continue;
+      // The def must dominates all uses, an invariant which could be broken
+      // when the use is in a non-dominated sucessor-phi.
+      if (any_of(Def->users(), [&VPDT, &VPBB](VPUser *U) {
+            return !VPDT.dominates(VPBB, cast<VPRecipeBase>(U)->getParent());
+          }))
+        continue;
----------------
artagnon wrote:

Er, yes: you're absolutely right :)

https://github.com/llvm/llvm-project/pull/187548


More information about the llvm-commits mailing list