[llvm] [VPlan] Fix convoluted logic in simpl ext-last-lane (PR #196355)
via llvm-commits
llvm-commits at lists.llvm.org
Thu May 7 08:49:38 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-transforms
Author: Ramkumar Ramachandra (artagnon)
<details>
<summary>Changes</summary>
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.
---
Full diff: https://github.com/llvm/llvm-project/pull/196355.diff
1 Files Affected:
- (modified) llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp (+8-12)
``````````diff
diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
index bcdb91a54e305..933219c1f7b9d 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
@@ -1669,6 +1669,14 @@ 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->replaceUsesWithIf(
+ A, [Def](const VPUser &U, unsigned) { return U.usesScalars(Def); });
+
if (Plan->hasScalarVFOnly())
return Def->replaceAllUsesWith(A);
}
@@ -1791,18 +1799,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);
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/196355
More information about the llvm-commits
mailing list