[llvm] d3aea77 - [SLP] Move transformMaskAfterShuffle into BaseShuffleAnalysis and use it as much as possible. (#123896)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 22 17:47:41 PST 2025
Author: Han-Kuan Chen
Date: 2025-01-23T09:47:38+08:00
New Revision: d3aea77f50a2215a9fa50c1bfa5f4b9717d8e928
URL: https://github.com/llvm/llvm-project/commit/d3aea77f50a2215a9fa50c1bfa5f4b9717d8e928
DIFF: https://github.com/llvm/llvm-project/commit/d3aea77f50a2215a9fa50c1bfa5f4b9717d8e928.diff
LOG: [SLP] Move transformMaskAfterShuffle into BaseShuffleAnalysis and use it as much as possible. (#123896)
Added:
Modified:
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index 961cab33c579f2..fc6bba6d2b8b3b 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -9487,6 +9487,15 @@ class BaseShuffleAnalysis {
return Builder.createShuffleVector(V1, NewMask);
return Builder.createIdentity(V1);
}
+
+ /// Transforms mask \p CommonMask per given \p Mask to make proper set after
+ /// shuffle emission.
+ static void transformMaskAfterShuffle(MutableArrayRef<int> CommonMask,
+ ArrayRef<int> Mask) {
+ for (unsigned I : seq<unsigned>(CommonMask.size()))
+ if (Mask[I] != PoisonMaskElem)
+ CommonMask[I] = I;
+ }
};
} // namespace
@@ -10317,14 +10326,6 @@ class BoUpSLP::ShuffleCostEstimator : public BaseShuffleAnalysis {
}
return Cost;
}
- /// Transforms mask \p CommonMask per given \p Mask to make proper set after
- /// shuffle emission.
- static void transformMaskAfterShuffle(MutableArrayRef<int> CommonMask,
- ArrayRef<int> Mask) {
- for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
- if (Mask[Idx] != PoisonMaskElem)
- CommonMask[Idx] = Idx;
- }
/// Adds the cost of reshuffling \p E1 and \p E2 (if present), using given
/// mask \p Mask, register number \p Part, that includes \p SliceSize
/// elements.
@@ -10947,9 +10948,7 @@ class BoUpSLP::ShuffleCostEstimator : public BaseShuffleAnalysis {
Cost += createShuffle(Vec, InVectors.back(), CommonMask);
else
Cost += createShuffle(Vec, nullptr, CommonMask);
- for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
- if (CommonMask[Idx] != PoisonMaskElem)
- CommonMask[Idx] = Idx;
+ transformMaskAfterShuffle(CommonMask, CommonMask);
assert(VF > 0 &&
"Expected vector length for the final value before action.");
Value *V = cast<Value *>(Vec);
@@ -10962,9 +10961,7 @@ class BoUpSLP::ShuffleCostEstimator : public BaseShuffleAnalysis {
Cost += createShuffle(Vec, InVectors.back(), CommonMask);
else
Cost += createShuffle(Vec, nullptr, CommonMask);
- for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
- if (CommonMask[Idx] != PoisonMaskElem)
- CommonMask[Idx] = Idx;
+ transformMaskAfterShuffle(CommonMask, CommonMask);
// Add subvectors permutation cost.
if (!SubVectorsMask.empty()) {
assert(SubVectorsMask.size() <= CommonMask.size() &&
@@ -14214,15 +14211,6 @@ class BoUpSLP::ShuffleInstructionBuilder final : public BaseShuffleAnalysis {
ShuffleBuilder);
}
- /// Transforms mask \p CommonMask per given \p Mask to make proper set after
- /// shuffle emission.
- static void transformMaskAfterShuffle(MutableArrayRef<int> CommonMask,
- ArrayRef<int> Mask) {
- for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
- if (Mask[Idx] != PoisonMaskElem)
- CommonMask[Idx] = Idx;
- }
-
/// Cast value \p V to the vector type with the same number of elements, but
/// the base type \p ScalarTy.
Value *castToScalarTyElem(Value *V,
@@ -14555,9 +14543,7 @@ class BoUpSLP::ShuffleInstructionBuilder final : public BaseShuffleAnalysis {
} else {
Vec = createShuffle(Vec, nullptr, CommonMask);
}
- for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
- if (CommonMask[Idx] != PoisonMaskElem)
- CommonMask[Idx] = Idx;
+ transformMaskAfterShuffle(CommonMask, CommonMask);
assert(VF > 0 &&
"Expected vector length for the final value before action.");
unsigned VecVF = cast<FixedVectorType>(Vec->getType())->getNumElements();
@@ -14577,9 +14563,7 @@ class BoUpSLP::ShuffleInstructionBuilder final : public BaseShuffleAnalysis {
} else {
Vec = createShuffle(Vec, nullptr, CommonMask);
}
- for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
- if (CommonMask[Idx] != PoisonMaskElem)
- CommonMask[Idx] = Idx;
+ transformMaskAfterShuffle(CommonMask, CommonMask);
auto CreateSubVectors = [&](Value *Vec,
SmallVectorImpl<int> &CommonMask) {
for (auto [E, Idx] : SubVectors) {
@@ -14620,10 +14604,7 @@ class BoUpSLP::ShuffleInstructionBuilder final : public BaseShuffleAnalysis {
Value *InsertVec =
CreateSubVectors(PoisonValue::get(Vec->getType()), CommonMask);
Vec = createShuffle(InsertVec, Vec, SVMask);
- for (unsigned I : seq<unsigned>(CommonMask.size())) {
- if (SVMask[I] != PoisonMaskElem)
- CommonMask[I] = I;
- }
+ transformMaskAfterShuffle(CommonMask, SVMask);
}
InVectors.front() = Vec;
}
More information about the llvm-commits
mailing list