[llvm] [SLP] NFC. Add hasState check. (PR #122443)
Han-Kuan Chen via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 10 07:39:13 PST 2025
https://github.com/HanKuanChen updated https://github.com/llvm/llvm-project/pull/122443
>From 184736df58fce1a323d3e75c49cc46d6bbf0e7d9 Mon Sep 17 00:00:00 2001
From: Han-Kuan Chen <hankuan.chen at sifive.com>
Date: Fri, 10 Jan 2025 04:02:19 -0800
Subject: [PATCH 1/3] [SLP] NFC. Add hasState check.
---
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index cdfec332af37ab..a3ee90e6207c04 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -9877,6 +9877,7 @@ void BoUpSLP::transformNodes() {
buildTree_rec(Slice, 0, EdgeInfo(&E, UINT_MAX));
if (PrevSize + 1 == VectorizableTree.size() &&
VectorizableTree[PrevSize]->isGather() &&
+ VectorizableTree[PrevSize]->hasState() &&
VectorizableTree[PrevSize]->getOpcode() !=
Instruction::ExtractElement &&
!isSplat(Slice)) {
@@ -13576,9 +13577,11 @@ BoUpSLP::isGatherShuffledEntry(
if (!TE->UserTreeIndices.empty() &&
TE->UserTreeIndices.front().UserTE->isGather() &&
TE->UserTreeIndices.front().EdgeIdx == UINT_MAX) {
- assert((TE->Idx == 0 || TE->getOpcode() == Instruction::ExtractElement ||
- isSplat(TE->Scalars)) &&
- "Expected splat or extractelements only node.");
+ assert(
+ (TE->Idx == 0 ||
+ (TE->hasState() && TE->getOpcode() == Instruction::ExtractElement) ||
+ isSplat(TE->Scalars)) &&
+ "Expected splat or extractelements only node.");
return {};
}
unsigned SliceSize = getPartNumElems(VL.size(), NumParts);
>From 5853a032bd078b15c1b7d0232452f129cb5e4c83 Mon Sep 17 00:00:00 2001
From: Han-Kuan Chen <hankuan.chen at sifive.com>
Date: Fri, 10 Jan 2025 07:03:05 -0800
Subject: [PATCH 2/3] add hasState check
---
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index a3ee90e6207c04..342bcab253a0b5 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -10003,7 +10003,7 @@ void BoUpSLP::transformNodes() {
if (LoadEntriesToVectorize.empty()) {
// Single load node - exit.
- if (VectorizableTree.size() <= 1 &&
+ if (VectorizableTree.size() <= 1 && VectorizableTree.front()->hasState() &&
VectorizableTree.front()->getOpcode() == Instruction::Load)
return;
// Small graph with small VF - exit.
>From a992d6413fb35b7c3944845c5cbcd8662ff2b11e Mon Sep 17 00:00:00 2001
From: Han-Kuan Chen <hankuan.chen at sifive.com>
Date: Fri, 10 Jan 2025 07:32:52 -0800
Subject: [PATCH 3/3] merge hasState
---
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index 342bcab253a0b5..83f711080b79c5 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -11927,8 +11927,8 @@ bool BoUpSLP::isFullyVectorizableTinyTree(bool ForReduction) const {
TE->getOpcode() == Instruction::ExtractElement) ||
all_of(TE->Scalars, IsaPred<ExtractElementInst, UndefValue>)) &&
isFixedVectorShuffle(TE->Scalars, Mask, AC)) ||
- ((TE->hasState() && TE->getOpcode() == Instruction::Load) &&
- (!TE->hasState() || !TE->isAltShuffle())) ||
+ (TE->hasState() && TE->getOpcode() == Instruction::Load &&
+ !TE->isAltShuffle()) ||
any_of(TE->Scalars, IsaPred<LoadInst>));
};
More information about the llvm-commits
mailing list