[llvm] [VPlan] Simplify extract-lane of all single-scalars (PR #194838)
Ramkumar Ramachandra via llvm-commits
llvm-commits at lists.llvm.org
Sat May 2 04:35:14 PDT 2026
https://github.com/artagnon updated https://github.com/llvm/llvm-project/pull/194838
>From b0f6b6e6549a5487b55ebb7f2aff8c0c07817d8f Mon Sep 17 00:00:00 2001
From: Ramkumar Ramachandra <artagnon at tenstorrent.com>
Date: Wed, 29 Apr 2026 12:22:59 +0100
Subject: [PATCH] [VPlan] Simplify extract-lane of all single-scalars
Checking against vputils::isSingleScalar is sufficient for both
correctness and profitability.
---
llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp | 8 +++-----
.../LoopVectorize/X86/replicating-load-store-costs.ll | 1 -
2 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
index 11e5b18bca871..5facd6e15159a 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
@@ -1794,11 +1794,9 @@ static void simplifyRecipe(VPSingleDefRecipe *Def, VPTypeAnalysis &TypeInfo) {
}
if (match(Def, m_ExtractLastLane(m_VPValue(A))) &&
- ((isa<VPInstruction>(A) && vputils::isSingleScalar(A)) ||
- (isa<VPReplicateRecipe>(A) &&
- cast<VPReplicateRecipe>(A)->isSingleScalar())) &&
- all_of(A->users(),
- [Def, A](VPUser *U) { return U->usesScalars(A) || Def == U; })) {
+ vputils::isSingleScalar(A) && all_of(A->users(), [Def, A](VPUser *U) {
+ return U->usesScalars(A) || Def == U;
+ })) {
return Def->replaceAllUsesWith(A);
}
diff --git a/llvm/test/Transforms/LoopVectorize/X86/replicating-load-store-costs.ll b/llvm/test/Transforms/LoopVectorize/X86/replicating-load-store-costs.ll
index 6f74f7c5154b3..3063207e47b25 100644
--- a/llvm/test/Transforms/LoopVectorize/X86/replicating-load-store-costs.ll
+++ b/llvm/test/Transforms/LoopVectorize/X86/replicating-load-store-costs.ll
@@ -477,7 +477,6 @@ define double @test_load_used_by_other_load_scev(ptr %ptr.a, ptr %ptr.b, ptr %pt
; I64-NEXT: [[TMP3:%.*]] = icmp eq i64 [[INDEX_NEXT]], 100
; I64-NEXT: br i1 [[TMP3]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP8:![0-9]+]]
; I64: [[MIDDLE_BLOCK]]:
-; I64-NEXT: [[VECTOR_RECUR_EXTRACT:%.*]] = extractelement <2 x double> [[TMP2]], i64 1
; I64-NEXT: br label %[[SCALAR_PH:.*]]
; I64: [[SCALAR_PH]]:
;
More information about the llvm-commits
mailing list