[llvm] [VPlan] Improve narrowToSingleScalarRecipes (NFC) (PR #158427)
Ramkumar Ramachandra via llvm-commits
llvm-commits at lists.llvm.org
Sat Sep 13 08:00:32 PDT 2025
https://github.com/artagnon created https://github.com/llvm/llvm-project/pull/158427
None
>From a275559b866a6e446fff135b65fbfa3b27b700bd Mon Sep 17 00:00:00 2001
From: Ramkumar Ramachandra <ramkumar.ramachandra at codasip.com>
Date: Sat, 13 Sep 2025 10:57:31 +0100
Subject: [PATCH] [VPlan] Improve narrowToSingleScalarRecipes (NFC)
---
llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
index 2cac5557daeee..14d32f5225a2d 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
@@ -1307,13 +1307,13 @@ static void narrowToSingleScalarRecipes(VPlan &Plan) {
if (RepR && (RepR->isSingleScalar() || RepR->isPredicated()))
continue;
- auto *RepOrWidenR = cast<VPSingleDefRecipe>(&R);
- if (RepR && isa<StoreInst>(RepR->getUnderlyingInstr()) &&
+ // Handle replicate-stores to single-scalar address.
+ if (RepR && RepR->getOpcode() == Instruction::Store &&
vputils::isSingleScalar(RepR->getOperand(1))) {
auto *Clone = new VPReplicateRecipe(
- RepOrWidenR->getUnderlyingInstr(), RepOrWidenR->operands(),
+ RepR->getUnderlyingInstr(), RepR->operands(),
true /*IsSingleScalar*/, nullptr /*Mask*/, *RepR /*Metadata*/);
- Clone->insertBefore(RepOrWidenR);
+ Clone->insertBefore(RepR);
auto *Ext = new VPInstruction(VPInstruction::ExtractLastElement,
{Clone->getOperand(0)});
Ext->insertBefore(Clone);
@@ -1325,6 +1325,7 @@ static void narrowToSingleScalarRecipes(VPlan &Plan) {
// Skip recipes that aren't single scalars or don't have only their
// scalar results used. In the latter case, we would introduce extra
// broadcasts.
+ auto *RepOrWidenR = cast<VPSingleDefRecipe>(&R);
if (!vputils::isSingleScalar(RepOrWidenR) ||
!all_of(RepOrWidenR->users(), [RepOrWidenR](const VPUser *U) {
return U->usesScalars(RepOrWidenR) ||
More information about the llvm-commits
mailing list