• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-12-stable/contrib/llvm-project/llvm/lib/Transforms/InstCombine/

Lines Matching refs:Mask

446                                          SmallVectorImpl<Constant*> &Mask) {
452 Mask.assign(NumElts, UndefValue::get(Type::getInt32Ty(V->getContext())));
458 Mask.push_back(ConstantInt::get(Type::getInt32Ty(V->getContext()), i));
464 Mask.push_back(ConstantInt::get(Type::getInt32Ty(V->getContext()),
482 if (collectSingleShuffleElements(VecOp, LHS, RHS, Mask)) {
484 Mask[InsertedIdx] = UndefValue::get(Type::getInt32Ty(V->getContext()));
497 if (collectSingleShuffleElements(VecOp, LHS, RHS, Mask)) {
500 Mask[InsertedIdx % NumElts] =
505 Mask[InsertedIdx % NumElts] =
599 /// left and right vectors of the proposed shuffle (or 0), and set the Mask
607 SmallVectorImpl<Constant *> &Mask,
614 Mask.assign(NumElts, UndefValue::get(Type::getInt32Ty(V->getContext())));
620 Mask.assign(NumElts, ConstantInt::get(Type::getInt32Ty(V->getContext()),0));
640 ShuffleOps LR = collectShuffleElements(VecOp, Mask, RHS, IC);
651 Mask[i] = ConstantInt::get(Type::getInt32Ty(V->getContext()), i);
656 Mask[InsertedIdx % NumElts] =
668 Mask.push_back(ConstantInt::get(
678 Mask))
686 Mask.push_back(ConstantInt::get(Type::getInt32Ty(V->getContext()), i));
806 SmallVector<Constant *, 16> Mask(NumElements, Zero);
809 Mask[i] = UndefValue::get(Int32Ty);
811 return new ShuffleVectorInst(FirstIE, UndefVec, ConstantVector::get(Mask));
927 /// insertelt (shufflevector X, CVec, Mask|insertelt X, C1, CIndex1), C, CIndex
928 /// --> shufflevector X, CVec', Mask'
961 Constant *Mask = Shuf->getMask();
962 unsigned NumElts = Mask->getType()->getVectorNumElements();
973 NewMaskElts[I] = Mask->getAggregateElement(I);
995 SmallVector<Constant *, 16> Mask(NumElts);
1002 assert(!Mask[I]);
1004 Mask[I] = ConstantInt::get(Type::getInt32Ty(InsElt.getContext()),
1012 assert(!Mask[I]);
1014 Mask[I] = ConstantInt::get(Type::getInt32Ty(InsElt.getContext()), I);
1021 ConstantVector::get(Mask));
1082 SmallVector<Constant*, 16> Mask;
1083 ShuffleOps LR = collectShuffleElements(&IE, Mask, nullptr, *this);
1088 // We now have a shuffle of LHS, RHS, Mask.
1092 ConstantVector::get(Mask));
1126 static bool canEvaluateShuffled(Value *V, ArrayRef<int> Mask,
1150 if (llvm::any_of(Mask, [](int M){ return M == -1; }))
1182 if (ITy->isVectorTy() && Mask.size() > ITy->getVectorNumElements())
1185 if (!canEvaluateShuffled(Operand, Mask, Depth - 1))
1195 // Verify that 'CI' does not occur twice in Mask. A single 'insertelement'
1198 for (int i = 0, e = Mask.size(); i != e; ++i) {
1199 if (Mask[i] == ElementNumber) {
1205 return canEvaluateShuffled(I->getOperand(0), Mask, Depth - 1);
1289 static Value *evaluateInDifferentElementOrder(Value *V, ArrayRef<int> Mask) {
1290 // Mask.size() does not need to be equal to the number of vector elements.
1296 return UndefValue::get(VectorType::get(EltTy, Mask.size()));
1299 return ConstantAggregateZero::get(VectorType::get(EltTy, Mask.size()));
1303 for (int i = 0, e = Mask.size(); i != e; ++i) {
1304 if (Mask[i] == -1)
1307 MaskValues.push_back(ConstantInt::get(I32Ty, Mask[i]));
1347 bool NeedsRebuild = (Mask.size() != I->getType()->getVectorNumElements());
1354 V = evaluateInDifferentElementOrder(I->getOperand(i), Mask);
1373 for (int e = Mask.size(); Index != e; ++Index) {
1374 if (Mask[Index] == Element) {
1380 // If element is not in Mask, no need to handle the operand 1 (element to
1381 // be inserted). Just evaluate values in operand 0 according to Mask.
1383 return evaluateInDifferentElementOrder(I->getOperand(0), Mask);
1385 Value *V = evaluateInDifferentElementOrder(I->getOperand(0), Mask);
1400 SmallVector<int, 16> &Mask) {
1402 unsigned MaskElems = Mask.size();
1403 unsigned BegIdx = Mask.front();
1404 unsigned EndIdx = Mask.back();
1408 if (static_cast<unsigned>(Mask[I]) != BegIdx + I)
1483 Constant *Mask = Shuf.getMask();
1484 Constant *NewC = Op0IsBinop ? ConstantExpr::getShuffleVector(C, IdC, Mask) :
1485 ConstantExpr::getShuffleVector(IdC, C, Mask);
1488 Mask->containsUndefElement() &&
1502 if (Mask->containsUndefElement() && !MightCreatePoisonOrUB)
1514 Constant *Mask = Shuf.getMask();
1521 !match(Op1, m_Undef()) || match(Mask, m_ZeroInt()) || IndexC == 0)
1536 if (isa<UndefValue>(Mask->getAggregateElement(i)))
1537 NewMask[i] = Mask->getAggregateElement(i);
1608 Constant *Mask = Shuf.getMask();
1609 Constant *NewC = ConstantExpr::getShuffleVector(C0, C1, Mask);
1615 Mask->containsUndefElement() &&
1649 V = Builder.CreateShuffleVector(X, Y, Mask);
1664 if (Mask->containsUndefElement() && !MightCreatePoisonOrUB)
1711 Constant *Mask;
1712 if (!match(Op0, m_ShuffleVector(m_Value(X), m_Value(Y), m_Constant(Mask))))
1733 assert(NumElts < Mask->getType()->getVectorNumElements() &&
1738 Constant *MaskElt = Mask->getAggregateElement(i);
1748 SmallVector<int, 16> Mask = Shuf.getShuffleMask();
1753 int NumElts = Mask.size();
1765 // shuf (inselt X, ?, IdxC), ?, Mask --> shuf X, ?, Mask
1766 if (none_of(Mask, [IdxC](int MaskElt) { return MaskElt == (int)IdxC; })) {
1775 // shuf ?, (inselt X, ?, IdxC), Mask --> shuf ?, X, Mask
1776 if (none_of(Mask, [IdxC](int MaskElt) { return MaskElt == (int)IdxC; })) {
1782 // shuffle (insert ?, Scalar, IndexC), V1, Mask --> insert V1, Scalar, IndexC'
1794 if (Mask[i] == -1)
1798 if (Mask[i] == NumElts + i)
1802 if (NewInsIndex != -1 || Mask[i] != IndexC->getSExtValue())
1828 ShuffleVectorInst::commuteShuffleMask(Mask, NumElts);
1865 // shuf (widen X), (widen Y), Mask --> shuf X, Y, Mask'
1871 SmallVector<int, 16> Mask = Shuf.getShuffleMask();
1872 SmallVector<Constant *, 16> NewMask(Mask.size(), UndefValue::get(I32Ty));
1873 for (int i = 0, e = Mask.size(); i != e; ++i) {
1874 if (Mask[i] == -1)
1879 if (Mask[i] < WideElts) {
1880 if (Shuffle0->getMaskValue(Mask[i]) == -1)
1883 if (Shuffle1->getMaskValue(Mask[i] - WideElts) == -1)
1890 if (Mask[i] < WideElts) {
1891 assert(Mask[i] < NarrowElts && "Unexpected shuffle mask");
1892 NewMask[i] = ConstantInt::get(I32Ty, Mask[i]);
1894 assert(Mask[i] < (WideElts + NarrowElts) && "Unexpected shuffle mask");
1895 NewMask[i] = ConstantInt::get(I32Ty, Mask[i] - (WideElts - NarrowElts));
1911 SmallVector<int, 16> Mask = SVI.getShuffleMask();
1919 if (Mask[i] < 0)
1922 Elts.push_back(ConstantInt::get(Int32Ty, Mask[i] % LHSWidth));
1963 if (isa<UndefValue>(RHS) && canEvaluateShuffled(LHS, Mask)) {
1964 Value *V = evaluateInDifferentElementOrder(LHS, Mask);
1998 if (isShuffleExtractingFromLHS(SVI, Mask)) {
2000 unsigned MaskElems = Mask.size();
2014 unsigned BegIdx = Mask.front();
2167 if (Mask[i] < 0) {
2170 } else if (Mask[i] < (int)LHSWidth) {
2176 eltMask = LHSMask[Mask[i]];
2182 eltMask = Mask[i];
2193 eltMask = RHSMask[Mask[i]-LHSWidth];
2202 eltMask = Mask[i]-LHSWidth;
2226 if (isSplat || newMask == LHSMask || newMask == RHSMask || newMask == Mask) {