Lines Matching defs:CR1

65     EnumerateConstantRanges(Bits, [&](const ConstantRange &CR1) {
67 Bits, [&](const ConstantRange &CR2) { TestFn(CR1, CR2); });
84 bool PreferSmallest(const ConstantRange &CR1, const ConstantRange &CR2) {
85 return CR1.isSizeStrictlySmallerThan(CR2);
88 bool PreferSmallestUnsigned(const ConstantRange &CR1,
90 if (CR1.isWrappedSet() != CR2.isWrappedSet())
91 return CR1.isWrappedSet() < CR2.isWrappedSet();
92 return PreferSmallest(CR1, CR2);
95 bool PreferSmallestSigned(const ConstantRange &CR1, const ConstantRange &CR2) {
96 if (CR1.isSignWrappedSet() != CR2.isSignWrappedSet())
97 return CR1.isSignWrappedSet() < CR2.isSignWrappedSet();
98 return PreferSmallest(CR1, CR2);
101 bool PreferSmallestNonFullUnsigned(const ConstantRange &CR1,
103 if (CR1.isFullSet() != CR2.isFullSet())
104 return CR1.isFullSet() < CR2.isFullSet();
105 return PreferSmallestUnsigned(CR1, CR2);
108 bool PreferSmallestNonFullSigned(const ConstantRange &CR1,
110 if (CR1.isFullSet() != CR2.isFullSet())
111 return CR1.isFullSet() < CR2.isFullSet();
112 return PreferSmallestSigned(CR1, CR2);
216 static bool CheckSingleElementsOnly(const ConstantRange &CR1,
218 return CR1.isSingleElement() && CR2.isSingleElement();
221 static bool CheckNonWrappedOnly(const ConstantRange &CR1,
223 return !CR1.isWrappedSet() && !CR2.isWrappedSet();
226 static bool CheckNonSignWrappedOnly(const ConstantRange &CR1,
228 return !CR1.isSignWrappedSet() && !CR2.isSignWrappedSet();
232 CheckNoSignedWrappedLHSAndNoWrappedRHSOnly(const ConstantRange &CR1,
234 return !CR1.isSignWrappedSet() && !CR2.isWrappedSet();
237 static bool CheckNonWrappedOrSignWrappedOnly(const ConstantRange &CR1,
239 return !CR1.isWrappedSet() && !CR1.isSignWrappedSet() &&
249 [&](const ConstantRange &CR1, const ConstantRange &CR2) {
250 SmallBitVector Elems(1 << CR1.getBitWidth());
251 ForeachNumInConstantRange(CR1, [&](const APInt &N1) {
257 TestRange(RangeFn(CR1, CR2), Elems, PreferenceFn, {CR1, CR2},
258 CheckFn(CR1, CR2));
415 ConstantRange CR1(APInt(8, 42), APInt::getMinValue(8));
416 EXPECT_FALSE(CR1.isWrappedSet());
417 EXPECT_TRUE(CR1.isUpperWrapped());
557 [=](const ConstantRange &CR1, const ConstantRange &CR2) {
558 unsigned Bits = CR1.getBitWidth();
562 if (InResultFn(CR1, CR2, Num))
565 ConstantRange SmallestCR = OpFn(CR1, CR2, ConstantRange::Smallest);
566 TestRange(SmallestCR, Elems, PreferSmallest, {CR1, CR2});
568 ConstantRange UnsignedCR = OpFn(CR1, CR2, ConstantRange::Unsigned);
569 TestRange(UnsignedCR, Elems, PreferSmallestNonFullUnsigned, {CR1, CR2});
571 ConstantRange SignedCR = OpFn(CR1, CR2, ConstantRange::Signed);
572 TestRange(SignedCR, Elems, PreferSmallestNonFullSigned, {CR1, CR2});
574 std::optional<ConstantRange> ExactCR = ExactOpFn(CR1, CR2);
585 [](const ConstantRange &CR1, const ConstantRange &CR2,
587 return CR1.intersectWith(CR2, Type);
589 [](const ConstantRange &CR1, const ConstantRange &CR2) {
590 return CR1.exactIntersectWith(CR2);
592 [](const ConstantRange &CR1, const ConstantRange &CR2, const APInt &N) {
593 return CR1.contains(N) && CR2.contains(N);
599 [](const ConstantRange &CR1, const ConstantRange &CR2,
601 return CR1.unionWith(CR2, Type);
603 [](const ConstantRange &CR1, const ConstantRange &CR2) {
604 return CR1.exactUnionWith(CR2);
606 [](const ConstantRange &CR1, const ConstantRange &CR2, const APInt &N) {
607 return CR1.contains(N) || CR2.contains(N);
730 [](const ConstantRange &CR1, const ConstantRange &CR2) {
731 return CR1.add(CR2);
794 [](const ConstantRange &CR1, const ConstantRange &CR2) {
795 return CR1.addWithNoWrap(CR2, OBO::NoSignedWrap);
847 [](const ConstantRange &CR1, const ConstantRange &CR2) {
848 return CR1.addWithNoWrap(CR2, OBO::NoUnsignedWrap);
886 [](const ConstantRange &CR1, const ConstantRange &CR2) {
887 return CR1.addWithNoWrap(CR2, OBO::NoUnsignedWrap | OBO::NoSignedWrap);
923 [](const ConstantRange &CR1, const ConstantRange &CR2) {
924 return CR1.sub(CR2);
934 [](const ConstantRange &CR1, const ConstantRange &CR2) {
935 return CR1.subWithNoWrap(CR2, OBO::NoSignedWrap);
946 [](const ConstantRange &CR1, const ConstantRange &CR2) {
947 return CR1.subWithNoWrap(CR2, OBO::NoUnsignedWrap);
958 [](const ConstantRange &CR1, const ConstantRange &CR2) {
959 return CR1.subWithNoWrap(CR2, OBO::NoUnsignedWrap | OBO::NoSignedWrap);
1026 [](const ConstantRange &CR1, const ConstantRange &CR2) {
1027 return CR1.multiply(CR2);
1105 [](const ConstantRange &CR1, const ConstantRange &CR2) {
1106 return CR1.multiplyWithNoWrap(CR2, OBO::NoUnsignedWrap);
1117 [](const ConstantRange &CR1, const ConstantRange &CR2) {
1118 return CR1.multiplyWithNoWrap(CR2, OBO::NoSignedWrap);
1129 [](const ConstantRange &CR1, const ConstantRange &CR2) {
1130 return CR1.multiplyWithNoWrap(CR2,
1147 [](const ConstantRange &CR1, const ConstantRange &CR2) {
1148 return CR1.smul_fast(CR2);
1172 [](const ConstantRange &CR1, const ConstantRange &CR2) {
1173 return CR1.umax(CR2);
1202 [](const ConstantRange &CR1, const ConstantRange &CR2) {
1203 return CR1.smax(CR2);
1228 [](const ConstantRange &CR1, const ConstantRange &CR2) {
1229 return CR1.umin(CR2);
1257 [](const ConstantRange &CR1, const ConstantRange &CR2) {
1258 return CR1.smin(CR2);
1300 EnumerateTwoInterestingConstantRanges([&](const ConstantRange &CR1,
1304 unsigned Bits = CR1.getBitWidth();
1307 ForeachNumInConstantRange(CR1, [&](const APInt &N1) {
1322 ConstantRange CR = CR1.sdiv(CR2);
1383 [](const ConstantRange &CR1, const ConstantRange &CR2) {
1384 return CR1.urem(CR2);
1458 [](const ConstantRange &CR1, const ConstantRange &CR2) {
1459 return CR1.srem(CR2);
1502 [](const ConstantRange &CR1, const ConstantRange &CR2) {
1503 return CR1.shl(CR2);
1520 [](const ConstantRange &CR1, const ConstantRange &CR2) {
1521 ConstantRange Res = CR1.shlWithNoWrap(CR2, OBO::NoUnsignedWrap);
1522 EXPECT_TRUE(CR1.shl(CR2).contains(Res));
1534 [](const ConstantRange &CR1, const ConstantRange &CR2) {
1535 return CR1.shlWithNoWrap(CR2, OBO::NoSignedWrap);
1546 [](const ConstantRange &CR1, const ConstantRange &CR2) {
1547 return CR1.shlWithNoWrap(CR2, OBO::NoUnsignedWrap | OBO::NoSignedWrap);
1695 [&](const ConstantRange &CR1, const ConstantRange &CR2) {
1697 ForeachNumInConstantRange(CR1, [&](const APInt &N1) {
1702 EXPECT_EQ(CR1.icmp(Pred, CR2), Exhaustive);
2304 EnumerateTwoInterestingConstantRanges([=](const ConstantRange &CR1,
2306 // Loop over all N1 in CR1 and N2 in CR2 and check whether any of the
2311 ForeachNumInConstantRange(CR1, [&](const APInt &N1) {
2326 ConstantRange::OverflowResult OR = MayOverflowFn(CR1, CR2);
2347 if (CR1.isEmptySet() || CR2.isEmptySet())
2365 [](const ConstantRange &CR1, const ConstantRange &CR2) {
2366 return CR1.unsignedAddMayOverflow(CR2);
2378 [](const ConstantRange &CR1, const ConstantRange &CR2) {
2379 return CR1.unsignedSubMayOverflow(CR2);
2391 [](const ConstantRange &CR1, const ConstantRange &CR2) {
2392 return CR1.unsignedMulMayOverflow(CR2);
2404 [](const ConstantRange &CR1, const ConstantRange &CR2) {
2405 return CR1.signedAddMayOverflow(CR2);
2417 [](const ConstantRange &CR1, const ConstantRange &CR2) {
2418 return CR1.signedSubMayOverflow(CR2);
2440 ConstantRange CR1(APInt(8, 164), APInt(8, 237 + 1));
2441 EXPECT_EQ(CR1, ConstantRange::fromKnownBits(Known, /*signed*/false));
2442 EXPECT_EQ(CR1, ConstantRange::fromKnownBits(Known, /*signed*/true));
2532 [](const ConstantRange &CR1, const ConstantRange &CR2) {
2533 return CR1.uadd_sat(CR2);
2543 [](const ConstantRange &CR1, const ConstantRange &CR2) {
2544 return CR1.usub_sat(CR2);
2554 [](const ConstantRange &CR1, const ConstantRange &CR2) {
2555 return CR1.umul_sat(CR2);
2563 [](const ConstantRange &CR1, const ConstantRange &CR2) {
2564 return CR1.ushl_sat(CR2);
2572 [](const ConstantRange &CR1, const ConstantRange &CR2) {
2573 return CR1.sadd_sat(CR2);
2583 [](const ConstantRange &CR1, const ConstantRange &CR2) {
2584 return CR1.ssub_sat(CR2);
2594 [](const ConstantRange &CR1, const ConstantRange &CR2) {
2595 return CR1.smul_sat(CR2);
2603 [](const ConstantRange &CR1, const ConstantRange &CR2) {
2604 return CR1.sshl_sat(CR2);
2755 [](const ConstantRange &CR1, const ConstantRange &CR2) {
2756 return CR1.binaryAnd(CR2);
2793 [](const ConstantRange &CR1, const ConstantRange &CR2) {
2794 return CR1.binaryOr(CR2);
2821 [](const ConstantRange &CR1, const ConstantRange &CR2) {
2822 return CR1.binaryXor(CR2);
2851 [&](const ConstantRange &CR1, const ConstantRange &CR2) {
2854 std::tie(TgtPred, ExpectedEquivalent) = Func(CR1, CR2);
2858 ForeachNumInConstantRange(CR1, [&](const APInt &N1) {
2879 const ConstantRange &CR1,
2883 ConstantRange::areInsensitiveToSignednessOfICmpPredicate(CR1, CR2));
2896 Pred, [InvertedFlippedSignednessPred](const ConstantRange &CR1,
2901 CR1, CR2));
2911 Pred, [Pred](const ConstantRange &CR1, const ConstantRange &CR2) {
2913 ConstantRange::getEquivalentPredWithFlippedSignedness(Pred, CR1,