[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