[VPlan] Create vector header and latch VPBBs in createInitialVPlan (NFC)
The empty header and latch blocks can be created together with the vector loop region. This is in preparation for splitting up the very large tryToBuildVPlanWithVPRecipes into several distinct functions, as suggested multiple times, including in https://github.com/llvm/llvm-project/pull/94760
This commit is contained in:
@@ -8548,11 +8548,6 @@ LoopVectorizationPlanner::tryToBuildVPlanWithVPRecipes(VFRange &Range) {
|
||||
createTripCountSCEV(Legal->getWidestInductionType(), PSE, OrigLoop),
|
||||
*PSE.getSE(), RequiresScalarEpilogueCheck, CM.foldTailByMasking(),
|
||||
OrigLoop);
|
||||
VPBasicBlock *HeaderVPBB = new VPBasicBlock("vector.body");
|
||||
VPBasicBlock *LatchVPBB = new VPBasicBlock("vector.latch");
|
||||
VPBlockUtils::insertBlockAfter(LatchVPBB, HeaderVPBB);
|
||||
Plan->getVectorLoopRegion()->setEntry(HeaderVPBB);
|
||||
Plan->getVectorLoopRegion()->setExiting(LatchVPBB);
|
||||
|
||||
// Don't use getDecisionAndClampRange here, because we don't know the UF
|
||||
// so this function is better to be conservative, rather than to split
|
||||
@@ -8606,6 +8601,7 @@ LoopVectorizationPlanner::tryToBuildVPlanWithVPRecipes(VFRange &Range) {
|
||||
LoopBlocksDFS DFS(OrigLoop);
|
||||
DFS.perform(LI);
|
||||
|
||||
VPBasicBlock *HeaderVPBB = Plan->getVectorLoopRegion()->getEntryBasicBlock();
|
||||
VPBasicBlock *VPBB = HeaderVPBB;
|
||||
BasicBlock *HeaderBB = OrigLoop->getHeader();
|
||||
bool NeedsMasks =
|
||||
|
||||
@@ -820,8 +820,14 @@ VPlanPtr VPlan::createInitialVPlan(const SCEV *TripCount, ScalarEvolution &SE,
|
||||
auto Plan = std::make_unique<VPlan>(Entry, VecPreheader);
|
||||
Plan->TripCount =
|
||||
vputils::getOrCreateVPValueForSCEVExpr(*Plan, TripCount, SE);
|
||||
// Create empty VPRegionBlock, to be filled during processing later.
|
||||
auto *TopRegion = new VPRegionBlock("vector loop", false /*isReplicator*/);
|
||||
// Create VPRegionBlock, with empty header and latch blocks, to be filled
|
||||
// during processing later.
|
||||
VPBasicBlock *HeaderVPBB = new VPBasicBlock("vector.body");
|
||||
VPBasicBlock *LatchVPBB = new VPBasicBlock("vector.latch");
|
||||
VPBlockUtils::insertBlockAfter(LatchVPBB, HeaderVPBB);
|
||||
auto *TopRegion = new VPRegionBlock(HeaderVPBB, LatchVPBB, "vector loop",
|
||||
false /*isReplicator*/);
|
||||
|
||||
VPBlockUtils::insertBlockAfter(TopRegion, VecPreheader);
|
||||
VPBasicBlock *MiddleVPBB = new VPBasicBlock("middle.block");
|
||||
VPBlockUtils::insertBlockAfter(MiddleVPBB, TopRegion);
|
||||
|
||||
Reference in New Issue
Block a user