[llvm] [VPlan] Strip VPDT-assert forbidding replicate regions (PR #189342)

Ramkumar Ramachandra via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 2 08:29:17 PDT 2026


================
@@ -208,6 +208,69 @@ TEST_F(VPDominatorTreeTest, DominanceRegionsTest) {
     checkDomChildren(VPDT, R1BB3, {VPBB2});
     checkDomChildren(VPDT, VPBB2, {Plan.getScalarHeader()});
   }
+
+  {
+    // 2 nested replicate regions.
+    //  VPBB1
+    //    |
+    //  R1 {
+    //         R1BB1 <-+
+    //       /         |
+    //   R2 {          |
+    //     \           |
+    //     R2BB1<-+    |
+    //       |    |   R1BB2
+    //     R2BB2-/     |
+    //        \        |
+    //         R2BB3   |
+    //   }            /
+    //      \        /
+    //        R1BB3
+    //  }
+    //   |
+    //  VPBB2
+    //
+    VPlan &Plan = getPlan();
+    VPBasicBlock *R1BB1 = Plan.createVPBasicBlock("R1BB1");
+    VPBasicBlock *R1BB2 = Plan.createVPBasicBlock("R1BB2");
+    VPBasicBlock *R1BB3 = Plan.createVPBasicBlock("R1BB3");
+    VPRegionBlock *R1 = Plan.createReplicateRegion(R1BB1, R1BB3, "R1");
+
+    VPBasicBlock *R2BB1 = Plan.createVPBasicBlock("R2BB1");
+    VPBasicBlock *R2BB2 = Plan.createVPBasicBlock("R2BB2");
+    VPBasicBlock *R2BB3 = Plan.createVPBasicBlock("R2BB3");
+    VPRegionBlock *R2 = Plan.createReplicateRegion(R2BB1, R2BB3, "R2");
+    R2BB2->setParent(R2);
+    VPBlockUtils::connectBlocks(R2BB1, R2BB2);
+    VPBlockUtils::connectBlocks(R2BB2, R2BB1);
+    VPBlockUtils::connectBlocks(R2BB2, R2BB3);
+
+    R2->setParent(R1);
+    VPBlockUtils::connectBlocks(R1BB1, R2);
+    R1BB2->setParent(R1);
+    VPBlockUtils::connectBlocks(R1BB1, R1BB2);
+    VPBlockUtils::connectBlocks(R1BB2, R1BB3);
+    VPBlockUtils::connectBlocks(R2, R1BB3);
+
+    VPBasicBlock *VPBB1 = Plan.getEntry();
+    VPBlockUtils::connectBlocks(VPBB1, R1);
+    VPBasicBlock *VPBB2 = Plan.createVPBasicBlock("VPBB2");
+    VPBlockUtils::connectBlocks(R1, VPBB2);
+
+    VPBlockUtils::connectBlocks(VPBB2, Plan.getScalarHeader());
+    VPDominatorTree VPDT(Plan);
+
+    checkDomChildren(VPDT, VPBB1, {R1});
----------------
artagnon wrote:

Oops, thanks for catching!

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


More information about the llvm-commits mailing list