[llvm] [VPlan] Build initial VPlan 0 using HCFGBuilder for inner loops. (NFC) (PR #124432)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Sat Feb 8 13:05:07 PST 2025
================
@@ -9378,25 +9415,29 @@ LoopVectorizationPlanner::tryToBuildVPlanWithVPRecipes(VFRange &Range) {
Recipe = RecipeBuilder.handleReplication(Instr, Operands, Range);
RecipeBuilder.setRecipe(Instr, Recipe);
- if (isa<VPHeaderPHIRecipe>(Recipe)) {
- // VPHeaderPHIRecipes must be kept in the phi section of HeaderVPBB. In
- // the following cases, VPHeaderPHIRecipes may be created after non-phi
- // recipes and need to be moved to the phi section of HeaderVPBB:
- // * tail-folding (non-phi recipes computing the header mask are
- // introduced earlier than regular header phi recipes, and should appear
- // after them)
- // * Optimizing truncates to VPWidenIntOrFpInductionRecipe.
-
- assert((HeaderVPBB->getFirstNonPhi() == VPBB->end() ||
- CM.foldTailByMasking() || isa<TruncInst>(Instr)) &&
- "unexpected recipe needs moving");
+ if (isa<VPWidenIntOrFpInductionRecipe>(Recipe) && isa<TruncInst>(Instr)) {
+ // Optimized a truncate truncates to VPWidenIntOrFpInductionRecipe Move
+ // it to the phi section in the header.
Recipe->insertBefore(*HeaderVPBB, HeaderVPBB->getFirstNonPhi());
} else
- VPBB->appendRecipe(Recipe);
- }
-
- VPBlockUtils::insertBlockAfter(Plan->createVPBasicBlock(""), VPBB);
- VPBB = cast<VPBasicBlock>(VPBB->getSingleSuccessor());
+ Builder.insert(Recipe);
+ if (Recipe->getNumDefinedValues() == 1)
+ SingleDef->replaceAllUsesWith(Recipe->getVPSingleValue());
+ else
+ assert(Recipe->getNumDefinedValues() == 0 &&
+ "Unexpected multidef recipe");
+ R.eraseFromParent();
+ }
+
+ // Flatten the CFG in the loop. Masks for blocks have already been generated
+ // and added to recipes as needed. To do so, first disconnect VPBB from its
+ // predecessors and successors. Then connect VPBB to the previously visited
+ // VPBB.
----------------
fhahn wrote:
done thanks
https://github.com/llvm/llvm-project/pull/124432
More information about the llvm-commits
mailing list