[llvm] [VPlan] Model epilogue skeleton in VPlan by wrapping in VPIRBBs (NFCI). (PR #222312)

Ramkumar Ramachandra via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 9 07:14:57 PDT 2026


================
@@ -1461,6 +1429,58 @@ static void insertCheckBlockBeforeVectorLoop(VPlan &Plan,
   addIncomingForLastPredecessor(ScalarPH);
 }
 
+void VPlanTransforms::modelGeneratedMainLoopBlocks(
+    VPlan &Plan, VPlan &MainPlan, VPIRBasicBlock *EnteredFrom) {
+  // Map blocks from MainPlan to new, empty VPIRBasicBlocks in Plan, so the
+  // skeleton CFG can be modeled explicitly. MainPlan's entry maps to Plan's
+  // now-disconnected entry, its scalar PH to EnteredFrom, mapped last so it can
+  // be dropped as source below. Blocks without successors have no edges.
+  auto *MainEntry = cast<VPIRBasicBlock>(MainPlan.getEntry());
+  auto *MainScalarPH = cast<VPIRBasicBlock>(MainPlan.getScalarPreheader());
+  SmallVector<VPIRBasicBlock *> BypassBlocks;
----------------
artagnon wrote:

Isn't this just an array of at-most 3 VPIRBasicBlocks? The SCEV-check block, the mem-check block, and the minimum-iteration-count block? Perhaps better to be explicit about the three blocks? (I think a comment could also work). I wonder if keeping these three blocks centrally could help with the other patch where we use VPSCEVExpander for the first two blocks?

```suggestion
  std::array<VPIRBasicBlock *, 3> BypassBlocks;
```

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


More information about the llvm-commits mailing list