Skip to content

Commit d3aea77

Browse files
authored
[SLP] Move transformMaskAfterShuffle into BaseShuffleAnalysis and use it as much as possible. (#123896)
1 parent 23d2a18 commit d3aea77

File tree

1 file changed

+14
-33
lines changed

1 file changed

+14
-33
lines changed

llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp

Lines changed: 14 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -9487,6 +9487,15 @@ class BaseShuffleAnalysis {
94879487
return Builder.createShuffleVector(V1, NewMask);
94889488
return Builder.createIdentity(V1);
94899489
}
9490+
9491+
/// Transforms mask \p CommonMask per given \p Mask to make proper set after
9492+
/// shuffle emission.
9493+
static void transformMaskAfterShuffle(MutableArrayRef<int> CommonMask,
9494+
ArrayRef<int> Mask) {
9495+
for (unsigned I : seq<unsigned>(CommonMask.size()))
9496+
if (Mask[I] != PoisonMaskElem)
9497+
CommonMask[I] = I;
9498+
}
94909499
};
94919500
} // namespace
94929501

@@ -10317,14 +10326,6 @@ class BoUpSLP::ShuffleCostEstimator : public BaseShuffleAnalysis {
1031710326
}
1031810327
return Cost;
1031910328
}
10320-
/// Transforms mask \p CommonMask per given \p Mask to make proper set after
10321-
/// shuffle emission.
10322-
static void transformMaskAfterShuffle(MutableArrayRef<int> CommonMask,
10323-
ArrayRef<int> Mask) {
10324-
for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
10325-
if (Mask[Idx] != PoisonMaskElem)
10326-
CommonMask[Idx] = Idx;
10327-
}
1032810329
/// Adds the cost of reshuffling \p E1 and \p E2 (if present), using given
1032910330
/// mask \p Mask, register number \p Part, that includes \p SliceSize
1033010331
/// elements.
@@ -10947,9 +10948,7 @@ class BoUpSLP::ShuffleCostEstimator : public BaseShuffleAnalysis {
1094710948
Cost += createShuffle(Vec, InVectors.back(), CommonMask);
1094810949
else
1094910950
Cost += createShuffle(Vec, nullptr, CommonMask);
10950-
for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
10951-
if (CommonMask[Idx] != PoisonMaskElem)
10952-
CommonMask[Idx] = Idx;
10951+
transformMaskAfterShuffle(CommonMask, CommonMask);
1095310952
assert(VF > 0 &&
1095410953
"Expected vector length for the final value before action.");
1095510954
Value *V = cast<Value *>(Vec);
@@ -10962,9 +10961,7 @@ class BoUpSLP::ShuffleCostEstimator : public BaseShuffleAnalysis {
1096210961
Cost += createShuffle(Vec, InVectors.back(), CommonMask);
1096310962
else
1096410963
Cost += createShuffle(Vec, nullptr, CommonMask);
10965-
for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
10966-
if (CommonMask[Idx] != PoisonMaskElem)
10967-
CommonMask[Idx] = Idx;
10964+
transformMaskAfterShuffle(CommonMask, CommonMask);
1096810965
// Add subvectors permutation cost.
1096910966
if (!SubVectorsMask.empty()) {
1097010967
assert(SubVectorsMask.size() <= CommonMask.size() &&
@@ -14214,15 +14211,6 @@ class BoUpSLP::ShuffleInstructionBuilder final : public BaseShuffleAnalysis {
1421414211
ShuffleBuilder);
1421514212
}
1421614213

14217-
/// Transforms mask \p CommonMask per given \p Mask to make proper set after
14218-
/// shuffle emission.
14219-
static void transformMaskAfterShuffle(MutableArrayRef<int> CommonMask,
14220-
ArrayRef<int> Mask) {
14221-
for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
14222-
if (Mask[Idx] != PoisonMaskElem)
14223-
CommonMask[Idx] = Idx;
14224-
}
14225-
1422614214
/// Cast value \p V to the vector type with the same number of elements, but
1422714215
/// the base type \p ScalarTy.
1422814216
Value *castToScalarTyElem(Value *V,
@@ -14555,9 +14543,7 @@ class BoUpSLP::ShuffleInstructionBuilder final : public BaseShuffleAnalysis {
1455514543
} else {
1455614544
Vec = createShuffle(Vec, nullptr, CommonMask);
1455714545
}
14558-
for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
14559-
if (CommonMask[Idx] != PoisonMaskElem)
14560-
CommonMask[Idx] = Idx;
14546+
transformMaskAfterShuffle(CommonMask, CommonMask);
1456114547
assert(VF > 0 &&
1456214548
"Expected vector length for the final value before action.");
1456314549
unsigned VecVF = cast<FixedVectorType>(Vec->getType())->getNumElements();
@@ -14577,9 +14563,7 @@ class BoUpSLP::ShuffleInstructionBuilder final : public BaseShuffleAnalysis {
1457714563
} else {
1457814564
Vec = createShuffle(Vec, nullptr, CommonMask);
1457914565
}
14580-
for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
14581-
if (CommonMask[Idx] != PoisonMaskElem)
14582-
CommonMask[Idx] = Idx;
14566+
transformMaskAfterShuffle(CommonMask, CommonMask);
1458314567
auto CreateSubVectors = [&](Value *Vec,
1458414568
SmallVectorImpl<int> &CommonMask) {
1458514569
for (auto [E, Idx] : SubVectors) {
@@ -14620,10 +14604,7 @@ class BoUpSLP::ShuffleInstructionBuilder final : public BaseShuffleAnalysis {
1462014604
Value *InsertVec =
1462114605
CreateSubVectors(PoisonValue::get(Vec->getType()), CommonMask);
1462214606
Vec = createShuffle(InsertVec, Vec, SVMask);
14623-
for (unsigned I : seq<unsigned>(CommonMask.size())) {
14624-
if (SVMask[I] != PoisonMaskElem)
14625-
CommonMask[I] = I;
14626-
}
14607+
transformMaskAfterShuffle(CommonMask, SVMask);
1462714608
}
1462814609
InVectors.front() = Vec;
1462914610
}

0 commit comments

Comments
 (0)