Lines Matching full:known
151 KnownBits &Known, unsigned Depth,
154 void llvm::computeKnownBits(const Value *V, KnownBits &Known, unsigned Depth, in computeKnownBits() argument
162 ::computeKnownBits(V, DemandedElts, Known, Depth, Q); in computeKnownBits()
165 void llvm::computeKnownBits(const Value *V, KnownBits &Known, in computeKnownBits() argument
170 V, Known, Depth, in computeKnownBits()
296 KnownBits Known = computeKnownBits(V, Depth, SQ); in isKnownPositive() local
297 return Known.isNonNegative() && in isKnownPositive()
298 (Known.isNonZero() || isKnownNonZero(V, SQ, Depth)); in isKnownPositive()
326 KnownBits Known(Mask.getBitWidth()); in MaskedValueIsZero() local
327 computeKnownBits(V, Known, Depth, SQ); in MaskedValueIsZero()
328 return Mask.isSubsetOf(Known.Zero); in MaskedValueIsZero()
375 const APInt &DemandedElts, KnownBits &Known, in computeKnownBitsMul() argument
378 computeKnownBits(Op1, DemandedElts, Known, Depth + 1, Q); in computeKnownBitsMul()
383 // If the multiplication is known not to overflow, compute the sign bit. in computeKnownBitsMul()
389 bool isKnownNonNegativeOp1 = Known.isNonNegative(); in computeKnownBitsMul()
391 bool isKnownNegativeOp1 = Known.isNegative(); in computeKnownBitsMul()
402 (isKnownNegativeOp0 && isKnownNonNegativeOp1 && Known.isNonZero()); in computeKnownBitsMul()
410 Known = KnownBits::mul(Known, Known2, SelfMultiply); in computeKnownBitsMul()
417 if (isKnownNonNegative && !Known.isNegative()) in computeKnownBitsMul()
418 Known.makeNonNegative(); in computeKnownBitsMul()
419 else if (isKnownNegative && !Known.isNonNegative()) in computeKnownBitsMul()
420 Known.makeNegative(); in computeKnownBitsMul()
424 KnownBits &Known) { in computeKnownBitsFromRangeMetadata() argument
425 unsigned BitWidth = Known.getBitWidth(); in computeKnownBitsFromRangeMetadata()
429 Known.Zero.setAllBits(); in computeKnownBitsFromRangeMetadata()
430 Known.One.setAllBits(); in computeKnownBitsFromRangeMetadata()
444 Known.One &= UnsignedMax & Mask; in computeKnownBitsFromRangeMetadata()
445 Known.Zero &= ~UnsignedMax & Mask; in computeKnownBitsFromRangeMetadata()
626 Value *LHS, Value *RHS, KnownBits &Known, in computeKnownBitsFromCmp() argument
634 Known.setAllZero(); in computeKnownBitsFromCmp()
638 Known.makeNonNegative(); in computeKnownBitsFromCmp()
641 Known.makeNegative(); in computeKnownBitsFromCmp()
650 unsigned BitWidth = Known.getBitWidth(); in computeKnownBitsFromCmp()
661 Known = Known.unionWith(KnownBits::makeConstant(*C)); in computeKnownBitsFromCmp()
666 Known.One |= *C; in computeKnownBitsFromCmp()
668 Known.Zero |= ~*C & *Mask; in computeKnownBitsFromCmp()
672 Known.Zero |= ~*C; in computeKnownBitsFromCmp()
674 Known.One |= *C & ~*Mask; in computeKnownBitsFromCmp()
679 Known = Known.unionWith(KnownBits::makeConstant(*C ^ *Mask)); in computeKnownBitsFromCmp()
683 // For those bits in C that are known, we can propagate them to known in computeKnownBitsFromCmp()
688 Known = Known.unionWith(RHSKnown); in computeKnownBitsFromCmp()
693 // For those bits in RHS that are known, we can propagate them to known in computeKnownBitsFromCmp()
695 Known.Zero |= RHSKnown.Zero << ShAmt; in computeKnownBitsFromCmp()
696 Known.One |= RHSKnown.One << ShAmt; in computeKnownBitsFromCmp()
703 Known.One |= *BPow2; in computeKnownBitsFromCmp()
713 Known = Known.unionWith(LHSRange.toKnownBits()); in computeKnownBitsFromCmp()
720 Known.One.setHighBits( in computeKnownBitsFromCmp()
728 Known.Zero.setHighBits( in computeKnownBitsFromCmp()
738 KnownBits &Known, in computeKnownBitsFromICmpCond() argument
749 Known = Known.unionWith(DstKnown.anyext(Known.getBitWidth())); in computeKnownBitsFromICmpCond()
753 computeKnownBitsFromCmp(V, Pred, LHS, RHS, Known, SQ); in computeKnownBitsFromICmpCond()
757 KnownBits &Known, unsigned Depth, in computeKnownBitsFromCond() argument
762 KnownBits Known2(Known.getBitWidth()); in computeKnownBitsFromCond()
763 KnownBits Known3(Known.getBitWidth()); in computeKnownBitsFromCond()
771 Known = Known.unionWith(Known2); in computeKnownBitsFromCond()
775 computeKnownBitsFromICmpCond(V, Cmp, Known, SQ, Invert); in computeKnownBitsFromCond()
778 void llvm::computeKnownBitsFromContext(const Value *V, KnownBits &Known, in computeKnownBitsFromContext() argument
782 computeKnownBitsFromCond(V, Q.CC->Cond, Known, Depth, Q, Q.CC->Invert); in computeKnownBitsFromContext()
792 computeKnownBitsFromCond(V, BI->getCondition(), Known, Depth, Q, in computeKnownBitsFromContext()
797 computeKnownBitsFromCond(V, BI->getCondition(), Known, Depth, Q, in computeKnownBitsFromContext()
801 if (Known.hasConflict()) in computeKnownBitsFromContext()
802 Known.resetAll(); in computeKnownBitsFromContext()
808 unsigned BitWidth = Known.getBitWidth(); in computeKnownBitsFromContext()
829 Known.Zero.setLowBits(Log2_64(RK.ArgValue)); in computeKnownBitsFromContext()
843 Known.setAllOnes(); in computeKnownBitsFromContext()
850 Known.setAllZero(); in computeKnownBitsFromContext()
865 computeKnownBitsFromICmpCond(V, Cmp, Known, Q, /*Invert=*/false); in computeKnownBitsFromContext()
870 if (Known.hasConflict()) in computeKnownBitsFromContext()
871 Known.resetAll(); in computeKnownBitsFromContext()
874 /// Compute known bits from a shift operator, including those with a
875 /// non-constant shift amount. Known is the output of this function. Known2 is a
876 /// pre-allocated temporary with the same bit width as Known and on return
877 /// contains the known bit of the shift value source. KF is an
878 /// operator-specific function that, given the known-bits and a shift amount,
879 /// compute the implied known-bits of the shift operator's result respectively
883 const Operator *I, const APInt &DemandedElts, KnownBits &Known, in computeKnownBitsFromShiftOperator() argument
887 computeKnownBits(I->getOperand(1), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromShiftOperator()
891 Known.isNonZero() || in computeKnownBitsFromShiftOperator()
892 (Known.getMaxValue().ult(Known.getBitWidth()) && in computeKnownBitsFromShiftOperator()
894 Known = KF(Known2, Known, ShAmtNonZero); in computeKnownBitsFromShiftOperator()
912 // bit. If we have a single known bit in x, we can clear all bits in getKnownBitsFromAndXorOr()
930 // bit. If we have a single known bit in x, we can clear all bits in getKnownBitsFromAndXorOr()
951 // following bit is known to be unset in y. in getKnownBitsFromAndXorOr()
1027 void llvm::adjustKnownBitsForSelectArm(KnownBits &Known, Value *Cond, in adjustKnownBitsForSelectArm() argument
1031 if (Known.isConstant()) in adjustKnownBitsForSelectArm()
1035 KnownBits CondRes(Known.getBitWidth()); in adjustKnownBitsForSelectArm()
1047 CondRes = CondRes.unionWith(Known); in adjustKnownBitsForSelectArm()
1058 Known = CondRes; in adjustKnownBitsForSelectArm()
1063 KnownBits &Known, unsigned Depth, in computeKnownBitsFromOperator() argument
1065 unsigned BitWidth = Known.getBitWidth(); in computeKnownBitsFromOperator()
1073 computeKnownBitsFromRangeMetadata(*MD, Known); in computeKnownBitsFromOperator()
1076 computeKnownBits(I->getOperand(1), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1079 Known = getKnownBitsFromAndXorOr(I, DemandedElts, Known2, Known, Depth, Q); in computeKnownBitsFromOperator()
1082 computeKnownBits(I->getOperand(1), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1085 Known = getKnownBitsFromAndXorOr(I, DemandedElts, Known2, Known, Depth, Q); in computeKnownBitsFromOperator()
1088 computeKnownBits(I->getOperand(1), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1091 Known = getKnownBitsFromAndXorOr(I, DemandedElts, Known2, Known, Depth, Q); in computeKnownBitsFromOperator()
1096 Known, Known2, Depth, Q); in computeKnownBitsFromOperator()
1100 computeKnownBits(I->getOperand(0), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1102 Known = in computeKnownBitsFromOperator()
1103 KnownBits::udiv(Known, Known2, Q.IIQ.isExact(cast<BinaryOperator>(I))); in computeKnownBitsFromOperator()
1107 computeKnownBits(I->getOperand(0), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1109 Known = in computeKnownBitsFromOperator()
1110 KnownBits::sdiv(Known, Known2, Q.IIQ.isExact(cast<BinaryOperator>(I))); in computeKnownBitsFromOperator()
1115 KnownBits Res(Known.getBitWidth()); in computeKnownBitsFromOperator()
1120 // Only known if known in both the LHS and RHS. in computeKnownBitsFromOperator()
1121 Known = in computeKnownBitsFromOperator()
1150 Known = Known.anyextOrTrunc(SrcBitWidth); in computeKnownBitsFromOperator()
1151 computeKnownBits(I->getOperand(0), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1153 Inst && Inst->hasNonNeg() && !Known.isNegative()) in computeKnownBitsFromOperator()
1154 Known.makeNonNegative(); in computeKnownBitsFromOperator()
1155 Known = Known.zextOrTrunc(BitWidth); in computeKnownBitsFromOperator()
1164 computeKnownBits(I->getOperand(0), Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1182 Known.Zero.setAllBits(); in computeKnownBitsFromOperator()
1183 Known.One.setAllBits(); in computeKnownBitsFromOperator()
1186 Known = Known.intersectWith(KnownBits::makeConstant( in computeKnownBitsFromOperator()
1190 Known = Known.intersectWith(KnownBits::makeConstant( in computeKnownBitsFromOperator()
1193 Known.Zero.clearSignBit(); in computeKnownBitsFromOperator()
1194 Known.One.clearSignBit(); in computeKnownBitsFromOperator()
1199 Known.makeNegative(); in computeKnownBitsFromOperator()
1201 Known.makeNonNegative(); in computeKnownBitsFromOperator()
1218 // Known bits are automatically intersected across demanded elements of a in computeKnownBitsFromOperator()
1219 // vector. So for example, if a bit is computed as known zero, it must be in computeKnownBitsFromOperator()
1224 // the known bits for an entire element of the output, compute the known in computeKnownBitsFromOperator()
1230 // The known bits of each sub-element are then inserted into place in computeKnownBitsFromOperator()
1231 // (dependent on endian) to form the full result of known bits. in computeKnownBitsFromOperator()
1245 Known.insertBits(KnownSrc, ShiftElt * SubBitWidth); in computeKnownBitsFromOperator()
1254 Known = Known.trunc(SrcBitWidth); in computeKnownBitsFromOperator()
1255 computeKnownBits(I->getOperand(0), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1256 // If the sign bit of the input is known set or clear, then we know the in computeKnownBitsFromOperator()
1258 Known = Known.sext(BitWidth); in computeKnownBitsFromOperator()
1268 computeKnownBitsFromShiftOperator(I, DemandedElts, Known, Known2, Depth, Q, in computeKnownBitsFromOperator()
1273 Known.Zero.setLowBits(C->countr_zero()); in computeKnownBitsFromOperator()
1282 computeKnownBitsFromShiftOperator(I, DemandedElts, Known, Known2, Depth, Q, in computeKnownBitsFromOperator()
1287 Known.Zero.setHighBits(C->countl_zero()); in computeKnownBitsFromOperator()
1296 computeKnownBitsFromShiftOperator(I, DemandedElts, Known, Known2, Depth, Q, in computeKnownBitsFromOperator()
1304 DemandedElts, Known, Known2, Depth, Q); in computeKnownBitsFromOperator()
1311 DemandedElts, Known, Known2, Depth, Q); in computeKnownBitsFromOperator()
1315 computeKnownBits(I->getOperand(0), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1317 Known = KnownBits::srem(Known, Known2); in computeKnownBitsFromOperator()
1321 computeKnownBits(I->getOperand(0), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1323 Known = KnownBits::urem(Known, Known2); in computeKnownBitsFromOperator()
1326 Known.Zero.setLowBits(Log2(cast<AllocaInst>(I)->getAlign())); in computeKnownBitsFromOperator()
1330 // to determine if we can prove known low zero bits. in computeKnownBitsFromOperator()
1331 computeKnownBits(I->getOperand(0), Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1339 if (Known.isUnknown()) in computeKnownBitsFromOperator()
1353 "Access to structure field must be known at compile time"); in computeKnownBitsFromOperator()
1368 Known.resetAll(); in computeKnownBitsFromOperator()
1403 Known = KnownBits::computeForAddSub( in computeKnownBitsFromOperator()
1404 /*Add=*/true, /*NSW=*/false, /* NUW=*/false, Known, IndexBits); in computeKnownBitsFromOperator()
1406 if (!Known.isUnknown() && !AccConstIndices.isZero()) { in computeKnownBitsFromOperator()
1408 Known = KnownBits::computeForAddSub( in computeKnownBitsFromOperator()
1409 /*Add=*/true, /*NSW=*/false, /* NUW=*/false, Known, Index); in computeKnownBitsFromOperator()
1444 Known.Zero.setLowBits(Known2.countMinTrailingZeros()); in computeKnownBitsFromOperator()
1449 Known.Zero.setHighBits(Known2.countMinLeadingZeros()); in computeKnownBitsFromOperator()
1453 Known.Zero.setHighBits(Known2.countMinLeadingZeros()); in computeKnownBitsFromOperator()
1454 Known.One.setHighBits(Known2.countMinLeadingOnes()); in computeKnownBitsFromOperator()
1482 // We need to take the minimum number of known bits in computeKnownBitsFromOperator()
1487 Known.Zero.setLowBits(std::min(Known2.countMinTrailingZeros(), in computeKnownBitsFromOperator()
1503 Known.makeNonNegative(); in computeKnownBitsFromOperator()
1505 Known.makeNegative(); in computeKnownBitsFromOperator()
1512 Known.makeNonNegative(); in computeKnownBitsFromOperator()
1514 Known.makeNegative(); in computeKnownBitsFromOperator()
1520 Known.makeNonNegative(); in computeKnownBitsFromOperator()
1531 // Otherwise take the unions of the known bit sets of the operands, in computeKnownBitsFromOperator()
1533 if (Depth < MaxAnalysisRecursionDepth - 1 && Known.isUnknown()) { in computeKnownBitsFromOperator()
1538 Known.Zero.setAllBits(); in computeKnownBitsFromOperator()
1539 Known.One.setAllBits(); in computeKnownBitsFromOperator()
1567 // TODO: Use RHS Value and compute range from its known bits. in computeKnownBitsFromOperator()
1582 // No reason to continue analyzing in a known dead region, so in computeKnownBitsFromOperator()
1585 Known.resetAll(); in computeKnownBitsFromOperator()
1593 Known = Known.intersectWith(Known2); in computeKnownBitsFromOperator()
1596 if (Known.isUnknown()) in computeKnownBitsFromOperator()
1604 // If range metadata is attached to this call, set known bits from that, in computeKnownBitsFromOperator()
1605 // and then intersect with known bits based on other properties of the in computeKnownBitsFromOperator()
1609 computeKnownBitsFromRangeMetadata(*MD, Known); in computeKnownBitsFromOperator()
1614 Known = Known.unionWith(Range->toKnownBits()); in computeKnownBitsFromOperator()
1619 Known = Known.unionWith(Known2); in computeKnownBitsFromOperator()
1622 // argument value and the range metadata. Simply discard the known bits in computeKnownBitsFromOperator()
1624 if (Known.hasConflict()) in computeKnownBitsFromOperator()
1625 Known.resetAll(); in computeKnownBitsFromOperator()
1635 Known = Known2.abs(IntMinIsPoison); in computeKnownBitsFromOperator()
1640 Known.Zero |= Known2.Zero.reverseBits(); in computeKnownBitsFromOperator()
1641 Known.One |= Known2.One.reverseBits(); in computeKnownBitsFromOperator()
1645 Known.Zero |= Known2.Zero.byteSwap(); in computeKnownBitsFromOperator()
1646 Known.One |= Known2.One.byteSwap(); in computeKnownBitsFromOperator()
1650 // If we have a known 1, its position is our upper bound. in computeKnownBitsFromOperator()
1656 Known.Zero.setBitsFrom(LowBits); in computeKnownBitsFromOperator()
1661 // If we have a known 1, its position is our upper bound. in computeKnownBitsFromOperator()
1667 Known.Zero.setBitsFrom(LowBits); in computeKnownBitsFromOperator()
1672 // We can bound the space the count needs. Also, bits known to be zero in computeKnownBitsFromOperator()
1676 Known.Zero.setBitsFrom(LowBits); in computeKnownBitsFromOperator()
1696 Known.Zero = in computeKnownBitsFromOperator()
1698 Known.One = in computeKnownBitsFromOperator()
1703 computeKnownBits(I->getOperand(0), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1705 Known = KnownBits::uadd_sat(Known, Known2); in computeKnownBitsFromOperator()
1708 computeKnownBits(I->getOperand(0), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1710 Known = KnownBits::usub_sat(Known, Known2); in computeKnownBitsFromOperator()
1713 computeKnownBits(I->getOperand(0), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1715 Known = KnownBits::sadd_sat(Known, Known2); in computeKnownBitsFromOperator()
1718 computeKnownBits(I->getOperand(0), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1720 Known = KnownBits::ssub_sat(Known, Known2); in computeKnownBitsFromOperator()
1724 computeKnownBits(I->getOperand(0), DemandedElts.reverseBits(), Known, in computeKnownBitsFromOperator()
1735 computeKnownBits(I->getOperand(0), Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1738 computeKnownBits(I->getOperand(0), Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1746 Known.Zero |= Known.One; in computeKnownBitsFromOperator()
1749 Known.One.clearAllBits(); in computeKnownBitsFromOperator()
1753 computeKnownBits(I->getOperand(0), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1755 Known = KnownBits::umin(Known, Known2); in computeKnownBitsFromOperator()
1758 computeKnownBits(I->getOperand(0), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1760 Known = KnownBits::umax(Known, Known2); in computeKnownBitsFromOperator()
1763 computeKnownBits(I->getOperand(0), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1765 Known = KnownBits::smin(Known, Known2); in computeKnownBitsFromOperator()
1768 computeKnownBits(I->getOperand(0), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1770 Known = KnownBits::smax(Known, Known2); in computeKnownBitsFromOperator()
1773 computeKnownBits(I->getOperand(0), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1779 Known &= Known2.anyextOrTrunc(BitWidth); in computeKnownBitsFromOperator()
1785 computeKnownBits(I->getOperand(0), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1787 Known = KnownBits::mulhs(Known, Known2); in computeKnownBitsFromOperator()
1792 computeKnownBits(I->getOperand(0), DemandedElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1794 Known = KnownBits::mulhu(Known, Known2); in computeKnownBitsFromOperator()
1797 Known.Zero.setBitsFrom(32); in computeKnownBitsFromOperator()
1803 Known = computeKnownBitsForHorizontalOperation( in computeKnownBitsFromOperator()
1814 Known = computeKnownBitsForHorizontalOperation(I, DemandedElts, Depth, in computeKnownBitsFromOperator()
1822 Known = computeKnownBitsForHorizontalOperation( in computeKnownBitsFromOperator()
1833 Known = computeKnownBitsForHorizontalOperation(I, DemandedElts, Depth, in computeKnownBitsFromOperator()
1856 Known.Zero.setBitsFrom(KnownZeroFirstBit); in computeKnownBitsFromOperator()
1863 Known = getVScaleRange(II->getFunction(), BitWidth).toKnownBits(); in computeKnownBitsFromOperator()
1874 Known.resetAll(); in computeKnownBitsFromOperator()
1881 Known.resetAll(); in computeKnownBitsFromOperator()
1884 Known.One.setAllBits(); in computeKnownBitsFromOperator()
1885 Known.Zero.setAllBits(); in computeKnownBitsFromOperator()
1888 computeKnownBits(LHS, DemandedLHS, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1890 if (Known.isUnknown()) in computeKnownBitsFromOperator()
1896 Known = Known.intersectWith(Known2); in computeKnownBitsFromOperator()
1902 Known.resetAll(); in computeKnownBitsFromOperator()
1917 Known.One.setAllBits(); in computeKnownBitsFromOperator()
1918 Known.Zero.setAllBits(); in computeKnownBitsFromOperator()
1920 computeKnownBits(Elt, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1922 if (Known.isUnknown()) in computeKnownBitsFromOperator()
1928 Known = Known.intersectWith(Known2); in computeKnownBitsFromOperator()
1940 Known.resetAll(); in computeKnownBitsFromOperator()
1947 computeKnownBits(Vec, DemandedVecElts, Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1961 /* NUW=*/false, DemandedElts, Known, Known2, Depth, Q); in computeKnownBitsFromOperator()
1967 /* NUW=*/false, DemandedElts, Known, Known2, Depth, Q); in computeKnownBitsFromOperator()
1972 DemandedElts, Known, Known2, Depth, Q); in computeKnownBitsFromOperator()
1981 computeKnownBits(I->getOperand(0), Known, Depth + 1, Q); in computeKnownBitsFromOperator()
1986 /// Determine which bits of V are known to be either zero or one and return
1990 KnownBits Known(getBitWidth(V->getType(), Q.DL)); in computeKnownBits() local
1991 ::computeKnownBits(V, DemandedElts, Known, Depth, Q); in computeKnownBits()
1992 return Known; in computeKnownBits()
1995 /// Determine which bits of V are known to be either zero or one and return
1999 KnownBits Known(getBitWidth(V->getType(), Q.DL)); in computeKnownBits() local
2000 computeKnownBits(V, Known, Depth, Q); in computeKnownBits()
2001 return Known; in computeKnownBits()
2004 /// Determine which bits of V are known to be either zero or one and return
2005 /// them in the Known bit set.
2016 /// where V is a vector, known zero, and known one values are the
2020 KnownBits &Known, unsigned Depth, in computeKnownBits() argument
2024 Known.resetAll(); in computeKnownBits()
2033 unsigned BitWidth = Known.getBitWidth(); in computeKnownBits()
2050 "V and Known should have same BitWidth"); in computeKnownBits()
2053 "V and Known should have same BitWidth"); in computeKnownBits()
2060 Known = KnownBits::makeConstant(*C); in computeKnownBits()
2065 Known.setAllZero(); in computeKnownBits()
2068 // Handle a constant vector by taking the intersection of the known bits of in computeKnownBits()
2074 Known.Zero.setAllBits(); Known.One.setAllBits(); in computeKnownBits()
2079 Known.Zero &= ~Elt; in computeKnownBits()
2080 Known.One &= Elt; in computeKnownBits()
2082 if (Known.hasConflict()) in computeKnownBits()
2083 Known.resetAll(); in computeKnownBits()
2091 Known.Zero.setAllBits(); Known.One.setAllBits(); in computeKnownBits()
2100 Known.resetAll(); in computeKnownBits()
2104 Known.Zero &= ~Elt; in computeKnownBits()
2105 Known.One &= Elt; in computeKnownBits()
2107 if (Known.hasConflict()) in computeKnownBits()
2108 Known.resetAll(); in computeKnownBits()
2113 Known.resetAll(); in computeKnownBits()
2125 Known = Range->toKnownBits(); in computeKnownBits()
2135 computeKnownBits(GA->getAliasee(), Known, Depth + 1, Q); in computeKnownBits()
2140 computeKnownBitsFromOperator(I, DemandedElts, Known, Depth, Q); in computeKnownBits()
2143 Known = CR->toKnownBits(); in computeKnownBits()
2146 // Aligned pointers have trailing zeros - refine Known.Zero set in computeKnownBits()
2149 Known.Zero.setLowBits(Log2(Alignment)); in computeKnownBits()
2152 // computeKnownBitsFromContext strictly refines Known. in computeKnownBits()
2155 // Check whether we can determine known bits from context such as assumes. in computeKnownBits()
2156 computeKnownBitsFromContext(V, Known, Depth, Q); in computeKnownBits()
2216 /// Return true if the given value is known to have exactly one
2217 /// bit set when defined. For vectors return true if every element is known to
2384 /// Test whether a GEP's result is known to be non-null.
2386 /// Uses properties inherent in a GEP to try to determine whether it is known
2687 // the lowest known One of X and Y. If they are non-zero, the result in isNonZeroMul()
2735 // If all of the bits shifted out are known to be zero, and Val is known in isNonZeroShift()
2842 KnownBits Known(BitWidth); in isKnownNonZeroFromOperator() local
2843 computeKnownBits(I->getOperand(0), DemandedElts, Known, Depth, Q); in isKnownNonZeroFromOperator()
2844 if (Known.One[0]) in isKnownNonZeroFromOperator()
2847 return isNonZeroShift(I, DemandedElts, Depth, Q, Known); in isKnownNonZeroFromOperator()
2858 KnownBits Known = in isKnownNonZeroFromOperator() local
2860 if (Known.isNegative()) in isKnownNonZeroFromOperator()
2863 return isNonZeroShift(I, DemandedElts, Depth, Q, Known); in isKnownNonZeroFromOperator()
2889 // with compute known bits so just return early. in isKnownNonZeroFromOperator()
3197 KnownBits Known(BitWidth); in isKnownNonZeroFromOperator() local
3198 computeKnownBits(I, DemandedElts, Known, Depth, Q); in isKnownNonZeroFromOperator()
3199 return Known.One != 0; in isKnownNonZeroFromOperator()
3202 /// Return true if the given value is known to be non-zero when defined. For
3203 /// vectors, return true if every demanded element is known to be non-zero when
3232 // For constant vectors, check that all elements are poison or known in isKnownNonZero()
3233 // non-zero to determine that the whole vector is known non-zero. in isKnownNonZero()
3431 /// Return true if V1 == (binop V2, X), where X is known non-zero.
3461 /// Return true if V2 == V1 * C, where V1 is known non-zero, C is not 0/1 and
3476 /// Return true if V2 == V1 << C, where V1 is known non-zero, C is not 0 and
3593 /// Return true if it is known that V1 != V2.
3638 // Are any known bits in V1 contradictory to known bits in V2? If V1 in isKnownNonEqual()
3639 // has a known zero where V2 has a known one, they must not be equal. in isKnownNonEqual()
3759 /// vector element with the minimum number of known sign bits of the demanded
3928 KnownBits Known(TyBits); in ComputeNumSignBitsImpl() local
3929 computeKnownBits(U->getOperand(0), DemandedElts, Known, Depth + 1, Q); in ComputeNumSignBitsImpl()
3931 // If the input is known to be 0 or 1, the output is 0/-1, which is in ComputeNumSignBitsImpl()
3933 if ((Known.Zero | 1).isAllOnes()) in ComputeNumSignBitsImpl()
3938 if (Known.isNonNegative()) in ComputeNumSignBitsImpl()
3955 KnownBits Known(TyBits); in ComputeNumSignBitsImpl() local
3956 computeKnownBits(U->getOperand(1), DemandedElts, Known, Depth + 1, Q); in ComputeNumSignBitsImpl()
3957 // If the input is known to be 0 or 1, the output is 0/-1, which is in ComputeNumSignBitsImpl()
3959 if ((Known.Zero | 1).isAllOnes()) in ComputeNumSignBitsImpl()
3962 // If the input is known to be positive (the sign bit is known clear), in ComputeNumSignBitsImpl()
3965 if (Known.isNonNegative()) in ComputeNumSignBitsImpl()
4102 KnownBits Known(TyBits); in ComputeNumSignBitsImpl() local
4103 computeKnownBits(V, DemandedElts, Known, Depth, Q); in ComputeNumSignBitsImpl()
4107 return std::max(FirstAnswer, Known.countMinSignBits()); in ComputeNumSignBitsImpl()
4845 FPClassTest InterestedClasses, KnownFPClass &Known,
4848 static void computeKnownFPClass(const Value *V, KnownFPClass &Known, in computeKnownFPClass() argument
4854 computeKnownFPClass(V, DemandedElts, InterestedClasses, Known, Depth, Q); in computeKnownFPClass()
4860 KnownFPClass &Known, unsigned Depth, in computeKnownFPClassForFPTrunc() argument
4873 Known.knownNot(KnownFPClass::OrderedLessThanZeroMask); in computeKnownFPClassForFPTrunc()
4875 Known.propagateNaN(KnownSrc, true); in computeKnownFPClassForFPTrunc()
4881 FPClassTest InterestedClasses, KnownFPClass &Known, in computeKnownFPClass() argument
4883 assert(Known.isUnknown() && "should not be called with known information"); in computeKnownFPClass()
4887 Known.resetAll(); in computeKnownFPClass()
4894 Known.KnownFPClasses = CFP->getValueAPF().classify(); in computeKnownFPClass()
4895 Known.SignBit = CFP->isNegative(); in computeKnownFPClass()
4900 Known.KnownFPClasses = fcPosZero; in computeKnownFPClass()
4901 Known.SignBit = false; in computeKnownFPClass()
4906 Known.KnownFPClasses = fcNone; in computeKnownFPClass()
4907 Known.SignBit = false; in computeKnownFPClass()
4915 Known.KnownFPClasses = fcNone; in computeKnownFPClass()
4927 Known = KnownFPClass(); in computeKnownFPClass()
4934 Known = KnownFPClass(); in computeKnownFPClass()
4939 Known.KnownFPClasses |= C.classify(); in computeKnownFPClass()
4946 Known.SignBit = SignBitAllOne; in computeKnownFPClass()
4971 auto ClearClassesFromFlags = make_scope_exit([=, &Known] { in computeKnownFPClass()
4972 Known.knownNot(KnownNotFromFlags); in computeKnownFPClass()
4973 if (!Known.SignBit && AssumedClasses.SignBit) { in computeKnownFPClass()
4975 Known.signBitMustBeOne(); in computeKnownFPClass()
4977 Known.signBitMustBeZero(); in computeKnownFPClass()
4992 Known, Depth + 1, Q); in computeKnownFPClass()
4993 Known.fneg(); in computeKnownFPClass()
5037 computeKnownFPClass(LHS, DemandedElts, InterestedClasses & FilterLHS, Known, in computeKnownFPClass()
5039 Known.KnownFPClasses &= FilterLHS; in computeKnownFPClass()
5045 Known |= Known2; in computeKnownFPClass()
5057 InterestedClasses, Known, Depth + 1, Q); in computeKnownFPClass()
5060 Known.fabs(); in computeKnownFPClass()
5067 Known, Depth + 1, Q); in computeKnownFPClass()
5070 Known.copysign(KnownSign); in computeKnownFPClass()
5082 Known.knownNot(fcNegZero); in computeKnownFPClass()
5090 Known.knownNot(fcNegative); in computeKnownFPClass()
5104 Known.knownNot(fcPosInf); in computeKnownFPClass()
5106 Known.knownNot(fcSNan); in computeKnownFPClass()
5110 Known.knownNot(fcNan); in computeKnownFPClass()
5113 Known.knownNot(fcNegInf | fcNegSubnormal | fcNegNormal); in computeKnownFPClass()
5120 Known.knownNot(fcNegZero); in computeKnownFPClass()
5130 Known.knownNot(fcInf); in computeKnownFPClass()
5132 Known.knownNot(fcNan); in computeKnownFPClass()
5146 Known = KnownLHS | KnownRHS; in computeKnownFPClass()
5150 Known.knownNot(fcNan); in computeKnownFPClass()
5153 // If at least one operand is known to be positive, the result must be in computeKnownFPClass()
5159 Known.knownNot(KnownFPClass::OrderedLessThanZeroMask); in computeKnownFPClass()
5161 // If at least one operand is known to be positive, the result must be in computeKnownFPClass()
5165 Known.knownNot(KnownFPClass::OrderedLessThanZeroMask); in computeKnownFPClass()
5167 // If at least one operand is known to be negative, the result must be in computeKnownFPClass()
5173 Known.knownNot(KnownFPClass::OrderedGreaterThanZeroMask); in computeKnownFPClass()
5175 // If at least one operand is known to be negative, the result must be in computeKnownFPClass()
5179 Known.knownNot(KnownFPClass::OrderedGreaterThanZeroMask); in computeKnownFPClass()
5189 if ((Known.KnownFPClasses & fcZero) != fcNone && in computeKnownFPClass()
5190 !Known.isKnownNeverSubnormal()) { in computeKnownFPClass()
5198 Known.KnownFPClasses |= fcZero; in computeKnownFPClass()
5201 if (Known.isKnownNeverNaN()) { in computeKnownFPClass()
5205 Known.signBitMustBeOne(); in computeKnownFPClass()
5207 Known.signBitMustBeZero(); in computeKnownFPClass()
5215 Known.signBitMustBeZero(); in computeKnownFPClass()
5218 Known.signBitMustBeOne(); in computeKnownFPClass()
5233 // denormal mode to preserve known-not-0 knowledge. in computeKnownFPClass()
5234 Known.KnownFPClasses = KnownSrc.KnownFPClasses | fcZero | fcQNan; in computeKnownFPClass()
5239 Known.knownNot(fcNan); in computeKnownFPClass()
5241 Known.knownNot(fcSNan); in computeKnownFPClass()
5254 Known.knownNot(fcPosZero); in computeKnownFPClass()
5256 Known.knownNot(fcNegZero); in computeKnownFPClass()
5261 Known.knownNot(fcSubnormal); in computeKnownFPClass()
5266 Known.knownNot(fcNegZero); in computeKnownFPClass()
5276 Known = computeKnownFPClass(II->getArgOperand(0), II->getFastMathFlags(), in computeKnownFPClass()
5279 if (!Known.isKnownNeverNaN()) in computeKnownFPClass()
5280 Known.SignBit.reset(); in computeKnownFPClass()
5285 Known = computeKnownFPClass( in computeKnownFPClass()
5306 Known.knownNot(fcSubnormal); in computeKnownFPClass()
5308 Known.propagateNaN(KnownSrc, true); in computeKnownFPClass()
5314 Known.knownNot(fcPosInf); in computeKnownFPClass()
5316 Known.knownNot(fcNegInf); in computeKnownFPClass()
5321 Known.knownNot(fcPosFinite); in computeKnownFPClass()
5323 Known.knownNot(fcNegFinite); in computeKnownFPClass()
5330 Known.knownNot(fcNegative); in computeKnownFPClass()
5338 Known.knownNot(fcNan); in computeKnownFPClass()
5339 Known.signBitMustBeZero(); in computeKnownFPClass()
5345 computeKnownFPClassForFPTrunc(Op, DemandedElts, InterestedClasses, Known, in computeKnownFPClass()
5373 Known.knownNot(fcPosInf); in computeKnownFPClass()
5376 Known.knownNot(fcNan); in computeKnownFPClass()
5380 Known.knownNot(fcNegInf); in computeKnownFPClass()
5396 Known.knownNot(fcNegative); in computeKnownFPClass()
5412 Known.knownNot(fcNegative); in computeKnownFPClass()
5419 Known.propagateNaN(KnownSrc, /*PropagateSign=*/true); in computeKnownFPClass()
5423 Known.knownNot(fcNegative); in computeKnownFPClass()
5425 Known.knownNot(KnownFPClass::OrderedLessThanZeroMask); in computeKnownFPClass()
5428 Known.knownNot(fcPositive); in computeKnownFPClass()
5430 Known.knownNot(KnownFPClass::OrderedGreaterThanZeroMask); in computeKnownFPClass()
5448 Known.knownNot(fcSubnormal); in computeKnownFPClass()
5454 Known.propagateCanonicalizingSrc(KnownSrc, *F, II->getType()); in computeKnownFPClass()
5458 Known.knownNot(fcPosInf); in computeKnownFPClass()
5460 Known.knownNot(fcNegInf); in computeKnownFPClass()
5464 Known.knownNot(fcPosSubnormal); in computeKnownFPClass()
5466 Known.knownNot(fcNegSubnormal); in computeKnownFPClass()
5468 Known.knownNot(fcPosZero); in computeKnownFPClass()
5470 Known.knownNot(fcNegZero); in computeKnownFPClass()
5477 Known, Depth + 1, Q); in computeKnownFPClass()
5483 Known.knownNot(fcNan); in computeKnownFPClass()
5486 Known.knownNot(fcNegZero); in computeKnownFPClass()
5489 Known.knownNot(fcSubnormal); in computeKnownFPClass()
5492 Known.signBitMustBeZero(); in computeKnownFPClass()
5534 Known.knownNot(fcNan); in computeKnownFPClass()
5542 Known.knownNot(KnownFPClass::OrderedLessThanZeroMask); in computeKnownFPClass()
5551 Known.knownNot(fcNegZero); in computeKnownFPClass()
5561 Known.knownNot(fcNegZero); in computeKnownFPClass()
5570 Known.knownNot(fcNegative); in computeKnownFPClass()
5591 Known.signBitMustBeZero(); in computeKnownFPClass()
5593 Known.signBitMustBeOne(); in computeKnownFPClass()
5598 Known.knownNot(fcNan); in computeKnownFPClass()
5610 Known.knownNot(fcNan); in computeKnownFPClass()
5620 Known.KnownFPClasses = fcNan | fcPosNormal; in computeKnownFPClass()
5623 Known.KnownFPClasses = fcNan | fcZero; in computeKnownFPClass()
5664 Known.knownNot(fcNan); in computeKnownFPClass()
5670 Known.knownNot(fcNegative); in computeKnownFPClass()
5676 Known.knownNot(fcNan); in computeKnownFPClass()
5681 Known.knownNot(KnownFPClass::OrderedLessThanZeroMask); in computeKnownFPClass()
5683 Known.knownNot(KnownFPClass::OrderedGreaterThanZeroMask); in computeKnownFPClass()
5687 Known.knownNot(fcNegative); in computeKnownFPClass()
5689 Known.knownNot(fcPositive); in computeKnownFPClass()
5697 Known, Depth + 1, Q); in computeKnownFPClass()
5706 if (Known.KnownFPClasses & fcPosSubnormal) in computeKnownFPClass()
5707 Known.KnownFPClasses |= fcPosNormal; in computeKnownFPClass()
5708 if (Known.KnownFPClasses & fcNegSubnormal) in computeKnownFPClass()
5709 Known.KnownFPClasses |= fcNegNormal; in computeKnownFPClass()
5710 Known.knownNot(fcSubnormal); in computeKnownFPClass()
5714 if (!Known.isKnownNeverNaN()) in computeKnownFPClass()
5715 Known.SignBit = std::nullopt; in computeKnownFPClass()
5719 computeKnownFPClassForFPTrunc(Op, DemandedElts, InterestedClasses, Known, in computeKnownFPClass()
5726 Known.knownNot(fcNan); in computeKnownFPClass()
5729 Known.knownNot(fcSubnormal); in computeKnownFPClass()
5732 Known.knownNot(fcNegZero); in computeKnownFPClass()
5734 Known.signBitMustBeZero(); in computeKnownFPClass()
5748 Known.knownNot(fcInf); in computeKnownFPClass()
5765 return computeKnownFPClass(Vec, DemandedVecElts, InterestedClasses, Known, in computeKnownFPClass()
5789 computeKnownFPClass(Elt, Known, InterestedClasses, Depth + 1, Q); in computeKnownFPClass()
5791 if (Known.isUnknown()) in computeKnownFPClass()
5794 Known.KnownFPClasses = fcNone; in computeKnownFPClass()
5802 Known |= Known2; in computeKnownFPClass()
5817 computeKnownFPClass(LHS, DemandedLHS, InterestedClasses, Known, in computeKnownFPClass()
5821 if (Known.isUnknown()) in computeKnownFPClass()
5824 Known.KnownFPClasses = fcNone; in computeKnownFPClass()
5832 Known |= Known2; in computeKnownFPClass()
5846 Known.knownNot(fcSubnormal); in computeKnownFPClass()
5855 Known.knownNot(fcNegative); in computeKnownFPClass()
5858 Known.knownNot(fcNegZero); in computeKnownFPClass()
5860 Known.knownNot(fcNegInf); in computeKnownFPClass()
5864 Known.knownNot(fcPositive); in computeKnownFPClass()
5867 Known.knownNot(fcPosZero); in computeKnownFPClass()
5869 Known.knownNot(fcPosInf); in computeKnownFPClass()
5872 Known.propagateNaN(KnownSrc); in computeKnownFPClass()
5881 computeKnownFPClass(Src, DemandedElts, InterestedClasses, Known, Depth + 1, in computeKnownFPClass()
5891 // Otherwise take the unions of the known bit sets of the operands, in computeKnownFPClass()
5911 // detect known sign bits. in computeKnownFPClass()
5918 Known = KnownSrc; in computeKnownFPClass()
5921 Known |= KnownSrc; in computeKnownFPClass()
5924 if (Known.KnownFPClasses == fcAllFlags) in computeKnownFPClass()
5951 KnownFPClass Known; in computeKnownFPClass() local
5952 ::computeKnownFPClass(V, Known, InterestedClasses, Depth, SQ); in computeKnownFPClass()
5953 return Known; in computeKnownFPClass()
6117 // each of the elements of the substruct are known (ie, inserted into From by an
7075 // CANNOT overflow. If this can be determined from the known bits of the in computeOverflowForSignedAdd()
7077 // The only other way to improve on the known bits is from an assumption, so in computeOverflowForSignedAdd()
8439 // operands is known to not be zero or if we don't care about signed zero. in matchSelectPattern()
8467 // Both operands are known non-NaN. in matchSelectPattern()