[llvm] 7b3ec51 - [VPlan] Consolidate logic for narrowToSingleScalars (NFCI) (#167360)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 3 12:25:56 PST 2025
Author: Ramkumar Ramachandra
Date: 2025-12-03T20:25:52Z
New Revision: 7b3ec5191a701dcebbf3c05a53b938ddd5f3c2d1
URL: https://github.com/llvm/llvm-project/commit/7b3ec5191a701dcebbf3c05a53b938ddd5f3c2d1
DIFF: https://github.com/llvm/llvm-project/commit/7b3ec5191a701dcebbf3c05a53b938ddd5f3c2d1.diff
LOG: [VPlan] Consolidate logic for narrowToSingleScalars (NFCI) (#167360)
The logic for narrowing to single scalar recipes is in two different
places: narrowToSingleScalarRecipes and legalizeAndOptimizeInductions.
Consolidate them.
Added:
Modified:
llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
index 38024aa6897fc..d2f9263e32213 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
@@ -757,31 +757,6 @@ static void legalizeAndOptimizeInductions(VPlan &Plan) {
if (!PhiR)
continue;
- // Try to narrow wide and replicating recipes to uniform recipes, based on
- // VPlan analysis.
- // TODO: Apply to all recipes in the future, to replace legacy uniformity
- // analysis.
- auto Users = collectUsersRecursively(PhiR);
- for (VPUser *U : reverse(Users)) {
- auto *Def = dyn_cast<VPRecipeWithIRFlags>(U);
- auto *RepR = dyn_cast<VPReplicateRecipe>(U);
- // Skip recipes that shouldn't be narrowed.
- if (!Def || !isa<VPReplicateRecipe, VPWidenRecipe>(Def) ||
- Def->getNumUsers() == 0 || !Def->getUnderlyingValue() ||
- (RepR && (RepR->isSingleScalar() || RepR->isPredicated())))
- continue;
-
- // Skip recipes that may have other lanes than their first used.
- if (!vputils::isSingleScalar(Def) && !vputils::onlyFirstLaneUsed(Def))
- continue;
-
- auto *Clone = new VPReplicateRecipe(Def->getUnderlyingInstr(),
- Def->operands(), /*IsUniform*/ true,
- /*Mask*/ nullptr, /*Flags*/ *Def);
- Clone->insertAfter(Def);
- Def->replaceAllUsesWith(Clone);
- }
-
// Replace wide pointer inductions which have only their scalars used by
// PtrAdd(IndStart, ScalarIVSteps (0, Step)).
if (auto *PtrIV = dyn_cast<VPWidenPointerInductionRecipe>(&Phi)) {
@@ -1546,8 +1521,11 @@ static void narrowToSingleScalarRecipes(VPlan &Plan) {
continue;
}
- // Skip recipes that aren't single scalars.
- if (!vputils::isSingleScalar(RepOrWidenR))
+ // Skip recipes that aren't single scalars and don't just have their first
+ // lane used.
+ if (!vputils::isSingleScalar(RepOrWidenR) &&
+ (!vputils::onlyFirstLaneUsed(RepOrWidenR) ||
+ RepOrWidenR->getNumUsers() == 0))
continue;
// Skip recipes for which conversion to single-scalar does introduce
More information about the llvm-commits
mailing list