Lines Matching defs:CommonMask
9490 /// Transforms mask \p CommonMask per given \p Mask to make proper set after
9492 static void transformMaskAfterShuffle(MutableArrayRef<int> CommonMask,
9494 for (unsigned I : seq<unsigned>(CommonMask.size()))
9496 CommonMask[I] = I;
10120 SmallVector<int> CommonMask;
10330 // sub-Mask into the CommonMask to estimate it later and avoid double cost
10337 assert(all_of(ArrayRef(CommonMask).slice(Part * SliceSize, Limit),
10341 copy(SubMask, std::next(CommonMask.begin(), SliceSize * Part));
10348 CommonMask);
10349 transformMaskAfterShuffle(CommonMask, CommonMask);
10351 Cost += createShuffle(InVectors.front(), InVectors.back(), CommonMask);
10352 transformMaskAfterShuffle(CommonMask, CommonMask);
10364 for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
10365 if (Mask[Idx] != PoisonMaskElem && CommonMask[Idx] == PoisonMaskElem)
10366 CommonMask[Idx] = Mask[Idx] + VF;
10367 Cost += createShuffle(InVectors.front(), &E1, CommonMask);
10368 transformMaskAfterShuffle(CommonMask, CommonMask);
10380 for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
10382 CommonMask[Idx] = Idx + (InVectors.empty() ? 0 : VF);
10383 Cost += createShuffle(P, InVectors.front(), CommonMask);
10384 transformMaskAfterShuffle(CommonMask, CommonMask);
10437 SmallVector<int> CommonMask(Mask);
10496 for (int &Idx : CommonMask) {
10527 for (int &Idx : CommonMask) {
10534 ShuffleVectorInst::isDeInterleaveMaskOfFactor(CommonMask,
10537 std::iota(CommonMask.begin(), CommonMask.end(), 0);
10543 CommonVF == CommonMask.size() &&
10544 any_of(enumerate(CommonMask),
10549 any_of(CommonMask,
10553 ::addMask(CommonMask, ReorderMask);
10576 for (int &Idx : CommonMask) {
10602 for (int &Idx : CommonMask) {
10639 Constant::getNullValue(getWidenedType(ScalarTy, CommonMask.size()));
10643 V1, V2, CommonMask, Builder, ScalarTy);
10746 CommonMask.assign(Mask.begin(), Mask.end());
10747 transformMaskAfterShuffle(CommonMask, CommonMask);
10752 Constant::getNullValue(getWidenedType(ScalarTy, CommonMask.size()));
10775 CommonMask.assign(Mask.begin(), Mask.end());
10779 assert(!CommonMask.empty() && "Expected non-empty common mask.");
10790 CommonMask.assign(Mask.begin(), Mask.end());
10794 assert(!CommonMask.empty() && "Expected non-empty common mask.");
10810 all_of(enumerate(CommonMask),
10825 assert(CommonMask.empty() && !ForExtracts &&
10827 CommonMask.assign(Mask.begin(), Mask.end());
10834 !CommonMask.empty() &&
10835 all_of(enumerate(CommonMask),
10850 assert(!InVectors.empty() && !CommonMask.empty() &&
10854 Cost += createShuffle(InVectors.front(), InVectors.back(), CommonMask);
10855 transformMaskAfterShuffle(CommonMask, CommonMask);
10856 VF = std::max<unsigned>(VF, CommonMask.size());
10866 for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
10867 if (Mask[Idx] != PoisonMaskElem && CommonMask[Idx] == PoisonMaskElem)
10868 CommonMask[Idx] = Mask[Idx] + VF;
10924 Cost += createShuffle(Vec, InVectors.back(), CommonMask);
10926 Cost += createShuffle(Vec, nullptr, CommonMask);
10927 transformMaskAfterShuffle(CommonMask, CommonMask);
10931 Action(V, CommonMask);
10937 Cost += createShuffle(Vec, InVectors.back(), CommonMask);
10939 Cost += createShuffle(Vec, nullptr, CommonMask);
10940 transformMaskAfterShuffle(CommonMask, CommonMask);
10943 assert(SubVectorsMask.size() <= CommonMask.size() &&
10945 SmallVector<int> SVMask(CommonMask.size(), PoisonMaskElem);
10947 for (auto [I1, I2] : zip(SVMask, CommonMask)) {
10950 I1 = I2 + CommonMask.size();
10954 getWidenedType(ScalarTy, CommonMask.size()),
10978 getWidenedType(ScalarTy, CommonMask.size()), {}, CostKind, Idx,
10980 if (!CommonMask.empty()) {
10981 std::iota(std::next(CommonMask.begin(), Idx),
10982 std::next(CommonMask.begin(), Idx + E->getVectorFactor()),
10989 if (CommonMask.empty()) {
10990 CommonMask.assign(ExtMask.begin(), ExtMask.end());
10996 NewMask[I] = CommonMask[ExtMask[I]];
10998 CommonMask.swap(NewMask);
11001 if (CommonMask.empty()) {
11008 CommonMask);
11012 assert((IsFinalized || CommonMask.empty()) &&
13262 SmallVector<int> CommonMask = TE->getCommonMask();
13263 copy(CommonMask, Mask.begin());
14080 SmallVector<int> CommonMask;
14083 /// shuffle with \p CommonMask mask, the first operand sets to be the
14085 /// operand. The \p CommonMask is transformed in the proper way after that.
14406 CommonMask.assign(Mask.begin(), Mask.end());
14411 Vec = createShuffle(Vec, InVectors.back(), CommonMask);
14412 transformMaskAfterShuffle(CommonMask, CommonMask);
14415 Vec = createShuffle(Vec, nullptr, CommonMask);
14416 transformMaskAfterShuffle(CommonMask, CommonMask);
14420 for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
14422 CommonMask[Idx] = Idx + VF;
14436 CommonMask.assign(Mask.begin(), Mask.end());
14445 V = createShuffle(InVectors.front(), InVectors.back(), CommonMask);
14446 transformMaskAfterShuffle(CommonMask, CommonMask);
14448 CommonMask.size()) {
14449 V = createShuffle(InVectors.front(), nullptr, CommonMask);
14450 transformMaskAfterShuffle(CommonMask, CommonMask);
14452 unsigned VF = std::max(CommonMask.size(), Mask.size());
14453 for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
14454 if (CommonMask[Idx] == PoisonMaskElem && Mask[Idx] != PoisonMaskElem)
14455 CommonMask[Idx] =
14471 for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
14472 if (Mask[Idx] != PoisonMaskElem && CommonMask[Idx] == PoisonMaskElem) {
14480 for (unsigned Idx = 0, Sz = CommonMask.size(); Idx < Sz; ++Idx)
14481 if (Mask[Idx] != PoisonMaskElem && CommonMask[Idx] == PoisonMaskElem)
14482 CommonMask[Idx] = Mask[Idx] + (It == InVectors.begin() ? 0 : VF);
14510 Vec = createShuffle(Vec, InVectors.back(), CommonMask);
14513 Vec = createShuffle(Vec, nullptr, CommonMask);
14515 transformMaskAfterShuffle(CommonMask, CommonMask);
14524 Action(Vec, CommonMask);
14530 Vec = createShuffle(Vec, InVectors.back(), CommonMask);
14533 Vec = createShuffle(Vec, nullptr, CommonMask);
14535 transformMaskAfterShuffle(CommonMask, CommonMask);
14537 SmallVectorImpl<int> &CommonMask) {
14552 if (!CommonMask.empty()) {
14553 std::iota(std::next(CommonMask.begin(), Idx),
14554 std::next(CommonMask.begin(), Idx + E->getVectorFactor()),
14561 Vec = CreateSubVectors(Vec, CommonMask);
14563 SmallVector<int> SVMask(CommonMask.size(), PoisonMaskElem);
14565 for (auto [I1, I2] : zip(SVMask, CommonMask)) {
14568 I1 = I2 + CommonMask.size();
14572 CreateSubVectors(PoisonValue::get(Vec->getType()), CommonMask);
14574 transformMaskAfterShuffle(CommonMask, SVMask);
14580 if (CommonMask.empty()) {
14581 CommonMask.assign(ExtMask.begin(), ExtMask.end());
14587 NewMask[I] = CommonMask[ExtMask[I]];
14589 CommonMask.swap(NewMask);
14592 if (CommonMask.empty()) {
14597 return createShuffle(InVectors.front(), InVectors.back(), CommonMask);
14598 return createShuffle(InVectors.front(), nullptr, CommonMask);
14602 assert((IsFinalized || CommonMask.empty()) &&