[llvm] 8f7bff3 - [VPlan] Strip WidenStore handling in narrowToSingleScalars (#184765)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 28 23:59:53 PDT 2026
Author: Ramkumar Ramachandra
Date: 2026-04-29T06:59:47Z
New Revision: 8f7bff3c24da201298bbcce35e4d8208b69b1795
URL: https://github.com/llvm/llvm-project/commit/8f7bff3c24da201298bbcce35e4d8208b69b1795
DIFF: https://github.com/llvm/llvm-project/commit/8f7bff3c24da201298bbcce35e4d8208b69b1795.diff
LOG: [VPlan] Strip WidenStore handling in narrowToSingleScalars (#184765)
Although the codepath seems to be reached in a few cases, it doesn't
seem to be making any changes. The utility of the transform is in
question.
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 7eab86e8fd7ca..4c0f7d5bd2f93 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
@@ -1809,43 +1809,13 @@ static void narrowToSingleScalarRecipes(VPlan &Plan) {
for (VPBasicBlock *VPBB : VPBlockUtils::blocksOnly<VPBasicBlock>(
vp_depth_first_shallow(Plan.getVectorLoopRegion()->getEntry()))) {
for (VPRecipeBase &R : make_early_inc_range(reverse(*VPBB))) {
- if (!isa<VPWidenRecipe, VPWidenGEPRecipe, VPReplicateRecipe,
- VPWidenStoreRecipe>(&R))
+ if (!isa<VPWidenRecipe, VPWidenGEPRecipe, VPReplicateRecipe>(&R))
continue;
auto *RepR = dyn_cast<VPReplicateRecipe>(&R);
if (RepR && (RepR->isSingleScalar() || RepR->isPredicated()))
continue;
- // Convert an unmasked scatter with an uniform address into
- // extract-last-lane + scalar store.
- // TODO: Add a profitability check comparing the cost of a scatter vs.
- // extract + scalar store.
- auto *WidenStoreR = dyn_cast<VPWidenStoreRecipe>(&R);
- if (WidenStoreR && vputils::isSingleScalar(WidenStoreR->getAddr()) &&
- !WidenStoreR->isConsecutive()) {
- VPValue *Mask = WidenStoreR->getMask();
-
- // Only convert the scatter to a scalar store if it is unmasked.
- // TODO: Support converting scatter masked by the header mask to scalar
- // store.
- if (Mask)
- continue;
-
- auto *Extract = new VPInstruction(VPInstruction::ExtractLastLane,
- {WidenStoreR->getOperand(1)});
- Extract->insertBefore(WidenStoreR);
-
- // TODO: Sink the scalar store recipe to middle block if possible.
- auto *ScalarStore = new VPReplicateRecipe(
- &WidenStoreR->getIngredient(), {Extract, WidenStoreR->getAddr()},
- true /*IsSingleScalar*/, nullptr /*Mask*/, {},
- *WidenStoreR /*Metadata*/);
- ScalarStore->insertBefore(WidenStoreR);
- WidenStoreR->eraseFromParent();
- continue;
- }
-
- auto *RepOrWidenR = dyn_cast<VPRecipeWithIRFlags>(&R);
+ auto *RepOrWidenR = cast<VPRecipeWithIRFlags>(&R);
if (RepR && RepR->getOpcode() == Instruction::Store &&
vputils::isSingleScalar(RepR->getOperand(1))) {
auto *Clone = new VPReplicateRecipe(
@@ -1866,7 +1836,7 @@ static void narrowToSingleScalarRecipes(VPlan &Plan) {
}
// Skip recipes that aren't single scalars.
- if (!RepOrWidenR || !vputils::isSingleScalar(RepOrWidenR))
+ if (!vputils::isSingleScalar(RepOrWidenR))
continue;
// Predicate to check if a user of Op introduces extra broadcasts.
More information about the llvm-commits
mailing list