[llvm] [VPlan] Fix convoluted logic in simpl ext-last-lane (PR #196355)
Ramkumar Ramachandra via llvm-commits
llvm-commits at lists.llvm.org
Thu May 7 08:57:17 PDT 2026
https://github.com/artagnon updated https://github.com/llvm/llvm-project/pull/196355
>From b33d56474d4f10cb7eae3d4a28635632c7709c21 Mon Sep 17 00:00:00 2001
From: Ramkumar Ramachandra <artagnon at tenstorrent.com>
Date: Thu, 7 May 2026 16:46:38 +0100
Subject: [PATCH] [VPlan] Fix convoluted logic in simpl ext-last-lane
When performing a replacement, we need to check Def's users, not the
users under the extract-last-lane. Also, the transformation does not
depend on the Plan being unrolled.
---
.../Transforms/Vectorize/VPlanTransforms.cpp | 19 +++++++------------
1 file changed, 7 insertions(+), 12 deletions(-)
diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
index bcdb91a54e305..cdd67fe3946df 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
@@ -1669,6 +1669,13 @@ static void simplifyRecipe(VPSingleDefRecipe *Def, VPTypeAnalysis &TypeInfo) {
BuildVector->getOperand(BuildVector->getNumOperands() - 1));
return;
}
+
+ if (match(A, m_Broadcast(m_VPValue(X))))
+ return Def->replaceAllUsesWith(X);
+
+ if (vputils::isSingleScalar(A))
+ return Def->replaceAllUsesWith(A);
+
if (Plan->hasScalarVFOnly())
return Def->replaceAllUsesWith(A);
}
@@ -1791,18 +1798,6 @@ static void simplifyRecipe(VPSingleDefRecipe *Def, VPTypeAnalysis &TypeInfo) {
return;
}
- if (match(Def, m_ExtractLastLane(m_Broadcast(m_VPValue(A))))) {
- Def->replaceAllUsesWith(A);
- return;
- }
-
- if (match(Def, m_ExtractLastLane(m_VPValue(A))) &&
- vputils::isSingleScalar(A) && all_of(A->users(), [Def, A](VPUser *U) {
- return U->usesScalars(A) || Def == U;
- })) {
- return Def->replaceAllUsesWith(A);
- }
-
if (Plan->getConcreteUF() == 1 && match(Def, m_ExtractLastPart(m_VPValue(A))))
return Def->replaceAllUsesWith(A);
}
More information about the llvm-commits
mailing list