Lines Matching refs:Mask
363 FPClassTest Mask = Attrs.getRetNoFPClass();
366 Mask |= F->getAttributes().getRetNoFPClass();
367 return Mask;
371 FPClassTest Mask = Attrs.getParamNoFPClass(i);
374 Mask |= F->getAttributes().getParamNoFPClass(i);
375 return Mask;
1692 ShuffleVectorInst::ShuffleVectorInst(Value *V1, Value *Mask, const Twine &Name,
1694 : ShuffleVectorInst(V1, createPlaceholderForShuffleVector(V1), Mask, Name,
1697 ShuffleVectorInst::ShuffleVectorInst(Value *V1, ArrayRef<int> Mask,
1700 : ShuffleVectorInst(V1, createPlaceholderForShuffleVector(V1), Mask, Name,
1703 ShuffleVectorInst::ShuffleVectorInst(Value *V1, Value *V2, Value *Mask,
1708 cast<VectorType>(Mask->getType())->getElementCount()),
1710 assert(isValidOperands(V1, V2, Mask) &&
1716 getShuffleMask(cast<Constant>(Mask), MaskArr);
1721 ShuffleVectorInst::ShuffleVectorInst(Value *V1, Value *V2, ArrayRef<int> Mask,
1726 Mask.size(), isa<ScalableVectorType>(V1->getType())),
1728 assert(isValidOperands(V1, V2, Mask) &&
1732 setShuffleMask(Mask);
1755 ArrayRef<int> Mask) {
1763 for (int Elem : Mask)
1768 if ((Mask[0] != 0 && Mask[0] != PoisonMaskElem) || !all_equal(Mask))
1775 const Value *Mask) {
1780 // Mask must be vector of i32, and must be the same kind of vector as the
1782 auto *MaskTy = dyn_cast<VectorType>(Mask->getType());
1787 // Check to see if Mask is valid.
1788 if (isa<UndefValue>(Mask) || isa<ConstantAggregateZero>(Mask))
1798 if (const auto *CI = dyn_cast<ConstantInt>(Mask))
1801 if (const auto *MV = dyn_cast<ConstantVector>(Mask)) {
1813 if (const auto *CDS = dyn_cast<ConstantDataSequential>(Mask)) {
1824 void ShuffleVectorInst::getShuffleMask(const Constant *Mask,
1826 ElementCount EC = cast<VectorType>(Mask->getType())->getElementCount();
1828 if (isa<ConstantAggregateZero>(Mask)) {
1836 assert((isa<ConstantAggregateZero>(Mask) || isa<UndefValue>(Mask)) &&
1838 int MaskVal = isa<UndefValue>(Mask) ? -1 : 0;
1846 if (auto *CDS = dyn_cast<ConstantDataSequential>(Mask)) {
1852 Constant *C = Mask->getAggregateElement(i);
1858 void ShuffleVectorInst::setShuffleMask(ArrayRef<int> Mask) {
1859 ShuffleMask.assign(Mask.begin(), Mask.end());
1860 ShuffleMaskForBitcode = convertShuffleMaskForBitcode(Mask, getType());
1863 Constant *ShuffleVectorInst::convertShuffleMaskForBitcode(ArrayRef<int> Mask,
1867 assert(all_equal(Mask) && "Unexpected shuffle");
1868 Type *VecTy = VectorType::get(Int32Ty, Mask.size(), true);
1869 if (Mask[0] == 0)
1874 for (int Elem : Mask) {
1883 static bool isSingleSourceMaskImpl(ArrayRef<int> Mask, int NumOpElts) {
1884 assert(!Mask.empty() && "Shuffle mask must contain elements");
1887 for (int I : Mask) {
1901 bool ShuffleVectorInst::isSingleSourceMask(ArrayRef<int> Mask, int NumSrcElts) {
1904 return isSingleSourceMaskImpl(Mask, NumSrcElts);
1907 static bool isIdentityMaskImpl(ArrayRef<int> Mask, int NumOpElts) {
1908 if (!isSingleSourceMaskImpl(Mask, NumOpElts))
1910 for (int i = 0, NumMaskElts = Mask.size(); i < NumMaskElts; ++i) {
1911 if (Mask[i] == -1)
1913 if (Mask[i] != i && Mask[i] != (NumOpElts + i))
1919 bool ShuffleVectorInst::isIdentityMask(ArrayRef<int> Mask, int NumSrcElts) {
1920 if (Mask.size() != static_cast<unsigned>(NumSrcElts))
1924 return isIdentityMaskImpl(Mask, NumSrcElts);
1927 bool ShuffleVectorInst::isReverseMask(ArrayRef<int> Mask, int NumSrcElts) {
1928 if (Mask.size() != static_cast<unsigned>(NumSrcElts))
1930 if (!isSingleSourceMask(Mask, NumSrcElts))
1937 for (int I = 0, E = Mask.size(); I < E; ++I) {
1938 if (Mask[I] == -1)
1940 if (Mask[I] != (NumSrcElts - 1 - I) &&
1941 Mask[I] != (NumSrcElts + NumSrcElts - 1 - I))
1947 bool ShuffleVectorInst::isZeroEltSplatMask(ArrayRef<int> Mask, int NumSrcElts) {
1948 if (Mask.size() != static_cast<unsigned>(NumSrcElts))
1950 if (!isSingleSourceMask(Mask, NumSrcElts))
1952 for (int I = 0, E = Mask.size(); I < E; ++I) {
1953 if (Mask[I] == -1)
1955 if (Mask[I] != 0 && Mask[I] != NumSrcElts)
1961 bool ShuffleVectorInst::isSelectMask(ArrayRef<int> Mask, int NumSrcElts) {
1962 if (Mask.size() != static_cast<unsigned>(NumSrcElts))
1965 if (isSingleSourceMask(Mask, NumSrcElts))
1967 for (int I = 0, E = Mask.size(); I < E; ++I) {
1968 if (Mask[I] == -1)
1970 if (Mask[I] != I && Mask[I] != (NumSrcElts + I))
1976 bool ShuffleVectorInst::isTransposeMask(ArrayRef<int> Mask, int NumSrcElts) {
1983 if (Mask.size() != static_cast<unsigned>(NumSrcElts))
1986 int Sz = Mask.size();
1991 if (Mask[0] != 0 && Mask[0] != 1)
1996 if ((Mask[1] - Mask[0]) != NumSrcElts)
2002 int MaskEltVal = Mask[I];
2005 int MaskEltPrevVal = Mask[I - 2];
2012 bool ShuffleVectorInst::isSpliceMask(ArrayRef<int> Mask, int NumSrcElts,
2014 if (Mask.size() != static_cast<unsigned>(NumSrcElts))
2018 for (int I = 0, E = Mask.size(); I != E; ++I) {
2019 int MaskEltVal = Mask[I];
2046 bool ShuffleVectorInst::isExtractSubvectorMask(ArrayRef<int> Mask,
2049 if (!isSingleSourceMaskImpl(Mask, NumSrcElts))
2053 if (NumSrcElts <= (int)Mask.size())
2058 for (int i = 0, e = Mask.size(); i != e; ++i) {
2059 int M = Mask[i];
2068 if (0 <= SubIndex && SubIndex + (int)Mask.size() <= NumSrcElts) {
2075 bool ShuffleVectorInst::isInsertSubvectorMask(ArrayRef<int> Mask,
2078 int NumMaskElts = Mask.size();
2085 if (isSingleSourceMaskImpl(Mask, NumSrcElts))
2096 int M = Mask[i];
2125 ArrayRef<int> Sub1Mask = Mask.slice(Src1Lo, NumSub1Elts);
2137 ArrayRef<int> Sub0Mask = Mask.slice(Src0Lo, NumSub0Elts);
2160 ArrayRef<int> Mask = getShuffleMask();
2161 if (!isIdentityMaskImpl(Mask, NumOpElts))
2166 if (Mask[i] != -1)
2208 static bool isReplicationMaskWithParams(ArrayRef<int> Mask,
2210 assert(Mask.size() == (unsigned)ReplicationFactor * VF &&
2214 ArrayRef<int> CurrSubMask = Mask.take_front(ReplicationFactor);
2217 Mask = Mask.drop_front(ReplicationFactor);
2223 assert(Mask.empty() && "Did not consume the whole mask?");
2228 bool ShuffleVectorInst::isReplicationMask(ArrayRef<int> Mask,
2231 if (!llvm::is_contained(Mask, PoisonMaskElem)) {
2233 Mask.take_while([](int MaskElt) { return MaskElt == 0; }).size();
2234 if (ReplicationFactor == 0 || Mask.size() % ReplicationFactor != 0)
2236 VF = Mask.size() / ReplicationFactor;
2237 return isReplicationMaskWithParams(Mask, ReplicationFactor, VF);
2248 for (int MaskElt : Mask) {
2259 reverse(seq_inclusive<unsigned>(1, Mask.size()))) {
2260 if (Mask.size() % PossibleReplicationFactor != 0)
2262 int PossibleVF = Mask.size() / PossibleReplicationFactor;
2263 if (!isReplicationMaskWithParams(Mask, PossibleReplicationFactor,
2289 bool ShuffleVectorInst::isOneUseSingleSourceMask(ArrayRef<int> Mask, int VF) {
2290 if (VF <= 0 || Mask.size() < static_cast<unsigned>(VF) ||
2291 Mask.size() % VF != 0)
2293 for (unsigned K = 0, Sz = Mask.size(); K < Sz; K += VF) {
2294 ArrayRef<int> SubMask = Mask.slice(K, VF);
2332 ArrayRef<int> Mask, unsigned Factor, unsigned NumInputElts,
2334 unsigned NumElts = Mask.size();
2354 // Lane computes x's position in the Mask
2357 int LaneValue = Mask[Lane];
2358 int NextLaneValue = Mask[NextLane];
2388 if (Mask[I] >= 0) {
2390 StartMask = Mask[I];
2391 } else if (Mask[(LaneLen - 1) * Factor + I] >= 0) {
2393 StartMask = Mask[(LaneLen - 1) * Factor + I] - J;
2415 bool ShuffleVectorInst::isDeInterleaveMaskOfFactor(ArrayRef<int> Mask,
2424 for (; I < Mask.size(); I++)
2425 if (Mask[I] >= 0 && static_cast<unsigned>(Mask[I]) != Idx + I * Factor)
2428 if (I == Mask.size()) {
2441 static int matchShuffleAsBitRotate(ArrayRef<int> Mask, int NumSubElts) {
2442 int NumElts = Mask.size();
2448 int M = Mask[i + j];
2463 ArrayRef<int> Mask, unsigned EltSizeInBits, unsigned MinSubElts,
2466 int EltRotateAmt = matchShuffleAsBitRotate(Mask, NumSubElts);