@@ -9487,6 +9487,15 @@ class BaseShuffleAnalysis {
9487
9487
return Builder.createShuffleVector(V1, NewMask);
9488
9488
return Builder.createIdentity(V1);
9489
9489
}
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
+ }
9490
9499
};
9491
9500
} // namespace
9492
9501
@@ -10317,14 +10326,6 @@ class BoUpSLP::ShuffleCostEstimator : public BaseShuffleAnalysis {
10317
10326
}
10318
10327
return Cost;
10319
10328
}
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
- }
10328
10329
/// Adds the cost of reshuffling \p E1 and \p E2 (if present), using given
10329
10330
/// mask \p Mask, register number \p Part, that includes \p SliceSize
10330
10331
/// elements.
@@ -10947,9 +10948,7 @@ class BoUpSLP::ShuffleCostEstimator : public BaseShuffleAnalysis {
10947
10948
Cost += createShuffle(Vec, InVectors.back(), CommonMask);
10948
10949
else
10949
10950
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);
10953
10952
assert(VF > 0 &&
10954
10953
"Expected vector length for the final value before action.");
10955
10954
Value *V = cast<Value *>(Vec);
@@ -10962,9 +10961,7 @@ class BoUpSLP::ShuffleCostEstimator : public BaseShuffleAnalysis {
10962
10961
Cost += createShuffle(Vec, InVectors.back(), CommonMask);
10963
10962
else
10964
10963
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);
10968
10965
// Add subvectors permutation cost.
10969
10966
if (!SubVectorsMask.empty()) {
10970
10967
assert(SubVectorsMask.size() <= CommonMask.size() &&
@@ -14214,15 +14211,6 @@ class BoUpSLP::ShuffleInstructionBuilder final : public BaseShuffleAnalysis {
14214
14211
ShuffleBuilder);
14215
14212
}
14216
14213
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
-
14226
14214
/// Cast value \p V to the vector type with the same number of elements, but
14227
14215
/// the base type \p ScalarTy.
14228
14216
Value *castToScalarTyElem(Value *V,
@@ -14555,9 +14543,7 @@ class BoUpSLP::ShuffleInstructionBuilder final : public BaseShuffleAnalysis {
14555
14543
} else {
14556
14544
Vec = createShuffle(Vec, nullptr, CommonMask);
14557
14545
}
14558
- for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
14559
- if (CommonMask[Idx] != PoisonMaskElem)
14560
- CommonMask[Idx] = Idx;
14546
+ transformMaskAfterShuffle(CommonMask, CommonMask);
14561
14547
assert(VF > 0 &&
14562
14548
"Expected vector length for the final value before action.");
14563
14549
unsigned VecVF = cast<FixedVectorType>(Vec->getType())->getNumElements();
@@ -14577,9 +14563,7 @@ class BoUpSLP::ShuffleInstructionBuilder final : public BaseShuffleAnalysis {
14577
14563
} else {
14578
14564
Vec = createShuffle(Vec, nullptr, CommonMask);
14579
14565
}
14580
- for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
14581
- if (CommonMask[Idx] != PoisonMaskElem)
14582
- CommonMask[Idx] = Idx;
14566
+ transformMaskAfterShuffle(CommonMask, CommonMask);
14583
14567
auto CreateSubVectors = [&](Value *Vec,
14584
14568
SmallVectorImpl<int> &CommonMask) {
14585
14569
for (auto [E, Idx] : SubVectors) {
@@ -14620,10 +14604,7 @@ class BoUpSLP::ShuffleInstructionBuilder final : public BaseShuffleAnalysis {
14620
14604
Value *InsertVec =
14621
14605
CreateSubVectors(PoisonValue::get(Vec->getType()), CommonMask);
14622
14606
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);
14627
14608
}
14628
14609
InVectors.front() = Vec;
14629
14610
}
0 commit comments