Lines Matching defs:DemandedElts
2697 /// DemandedElts. We use this predicate to simplify operations downstream.
2700 const APInt &DemandedElts,
2702 return Mask.isSubsetOf(computeKnownBits(V, DemandedElts, Depth).Zero);
2706 /// DemandedElts. We use this predicate to simplify operations downstream.
2707 bool SelectionDAG::MaskedVectorIsZero(SDValue V, const APInt &DemandedElts,
2709 return computeKnownBits(V, DemandedElts, Depth).isZero();
2719 const APInt &DemandedElts,
2725 assert(DemandedElts.getBitWidth() == NumElts && "Unexpected demanded mask.");
2729 if (!DemandedElts[EltIdx])
2739 /// across all DemandedElts. For scalable vectors, we don't know the
2743 bool SelectionDAG::isSplatValue(SDValue V, const APInt &DemandedElts,
2748 assert((!VT.isScalableVector() || DemandedElts.getBitWidth() == 1) &&
2751 if (!DemandedElts)
2762 ? APInt::getAllOnes(DemandedElts.getBitWidth())
2763 : APInt(DemandedElts.getBitWidth(), 0);
2773 if (isSplatValue(LHS, DemandedElts, UndefLHS, Depth + 1) &&
2774 isSplatValue(RHS, DemandedElts, UndefRHS, Depth + 1)) {
2784 return isSplatValue(V.getOperand(0), DemandedElts, UndefElts, Depth + 1);
2788 return TLI->isSplatValueForTargetNode(V, DemandedElts, UndefElts, *this,
2799 assert(NumElts == DemandedElts.getBitWidth() && "Vector size mismatch");
2811 if (!DemandedElts[i])
2830 if (!DemandedElts[i])
2866 APInt DemandedSrcElts = DemandedElts.zext(NumSrcElts).shl(Idx);
2883 APInt DemandedSrcElts = DemandedElts.zext(NumSrcElts);
2907 APIntOps::ScaleBitMask(DemandedElts, NumSrcElts);
2937 APInt DemandedElts
2939 return isSplatValue(V, DemandedElts, UndefElts) &&
2954 APInt DemandedElts
2957 if (isSplatValue(V, DemandedElts, UndefElts)) {
2959 // DemandedElts and UndefElts are ignored for scalable vectors, since
2964 if (DemandedElts.isSubsetOf(UndefElts)) {
2968 SplatIdx = (UndefElts & DemandedElts).countr_one();
3014 SelectionDAG::getValidShiftAmountRange(SDValue V, const APInt &DemandedElts,
3032 if (!DemandedElts[i])
3055 KnownBits KnownAmt = computeKnownBits(V.getOperand(1), DemandedElts, Depth);
3063 SelectionDAG::getValidShiftAmount(SDValue V, const APInt &DemandedElts,
3069 getValidShiftAmountRange(V, DemandedElts, Depth))
3078 APInt DemandedElts = VT.isFixedLengthVector()
3081 return getValidShiftAmount(V, DemandedElts, Depth);
3085 SelectionDAG::getValidMinimumShiftAmount(SDValue V, const APInt &DemandedElts,
3091 getValidShiftAmountRange(V, DemandedElts, Depth))
3099 APInt DemandedElts = VT.isFixedLengthVector()
3102 return getValidMinimumShiftAmount(V, DemandedElts, Depth);
3106 SelectionDAG::getValidMaximumShiftAmount(SDValue V, const APInt &DemandedElts,
3112 getValidShiftAmountRange(V, DemandedElts, Depth))
3120 APInt DemandedElts = VT.isFixedLengthVector()
3123 return getValidMaximumShiftAmount(V, DemandedElts, Depth);
3135 APInt DemandedElts = VT.isFixedLengthVector()
3138 return computeKnownBits(Op, DemandedElts, Depth);
3142 /// them in Known. The DemandedElts argument allows us to only collect the known
3144 KnownBits SelectionDAG::computeKnownBits(SDValue Op, const APInt &DemandedElts,
3163 unsigned NumElts = DemandedElts.getBitWidth();
3168 if (!DemandedElts)
3174 return computeKnownBits(Op.getOperand(Op.getResNo()), DemandedElts,
3226 if (!DemandedElts[i])
3254 if (!getShuffleDemandedElts(NumElts, SVN->getMask(), DemandedElts,
3284 // Split DemandedElts and test each of the demanded subvectors.
3291 DemandedElts.extractBits(NumSubVectorElts, i * NumSubVectorElts);
3312 APInt DemandedSubElts = DemandedElts.extractBits(NumSubElts, Idx);
3313 APInt DemandedSrcElts = DemandedElts;
3337 APInt DemandedSrcElts = DemandedElts.zext(NumSrcElts).shl(Idx);
3346 if (DemandedElts != 1)
3370 Known = computeKnownBits(N0, DemandedElts, Depth + 1);
3387 if (DemandedElts[i])
3407 APIntOps::ScaleBitMask(DemandedElts, NumElts / SubScale);
3412 if (DemandedElts[i]) {
3424 Known = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3425 Known2 = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3430 Known = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3431 Known2 = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3436 Known = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3437 Known2 = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3442 Known = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3443 Known2 = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3448 Op.getOperand(0), DemandedElts, false, Depth + 1);
3461 Known = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3462 Known2 = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3467 Known = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3468 Known2 = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3473 Known = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3474 Known2 = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3479 Known = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3480 Known2 = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3483 ComputeNumSignBits(Op.getOperand(1), DemandedElts, Depth + 1);
3487 ComputeNumSignBits(Op.getOperand(0), DemandedElts, Depth + 1);
3493 Known = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3494 Known2 = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3504 Known = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3505 Known2 = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3514 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3515 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3520 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3521 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3526 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3527 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3532 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3533 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3539 Known = computeKnownBits(Op.getOperand(2), DemandedElts, Depth+1);
3543 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth+1);
3549 Known = computeKnownBits(Op.getOperand(3), DemandedElts, Depth+1);
3553 Known2 = computeKnownBits(Op.getOperand(2), DemandedElts, Depth+1);
3584 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3585 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3596 getValidMinimumShiftAmount(Op, DemandedElts, Depth + 1))
3601 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3602 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3608 getValidMinimumShiftAmount(Op, DemandedElts, Depth + 1))
3612 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3613 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3619 if (ConstantSDNode *C = isConstOrConstSplat(Op.getOperand(2), DemandedElts)) {
3626 DemandedElts, Depth + 1);
3632 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3633 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3656 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3657 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3661 Known2 = computeKnownBits(Op.getOperand(2), DemandedElts, Depth + 1);
3679 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3686 Known2 = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3695 Known2 = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3703 Known2 = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3736 if (!DemandedElts[i])
3781 if (DemandedElts != 1 || !getDataLayout().isLittleEndian())
3808 APInt InDemandedElts = DemandedElts.zext(InVT.getVectorNumElements());
3814 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3822 APInt InDemandedElts = DemandedElts.zext(InVT.getVectorNumElements());
3830 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3840 APInt InDemandedElts = DemandedElts.zext(InVT.getVectorNumElements());
3846 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3851 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3858 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3881 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3882 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3908 Borrow = computeKnownBits(Op.getOperand(2), DemandedElts, Depth + 1);
3915 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3916 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3943 Carry = computeKnownBits(Op.getOperand(2), DemandedElts, Depth + 1);
3950 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3951 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3956 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3957 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3962 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3963 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3968 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3969 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
3974 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
3975 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
4008 // an unknown element index, ignore DemandedElts and demand them all.
4031 APInt DemandedVecElts = DemandedElts;
4035 DemandedVal = !!DemandedElts[EltIdx];
4051 Known2 = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
4056 Known2 = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
4061 Known2 = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
4064 ComputeNumSignBits(Op.getOperand(0), DemandedElts, Depth + 1) - 1);
4068 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
4069 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
4074 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
4075 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
4080 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
4081 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
4091 if ((CstLow = isConstOrConstSplat(Op.getOperand(1), DemandedElts)))
4094 isConstOrConstSplat(Op.getOperand(0).getOperand(1), DemandedElts);
4116 Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
4117 Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
4142 Known2 = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
4213 TLI->computeKnownBitsForTargetNode(Op, Known, DemandedElts, *this, Depth);
4446 APInt DemandedElts = VT.isFixedLengthVector()
4449 return ComputeNumSignBits(Op, DemandedElts, Depth);
4452 unsigned SelectionDAG::ComputeNumSignBits(SDValue Op, const APInt &DemandedElts,
4457 unsigned NumElts = DemandedElts.getBitWidth();
4469 if (!DemandedElts)
4482 return ComputeNumSignBits(Op.getOperand(Op.getResNo()), DemandedElts,
4496 if (!DemandedElts[i])
4525 if (!getShuffleDemandedElts(NumElts, SVN->getMask(), DemandedElts,
4556 return ComputeNumSignBits(N0, DemandedElts, Depth + 1);
4566 APIntOps::ScaleBitMask(DemandedElts, NumElts / Scale);
4576 if (DemandedElts[i]) {
4595 return ComputeNumSignBits(Op.getOperand(0), DemandedElts, Depth+1) + Tmp;
4600 Tmp2 = ComputeNumSignBits(Op.getOperand(0), DemandedElts, Depth+1);
4607 APInt DemandedSrcElts = DemandedElts.zext(SrcVT.getVectorNumElements());
4612 Tmp = ComputeNumSignBits(Op.getOperand(0), DemandedElts, Depth + 1);
4615 getValidMinimumShiftAmount(Op, DemandedElts, Depth + 1))
4620 getValidShiftAmountRange(Op, DemandedElts, Depth + 1)) {
4637 ComputeNumSignBits(Extendee, DemandedElts, Depth + 1);
4643 Tmp = ComputeNumSignBits(Op.getOperand(0), DemandedElts, Depth + 1);
4652 Tmp = ComputeNumSignBits(Op.getOperand(0), DemandedElts, Depth+1);
4654 Tmp2 = ComputeNumSignBits(Op.getOperand(1), DemandedElts, Depth+1);
4664 Tmp = ComputeNumSignBits(Op.getOperand(1), DemandedElts, Depth+1);
4666 Tmp2 = ComputeNumSignBits(Op.getOperand(2), DemandedElts, Depth+1);
4669 Tmp = ComputeNumSignBits(Op.getOperand(2), DemandedElts, Depth+1);
4671 Tmp2 = ComputeNumSignBits(Op.getOperand(3), DemandedElts, Depth+1);
4680 if ((CstLow = isConstOrConstSplat(Op.getOperand(1), DemandedElts)))
4683 isConstOrConstSplat(Op.getOperand(0).getOperand(1), DemandedElts);
4695 Tmp = ComputeNumSignBits(Op.getOperand(0), DemandedElts, Depth + 1);
4698 Tmp2 = ComputeNumSignBits(Op.getOperand(1), DemandedElts, Depth + 1);
4703 Tmp = ComputeNumSignBits(Op.getOperand(0), DemandedElts, Depth + 1);
4706 Tmp2 = ComputeNumSignBits(Op.getOperand(1), DemandedElts, Depth + 1);
4741 Tmp = ComputeNumSignBits(Op.getOperand(0), DemandedElts, Depth + 1);
4748 isConstOrConstSplat(Op.getOperand(1), DemandedElts)) {
4764 Tmp = ComputeNumSignBits(Op.getOperand(0), DemandedElts, Depth + 1);
4769 isConstOrConstSplat(Op.getOperand(1), DemandedElts))
4772 computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
4785 Tmp2 = ComputeNumSignBits(Op.getOperand(1), DemandedElts, Depth + 1);
4789 Tmp2 = ComputeNumSignBits(Op.getOperand(1), DemandedElts, Depth + 1);
4794 isConstOrConstSplat(Op.getOperand(0), DemandedElts))
4797 computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
4813 Tmp = ComputeNumSignBits(Op.getOperand(0), DemandedElts, Depth + 1);
4830 Tmp = ComputeNumSignBits(Op.getOperand(0), DemandedElts, Depth + 1);
4833 Tmp2 = ComputeNumSignBits(Op.getOperand(1), DemandedElts, Depth + 1);
4840 return ComputeNumSignBits(Op.getOperand(0), DemandedElts, Depth + 1);
4874 APInt DemandedVecElts = DemandedElts;
4878 DemandedVal = !!DemandedElts[EltIdx];
4915 // an unknown element index, ignore DemandedElts and demand them all.
4932 APInt DemandedSrcElts = DemandedElts.zext(NumSrcElts).shl(Idx);
4946 DemandedElts.extractBits(NumSubVectorElts, i * NumSubVectorElts);
4964 APInt DemandedSubElts = DemandedElts.extractBits(NumSubElts, Idx);
4965 APInt DemandedSrcElts = DemandedElts;
4984 if (DemandedElts != 1)
5068 if (!DemandedElts[i])
5102 TLI->ComputeNumSignBitsForTargetNode(Op, DemandedElts, *this, Depth);
5110 KnownBits Known = computeKnownBits(Op, DemandedElts, Depth);
5121 const APInt &DemandedElts,
5123 unsigned SignBits = ComputeNumSignBits(Op, DemandedElts, Depth);
5138 APInt DemandedElts = VT.isVector()
5141 return isGuaranteedNotToBeUndefOrPoison(Op, DemandedElts, PoisonOnly, Depth);
5145 const APInt &DemandedElts,
5175 if (!DemandedElts[i])
5186 if (!getShuffleDemandedElts(DemandedElts.getBitWidth(), SVN->getMask(),
5187 DemandedElts, DemandedLHS, DemandedRHS,
5210 Op, DemandedElts, *this, PoisonOnly, Depth);
5234 APInt DemandedElts = VT.isVector()
5237 return canCreateUndefOrPoison(Op, DemandedElts, PoisonOnly, ConsiderFlags,
5241 bool SelectionDAG::canCreateUndefOrPoison(SDValue Op, const APInt &DemandedElts,
5319 return !isGuaranteedNotToBeUndefOrPoison(Op.getOperand(1), DemandedElts,
5321 !getValidMaximumShiftAmount(Op, DemandedElts, Depth + 1);
5325 return !PoisonOnly && DemandedElts.ugt(1);
5332 if (isGuaranteedNotToBeUndefOrPoison(Idx, DemandedElts, PoisonOnly,
5344 if (Elt < 0 && DemandedElts[Idx])
5354 Op, DemandedElts, *this, PoisonOnly, ConsiderFlags, Depth);
11988 APInt DemandedElts = VT.isFixedLengthVector()
11991 return isConstOrConstSplat(N, DemandedElts, AllowUndefs, AllowTruncation);
11994 ConstantSDNode *llvm::isConstOrConstSplat(SDValue N, const APInt &DemandedElts,
12014 ConstantSDNode *CN = BV->getConstantSplatNode(DemandedElts, &UndefElements);
12018 // TODO: Look into whether we should allow UndefElements in non-DemandedElts
12033 APInt DemandedElts = VT.isFixedLengthVector()
12036 return isConstOrConstSplatFP(N, DemandedElts, AllowUndefs);
12040 const APInt &DemandedElts,
12048 BV->getConstantFPSplatNode(DemandedElts, &UndefElements);
12049 // TODO: Look into whether we should allow UndefElements in non-DemandedElts
12801 SDValue BuildVectorSDNode::getSplatValue(const APInt &DemandedElts,
12808 assert(NumOps == DemandedElts.getBitWidth() && "Unexpected vector size");
12809 if (!DemandedElts)
12813 if (!DemandedElts[i])
12827 unsigned FirstDemandedIdx = DemandedElts.countr_zero();
12837 APInt DemandedElts = APInt::getAllOnes(getNumOperands());
12838 return getSplatValue(DemandedElts, UndefElements);
12841 bool BuildVectorSDNode::getRepeatedSequence(const APInt &DemandedElts,
12850 assert(NumOps == DemandedElts.getBitWidth() && "Unexpected vector size");
12851 if (!DemandedElts || NumOps < 2 || !isPowerOf2_32(NumOps))
12857 if (DemandedElts[I] && getOperand(I).isUndef())
12864 if (!DemandedElts[I])
12889 APInt DemandedElts = APInt::getAllOnes(getNumOperands());
12890 return getRepeatedSequence(DemandedElts, Sequence, UndefElements);
12894 BuildVectorSDNode::getConstantSplatNode(const APInt &DemandedElts,
12897 getSplatValue(DemandedElts, UndefElements));
12906 BuildVectorSDNode::getConstantFPSplatNode(const APInt &DemandedElts,
12909 getSplatValue(DemandedElts, UndefElements));