Lines Matching refs:ConstantRange

24   static ConstantRange Full;
25 static ConstantRange Empty;
26 static ConstantRange One;
27 static ConstantRange Some;
28 static ConstantRange Wrap;
48 ConstantRange CR(APInt(Bits, Lo), APInt(Bits, Hi)); in EnumerateConstantRanges()
56 EnumerateConstantRanges(Bits, [&](const ConstantRange &CR1) { in EnumerateTwoConstantRanges()
57 EnumerateConstantRanges(Bits, [&](const ConstantRange &CR2) { in EnumerateTwoConstantRanges()
64 static void ForeachNumInConstantRange(const ConstantRange &CR, Fn TestFn) { in ForeachNumInConstantRange()
72 using PreferFn = llvm::function_ref<bool(const ConstantRange &,
73 const ConstantRange &)>;
75 bool PreferSmallest(const ConstantRange &CR1, const ConstantRange &CR2) { in PreferSmallest()
79 bool PreferSmallestUnsigned(const ConstantRange &CR1, in PreferSmallestUnsigned()
80 const ConstantRange &CR2) { in PreferSmallestUnsigned()
86 bool PreferSmallestSigned(const ConstantRange &CR1, const ConstantRange &CR2) { in PreferSmallestSigned()
92 bool PreferSmallestNonFullUnsigned(const ConstantRange &CR1, in PreferSmallestNonFullUnsigned()
93 const ConstantRange &CR2) { in PreferSmallestNonFullUnsigned()
99 bool PreferSmallestNonFullSigned(const ConstantRange &CR1, in PreferSmallestNonFullSigned()
100 const ConstantRange &CR2) { in PreferSmallestNonFullSigned()
106 testing::AssertionResult rangeContains(const ConstantRange &CR, const APInt &N, in rangeContains()
107 ArrayRef<ConstantRange> Inputs) { in rangeContains()
113 for (const ConstantRange &Input : Inputs) in rangeContains()
121 static void TestRange(const ConstantRange &CR, const SmallBitVector &Elems, in TestRange()
122 PreferFn PreferenceFn, ArrayRef<ConstantRange> Inputs, in TestRange()
140 auto NotPreferred = [&](const ConstantRange &PossibleCR) { in TestRange()
146 for (const ConstantRange &Input : Inputs) in TestRange()
162 ConstantRange PossibleCR = in TestRange()
163 ConstantRange::getNonEmpty(APInt(BitWidth, Elem), in TestRange()
174 EXPECT_TRUE(NotPreferred(ConstantRange::getFull(BitWidth))); in TestRange()
177 using UnaryRangeFn = llvm::function_ref<ConstantRange(const ConstantRange &)>;
183 EnumerateConstantRanges(Bits, [&](const ConstantRange &CR) { in TestUnaryOpExhaustive()
193 using BinaryRangeFn = llvm::function_ref<ConstantRange(const ConstantRange &,
194 const ConstantRange &)>;
197 using BinaryCheckFn = llvm::function_ref<bool(const ConstantRange &,
198 const ConstantRange &)>;
200 static bool CheckAll(const ConstantRange &, const ConstantRange &) { in CheckAll() argument
204 static bool CheckSingleElementsOnly(const ConstantRange &CR1, in CheckSingleElementsOnly()
205 const ConstantRange &CR2) { in CheckSingleElementsOnly()
209 static bool CheckNonWrappedOnly(const ConstantRange &CR1, in CheckNonWrappedOnly()
210 const ConstantRange &CR2) { in CheckNonWrappedOnly()
214 static bool CheckNonSignWrappedOnly(const ConstantRange &CR1, in CheckNonSignWrappedOnly()
215 const ConstantRange &CR2) { in CheckNonSignWrappedOnly()
219 static bool CheckNonWrappedOrSignWrappedOnly(const ConstantRange &CR1, in CheckNonWrappedOrSignWrappedOnly()
220 const ConstantRange &CR2) { in CheckNonWrappedOrSignWrappedOnly()
232 Bits, [&](const ConstantRange &CR1, const ConstantRange &CR2) { in TestBinaryOpExhaustive()
245 ConstantRange ConstantRangeTest::Full(16, true);
246 ConstantRange ConstantRangeTest::Empty(16, false);
247 ConstantRange ConstantRangeTest::One(APInt(16, 0xa));
248 ConstantRange ConstantRangeTest::Some(APInt(16, 0xa), APInt(16, 0xaaa));
249 ConstantRange ConstantRangeTest::Wrap(APInt(16, 0xaaa), APInt(16, 0xa));
332 ConstantRange OneInverse = One.inverse(); in TEST_F()
364 EXPECT_EQ(ConstantRange(APInt(4, 7), APInt(4, 0)).getSignedMax(), in TEST_F()
375 EXPECT_FALSE(ConstantRange(APInt(8, 127), APInt(8, 128)).isSignWrappedSet()); in TEST_F()
376 EXPECT_TRUE(ConstantRange(APInt(8, 127), APInt(8, 129)).isSignWrappedSet()); in TEST_F()
377 EXPECT_FALSE(ConstantRange(APInt(8, 128), APInt(8, 129)).isSignWrappedSet()); in TEST_F()
378 EXPECT_TRUE(ConstantRange(APInt(8, 10), APInt(8, 9)).isSignWrappedSet()); in TEST_F()
379 EXPECT_TRUE(ConstantRange(APInt(8, 10), APInt(8, 250)).isSignWrappedSet()); in TEST_F()
380 EXPECT_FALSE(ConstantRange(APInt(8, 250), APInt(8, 10)).isSignWrappedSet()); in TEST_F()
381 EXPECT_FALSE(ConstantRange(APInt(8, 250), APInt(8, 251)).isSignWrappedSet()); in TEST_F()
398 ConstantRange CR1(APInt(8, 42), APInt::getMinValue(8)); in TEST_F()
402 ConstantRange CR2(APInt(8, 42), APInt::getSignedMinValue(8)); in TEST_F()
408 ConstantRange TFull = Full.truncate(10); in TEST_F()
409 ConstantRange TEmpty = Empty.truncate(10); in TEST_F()
410 ConstantRange TOne = One.truncate(10); in TEST_F()
411 ConstantRange TSome = Some.truncate(10); in TEST_F()
412 ConstantRange TWrap = Wrap.truncate(10); in TEST_F()
415 EXPECT_EQ(TOne, ConstantRange(One.getLower().trunc(10), in TEST_F()
421 ConstantRange TwoFive(APInt(3, 2), APInt(3, 5)); in TEST_F()
422 EXPECT_EQ(TwoFive.truncate(2), ConstantRange(APInt(2, 2), APInt(2, 1))); in TEST_F()
425 ConstantRange TwoSix(APInt(3, 2), APInt(3, 6)); in TEST_F()
429 ConstantRange FiveSeven(APInt(3, 5), APInt(3, 7)); in TEST_F()
430 EXPECT_EQ(FiveSeven.truncate(2), ConstantRange(APInt(2, 1), APInt(2, 3))); in TEST_F()
433 ConstantRange SevenOne(APInt(3, 7), APInt(3, 1)); in TEST_F()
434 EXPECT_EQ(SevenOne.truncate(2), ConstantRange(APInt(2, 3), APInt(2, 1))); in TEST_F()
438 ConstantRange ZFull = Full.zeroExtend(20); in TEST_F()
439 ConstantRange ZEmpty = Empty.zeroExtend(20); in TEST_F()
440 ConstantRange ZOne = One.zeroExtend(20); in TEST_F()
441 ConstantRange ZSome = Some.zeroExtend(20); in TEST_F()
442 ConstantRange ZWrap = Wrap.zeroExtend(20); in TEST_F()
443 EXPECT_EQ(ZFull, ConstantRange(APInt(20, 0), APInt(20, 0x10000))); in TEST_F()
445 EXPECT_EQ(ZOne, ConstantRange(One.getLower().zext(20), in TEST_F()
447 EXPECT_EQ(ZSome, ConstantRange(Some.getLower().zext(20), in TEST_F()
449 EXPECT_EQ(ZWrap, ConstantRange(APInt(20, 0), APInt(20, 0x10000))); in TEST_F()
452 ConstantRange FiveZero(APInt(3, 5), APInt(3, 0)); in TEST_F()
453 EXPECT_EQ(FiveZero.zeroExtend(7), ConstantRange(APInt(7, 5), APInt(7, 8))); in TEST_F()
457 ConstantRange SFull = Full.signExtend(20); in TEST_F()
458 ConstantRange SEmpty = Empty.signExtend(20); in TEST_F()
459 ConstantRange SOne = One.signExtend(20); in TEST_F()
460 ConstantRange SSome = Some.signExtend(20); in TEST_F()
461 ConstantRange SWrap = Wrap.signExtend(20); in TEST_F()
462 EXPECT_EQ(SFull, ConstantRange(APInt(20, (uint64_t)INT16_MIN, true), in TEST_F()
465 EXPECT_EQ(SOne, ConstantRange(One.getLower().sext(20), in TEST_F()
467 EXPECT_EQ(SSome, ConstantRange(Some.getLower().sext(20), in TEST_F()
469 EXPECT_EQ(SWrap, ConstantRange(APInt(20, (uint64_t)INT16_MIN, true), in TEST_F()
472 EXPECT_EQ(ConstantRange(APInt(8, 120), APInt(8, 140)).signExtend(16), in TEST_F()
473 ConstantRange(APInt(16, -128), APInt(16, 128))); in TEST_F()
475 EXPECT_EQ(ConstantRange(APInt(16, 0x0200), APInt(16, 0x8000)).signExtend(19), in TEST_F()
476 ConstantRange(APInt(19, 0x0200), APInt(19, 0x8000))); in TEST_F()
497 ConstantRange LHS(APInt(16, 4), APInt(16, 2)); in TEST_F()
498 ConstantRange RHS(APInt(16, 6), APInt(16, 5)); in TEST_F()
502 LHS = ConstantRange(APInt(32, -2147483646), APInt(32, 3)); in TEST_F()
503 RHS = ConstantRange(APInt(32, 2), APInt(32, 2147483646)); in TEST_F()
504 EXPECT_EQ(LHS.intersectWith(RHS), ConstantRange(APInt(32, 2))); in TEST_F()
507 LHS = ConstantRange(APInt(32, 2), APInt(32, 0)); in TEST_F()
508 RHS = ConstantRange(APInt(32, 4), APInt(32, 3)); in TEST_F()
509 EXPECT_EQ(LHS.intersectWith(RHS), ConstantRange(APInt(32, 2), APInt(32, 0))); in TEST_F()
512 LHS = ConstantRange(APInt(32, 2), APInt(32, 0)); in TEST_F()
513 RHS = ConstantRange(APInt(32, 4), APInt(32, 2)); in TEST_F()
514 EXPECT_EQ(LHS.intersectWith(RHS), ConstantRange(APInt(32, 4), APInt(32, 0))); in TEST_F()
517 LHS = ConstantRange(APInt(32, 4), APInt(32, 2)); in TEST_F()
518 RHS = ConstantRange(APInt(32, 5), APInt(32, 1)); in TEST_F()
519 EXPECT_EQ(LHS.intersectWith(RHS), ConstantRange(APInt(32, 5), APInt(32, 1))); in TEST_F()
522 LHS = ConstantRange(APInt(32, 2), APInt(32, 0)); in TEST_F()
523 RHS = ConstantRange(APInt(32, 7), APInt(32, 4)); in TEST_F()
524 EXPECT_EQ(LHS.intersectWith(RHS), ConstantRange(APInt(32, 7), APInt(32, 4))); in TEST_F()
527 LHS = ConstantRange(APInt(32, 4), APInt(32, 2)); in TEST_F()
528 RHS = ConstantRange(APInt(32, 1), APInt(32, 0)); in TEST_F()
529 EXPECT_EQ(LHS.intersectWith(RHS), ConstantRange(APInt(32, 4), APInt(32, 2))); in TEST_F()
532 LHS = ConstantRange(APInt(32, 15), APInt(32, 0)); in TEST_F()
533 RHS = ConstantRange(APInt(32, 7), APInt(32, 6)); in TEST_F()
534 EXPECT_EQ(LHS.intersectWith(RHS), ConstantRange(APInt(32, 15), APInt(32, 0))); in TEST_F()
541 [=](const ConstantRange &CR1, const ConstantRange &CR2) { in testBinarySetOperationExhaustive()
548 ConstantRange SmallestCR = OpFn(CR1, CR2, ConstantRange::Smallest); in testBinarySetOperationExhaustive()
551 ConstantRange UnsignedCR = OpFn(CR1, CR2, ConstantRange::Unsigned); in testBinarySetOperationExhaustive()
554 ConstantRange SignedCR = OpFn(CR1, CR2, ConstantRange::Signed); in testBinarySetOperationExhaustive()
557 Optional<ConstantRange> ExactCR = ExactOpFn(CR1, CR2); in testBinarySetOperationExhaustive()
568 [](const ConstantRange &CR1, const ConstantRange &CR2, in TEST_F()
569 ConstantRange::PreferredRangeType Type) { in TEST_F()
572 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
575 [](const ConstantRange &CR1, const ConstantRange &CR2, const APInt &N) { in TEST_F()
582 [](const ConstantRange &CR1, const ConstantRange &CR2, in TEST_F()
583 ConstantRange::PreferredRangeType Type) { in TEST_F()
586 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
589 [](const ConstantRange &CR1, const ConstantRange &CR2, const APInt &N) { in TEST_F()
596 ConstantRange(APInt(16, 0xaaa), APInt(16, 0xb))); in TEST_F()
603 EXPECT_EQ(ConstantRange(APInt(16, 14), APInt(16, 1)).unionWith( in TEST_F()
604 ConstantRange(APInt(16, 0), APInt(16, 8))), in TEST_F()
605 ConstantRange(APInt(16, 14), APInt(16, 8))); in TEST_F()
606 EXPECT_EQ(ConstantRange(APInt(16, 6), APInt(16, 4)).unionWith( in TEST_F()
607 ConstantRange(APInt(16, 4), APInt(16, 0))), in TEST_F()
608 ConstantRange::getFull(16)); in TEST_F()
609 EXPECT_EQ(ConstantRange(APInt(16, 1), APInt(16, 0)).unionWith( in TEST_F()
610 ConstantRange(APInt(16, 2), APInt(16, 1))), in TEST_F()
611 ConstantRange::getFull(16)); in TEST_F()
620 ConstantRange A(APInt(16, 3), APInt(16, 7)); in TEST_F()
621 ConstantRange B(APInt(16, 5), APInt(16, 9)); in TEST_F()
622 ConstantRange C(APInt(16, 3), APInt(16, 5)); in TEST_F()
623 ConstantRange D(APInt(16, 7), APInt(16, 9)); in TEST_F()
624 ConstantRange E(APInt(16, 5), APInt(16, 4)); in TEST_F()
625 ConstantRange F(APInt(16, 7), APInt(16, 3)); in TEST_F()
633 EnumerateConstantRanges(Bits, [&](const ConstantRange &CR) { in TEST_F()
645 EnumerateConstantRanges(Bits, [&](const ConstantRange &CR) { in TEST_F()
660 EnumerateConstantRanges(Bits, [&](const ConstantRange &CR) { in TEST_F()
672 EnumerateConstantRanges(Bits, [&](const ConstantRange &CR) { in TEST_F()
688 ConstantRange(APInt(16, 0x6), APInt(16, 0xaa6))); in TEST_F()
690 ConstantRange(APInt(16, 0xaa6), APInt(16, 0x6))); in TEST_F()
692 ConstantRange(APInt(16, 0x6))); in TEST_F()
708 ConstantRange(APInt(16, 0xe), APInt(16, 0xaae))); in TEST_F()
710 ConstantRange(APInt(16, 0xaae), APInt(16, 0xe))); in TEST_F()
712 ConstantRange(APInt(16, 0xe))); in TEST_F()
715 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
730 EXPECT_EQ(Full.addWithNoWrap(ConstantRange(APInt(16, 1), APInt(16, 2)), in TEST_F()
732 ConstantRange(APInt(16, INT16_MIN + 1), APInt(16, INT16_MIN))); in TEST_F()
733 EXPECT_EQ(ConstantRange(APInt(16, 1), APInt(16, 2)) in TEST_F()
735 ConstantRange(APInt(16, INT16_MIN + 1), APInt(16, INT16_MIN))); in TEST_F()
736 EXPECT_EQ(Full.addWithNoWrap(ConstantRange(APInt(16, -1), APInt(16, 0)), in TEST_F()
738 ConstantRange(APInt(16, INT16_MIN), APInt(16, INT16_MAX))); in TEST_F()
739 EXPECT_EQ(ConstantRange(APInt(8, 100), APInt(8, 120)) in TEST_F()
740 .addWithNoWrap(ConstantRange(APInt(8, 120), APInt(8, 123)), in TEST_F()
742 ConstantRange(8, false)); in TEST_F()
743 EXPECT_EQ(ConstantRange(APInt(8, -120), APInt(8, -100)) in TEST_F()
744 .addWithNoWrap(ConstantRange(APInt(8, -110), APInt(8, -100)), in TEST_F()
746 ConstantRange(8, false)); in TEST_F()
747 EXPECT_EQ(ConstantRange(APInt(8, 0), APInt(8, 101)) in TEST_F()
748 .addWithNoWrap(ConstantRange(APInt(8, -128), APInt(8, 28)), in TEST_F()
750 ConstantRange(8, true)); in TEST_F()
751 EXPECT_EQ(ConstantRange(APInt(8, 0), APInt(8, 101)) in TEST_F()
752 .addWithNoWrap(ConstantRange(APInt(8, -120), APInt(8, 29)), in TEST_F()
754 ConstantRange(APInt(8, -120), APInt(8, -128))); in TEST_F()
755 EXPECT_EQ(ConstantRange(APInt(8, -50), APInt(8, 50)) in TEST_F()
756 .addWithNoWrap(ConstantRange(APInt(8, 10), APInt(8, 20)), in TEST_F()
758 ConstantRange(APInt(8, -40), APInt(8, 69))); in TEST_F()
759 EXPECT_EQ(ConstantRange(APInt(8, 10), APInt(8, 20)) in TEST_F()
760 .addWithNoWrap(ConstantRange(APInt(8, -50), APInt(8, 50)), in TEST_F()
762 ConstantRange(APInt(8, -40), APInt(8, 69))); in TEST_F()
763 EXPECT_EQ(ConstantRange(APInt(8, 120), APInt(8, -10)) in TEST_F()
764 .addWithNoWrap(ConstantRange(APInt(8, 5), APInt(8, 20)), in TEST_F()
766 ConstantRange(APInt(8, 125), APInt(8, 9))); in TEST_F()
767 EXPECT_EQ(ConstantRange(APInt(8, 5), APInt(8, 20)) in TEST_F()
768 .addWithNoWrap(ConstantRange(APInt(8, 120), APInt(8, -10)), in TEST_F()
770 ConstantRange(APInt(8, 125), APInt(8, 9))); in TEST_F()
773 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
791 EXPECT_EQ(Full.addWithNoWrap(ConstantRange(APInt(16, 1), APInt(16, 2)), in TEST_F()
793 ConstantRange(APInt(16, 1), APInt(16, 0))); in TEST_F()
794 EXPECT_EQ(ConstantRange(APInt(16, 1), APInt(16, 2)) in TEST_F()
796 ConstantRange(APInt(16, 1), APInt(16, 0))); in TEST_F()
797 EXPECT_EQ(ConstantRange(APInt(8, 200), APInt(8, 220)) in TEST_F()
798 .addWithNoWrap(ConstantRange(APInt(8, 100), APInt(8, 123)), in TEST_F()
800 ConstantRange(8, false)); in TEST_F()
801 EXPECT_EQ(ConstantRange(APInt(8, 0), APInt(8, 101)) in TEST_F()
802 .addWithNoWrap(ConstantRange(APInt(8, 0), APInt(8, 156)), in TEST_F()
804 ConstantRange(8, true)); in TEST_F()
805 EXPECT_EQ(ConstantRange(APInt(8, 0), APInt(8, 101)) in TEST_F()
806 .addWithNoWrap(ConstantRange(APInt(8, 10), APInt(8, 29)), in TEST_F()
808 ConstantRange(APInt(8, 10), APInt(8, 129))); in TEST_F()
809 EXPECT_EQ(ConstantRange(APInt(8, 20), APInt(8, 10)) in TEST_F()
810 .addWithNoWrap(ConstantRange(APInt(8, 50), APInt(8, 200)), in TEST_F()
812 ConstantRange(APInt(8, 50), APInt(8, 0))); in TEST_F()
813 EXPECT_EQ(ConstantRange(APInt(8, 10), APInt(8, 20)) in TEST_F()
814 .addWithNoWrap(ConstantRange(APInt(8, 50), APInt(8, 200)), in TEST_F()
816 ConstantRange(APInt(8, 60), APInt(8, -37))); in TEST_F()
817 EXPECT_EQ(ConstantRange(APInt(8, 20), APInt(8, -30)) in TEST_F()
818 .addWithNoWrap(ConstantRange(APInt(8, 5), APInt(8, 20)), in TEST_F()
820 ConstantRange(APInt(8, 25), APInt(8, -11))); in TEST_F()
821 EXPECT_EQ(ConstantRange(APInt(8, 5), APInt(8, 20)) in TEST_F()
822 .addWithNoWrap(ConstantRange(APInt(8, 20), APInt(8, -30)), in TEST_F()
824 ConstantRange(APInt(8, 25), APInt(8, -11))); in TEST_F()
827 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
840 EXPECT_EQ(ConstantRange(APInt(8, 50), APInt(8, 100)) in TEST_F()
841 .addWithNoWrap(ConstantRange(APInt(8, 20), APInt(8, 70)), in TEST_F()
843 ConstantRange(APInt(8, 70), APInt(8, -128))); in TEST_F()
844 EXPECT_EQ(ConstantRange(APInt(8, 50), APInt(8, 100)) in TEST_F()
845 .addWithNoWrap(ConstantRange(APInt(8, 20), APInt(8, 70)), in TEST_F()
847 ConstantRange(APInt(8, 70), APInt(8, 169))); in TEST_F()
848 EXPECT_EQ(ConstantRange(APInt(8, 50), APInt(8, 100)) in TEST_F()
849 .addWithNoWrap(ConstantRange(APInt(8, 20), APInt(8, 70)), in TEST_F()
851 ConstantRange(APInt(8, 70), APInt(8, -128))); in TEST_F()
853 EXPECT_EQ(ConstantRange(APInt(8, -100), APInt(8, -50)) in TEST_F()
854 .addWithNoWrap(ConstantRange(APInt(8, 20), APInt(8, 30)), in TEST_F()
856 ConstantRange(APInt(8, -80), APInt(8, -21))); in TEST_F()
857 EXPECT_EQ(ConstantRange(APInt(8, -100), APInt(8, -50)) in TEST_F()
858 .addWithNoWrap(ConstantRange(APInt(8, 20), APInt(8, 30)), in TEST_F()
860 ConstantRange(APInt(8, 176), APInt(8, 235))); in TEST_F()
861 EXPECT_EQ(ConstantRange(APInt(8, -100), APInt(8, -50)) in TEST_F()
862 .addWithNoWrap(ConstantRange(APInt(8, 20), APInt(8, 30)), in TEST_F()
864 ConstantRange(APInt(8, 176), APInt(8, 235))); in TEST_F()
867 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
896 ConstantRange(APInt(16, 0x6), APInt(16, 0xaa6))); in TEST_F()
898 ConstantRange(APInt(16, 0xf561), APInt(16, 0xaa0))); in TEST_F()
900 ConstantRange(APInt(16, 0xaa6), APInt(16, 0x6))); in TEST_F()
902 ConstantRange(APInt(16, 0x6))); in TEST_F()
905 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
916 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
929 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
942 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
968 EXPECT_EQ(One.multiply(One), ConstantRange(APInt(16, 0xa*0xa), in TEST_F()
970 EXPECT_EQ(One.multiply(Some), ConstantRange(APInt(16, 0xa*0xa), in TEST_F()
977 ConstantRange Zero(APInt(16, 0)); in TEST_F()
986 EXPECT_EQ(ConstantRange(APInt(4, 1), APInt(4, 6)).multiply( in TEST_F()
987 ConstantRange(APInt(4, 6), APInt(4, 2))), in TEST_F()
988 ConstantRange(4, /*isFullSet=*/true)); in TEST_F()
990 EXPECT_EQ(ConstantRange(APInt(8, 254), APInt(8, 0)).multiply( in TEST_F()
991 ConstantRange(APInt(8, 252), APInt(8, 4))), in TEST_F()
992 ConstantRange(APInt(8, 250), APInt(8, 9))); in TEST_F()
993 EXPECT_EQ(ConstantRange(APInt(8, 254), APInt(8, 255)).multiply( in TEST_F()
994 ConstantRange(APInt(8, 2), APInt(8, 4))), in TEST_F()
995 ConstantRange(APInt(8, 250), APInt(8, 253))); in TEST_F()
998 EXPECT_EQ(ConstantRange(APInt(8, -2)).multiply( in TEST_F()
999 ConstantRange(APInt(8, 0), APInt(8, 2))), in TEST_F()
1000 ConstantRange(APInt(8, -2), APInt(8, 1))); in TEST_F()
1005 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
1012 [](const ConstantRange &, const ConstantRange &) { in TEST_F() argument
1020 EXPECT_EQ(Full.umax(Some), ConstantRange(APInt(16, 0xa), APInt(16, 0))); in TEST_F()
1022 EXPECT_EQ(Full.umax(Some), ConstantRange(APInt(16, 0xa), APInt(16, 0))); in TEST_F()
1028 EXPECT_EQ(Some.umax(Wrap), ConstantRange(APInt(16, 0xa), APInt(16, 0))); in TEST_F()
1031 EXPECT_EQ(Wrap.umax(One), ConstantRange(APInt(16, 0xa), APInt(16, 0))); in TEST_F()
1035 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
1047 EXPECT_EQ(Full.smax(Some), ConstantRange(APInt(16, 0xa), in TEST_F()
1050 EXPECT_EQ(Full.smax(One), ConstantRange(APInt(16, 0xa), in TEST_F()
1057 EXPECT_EQ(Some.smax(Wrap), ConstantRange(APInt(16, 0xa), in TEST_F()
1060 EXPECT_EQ(Wrap.smax(One), ConstantRange(APInt(16, 0xa), in TEST_F()
1065 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
1077 EXPECT_EQ(Full.umin(Some), ConstantRange(APInt(16, 0), APInt(16, 0xaaa))); in TEST_F()
1084 EXPECT_EQ(Some.umin(Wrap), ConstantRange(APInt(16, 0), APInt(16, 0xaaa))); in TEST_F()
1087 EXPECT_EQ(Wrap.umin(One), ConstantRange(APInt(16, 0), APInt(16, 0xb))); in TEST_F()
1091 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
1103 EXPECT_EQ(Full.smin(Some), ConstantRange(APInt(16, (uint64_t)INT16_MIN), in TEST_F()
1111 EXPECT_EQ(Some.smin(Wrap), ConstantRange(APInt(16, (uint64_t)INT16_MIN), in TEST_F()
1115 EXPECT_EQ(Wrap.smin(One), ConstantRange(APInt(16, (uint64_t)INT16_MIN), in TEST_F()
1120 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
1132 EXPECT_EQ(Full.udiv(One), ConstantRange(APInt(16, 0), in TEST_F()
1134 EXPECT_EQ(Full.udiv(Some), ConstantRange(APInt(16, 0), in TEST_F()
1141 EXPECT_EQ(One.udiv(One), ConstantRange(APInt(16, 1))); in TEST_F()
1142 EXPECT_EQ(One.udiv(Some), ConstantRange(APInt(16, 0), APInt(16, 2))); in TEST_F()
1143 EXPECT_EQ(One.udiv(Wrap), ConstantRange(APInt(16, 0), APInt(16, 0xb))); in TEST_F()
1144 EXPECT_EQ(Some.udiv(Some), ConstantRange(APInt(16, 0), APInt(16, 0x111))); in TEST_F()
1145 EXPECT_EQ(Some.udiv(Wrap), ConstantRange(APInt(16, 0), APInt(16, 0xaaa))); in TEST_F()
1149 ConstantRange Zero(APInt(16, 0)); in TEST_F()
1153 EXPECT_EQ(ConstantRange(APInt(16, 0), APInt(16, 99)).udiv(Full), in TEST_F()
1154 ConstantRange(APInt(16, 0), APInt(16, 99))); in TEST_F()
1155 EXPECT_EQ(ConstantRange(APInt(16, 10), APInt(16, 99)).udiv(Full), in TEST_F()
1156 ConstantRange(APInt(16, 0), APInt(16, 99))); in TEST_F()
1160 ConstantRange OneBit = ConstantRange::getFull(1); in TEST_F()
1161 EXPECT_EQ(OneBit.sdiv(OneBit), ConstantRange(APInt(1, 0))); in TEST_F()
1164 EnumerateTwoConstantRanges(Bits, [&](const ConstantRange &CR1, in TEST_F()
1165 const ConstantRange &CR2) { in TEST_F()
1185 ConstantRange CR = CR1.sdiv(CR2); in TEST_F()
1194 ConstantRange Envelope = ConstantRange::getNonEmpty(SMin, SMax + 1); in TEST_F()
1214 ConstantRange Wrapped = ConstantRange::getNonEmpty(WMin, WMax + 1); in TEST_F()
1223 EXPECT_EQ(Full.urem(ConstantRange(APInt(16, 0))), Empty); in TEST_F()
1225 EXPECT_EQ(Full.urem(Full), ConstantRange(APInt(16, 0), APInt(16, 0xffff))); in TEST_F()
1227 EXPECT_EQ(Full.urem(ConstantRange(APInt(16, 0), APInt(16, 123))), in TEST_F()
1228 ConstantRange(APInt(16, 0), APInt(16, 122))); in TEST_F()
1230 EXPECT_EQ(ConstantRange(APInt(16, 0), APInt(16, 123)).urem(Full), in TEST_F()
1231 ConstantRange(APInt(16, 0), APInt(16, 123))); in TEST_F()
1233 EXPECT_EQ(ConstantRange(APInt(16, 10), APInt(16, 20)) in TEST_F()
1234 .urem(ConstantRange(APInt(16, 20), APInt(16, 30))), in TEST_F()
1235 ConstantRange(APInt(16, 10), APInt(16, 20))); in TEST_F()
1237 EXPECT_EQ(ConstantRange(APInt(16, 10), APInt(16, 20)) in TEST_F()
1238 .urem(ConstantRange(APInt(16, 19), APInt(16, 30))), in TEST_F()
1239 ConstantRange(APInt(16, 0), APInt(16, 20))); in TEST_F()
1241 EXPECT_EQ(ConstantRange(APInt(16, 12), APInt(16, 15)) in TEST_F()
1242 .urem(ConstantRange(APInt(16, 10))), in TEST_F()
1243 ConstantRange(APInt(16, 0), APInt(16, 10))); in TEST_F()
1246 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
1262 EXPECT_EQ(Full.srem(ConstantRange(APInt(16, 0))), Empty); in TEST_F()
1264 EXPECT_EQ(Full.srem(Full), ConstantRange(APInt::getSignedMinValue(16) + 1, in TEST_F()
1267 ConstantRange PosMod(APInt(16, 10), APInt(16, 21)); // [10, 20] in TEST_F()
1268 ConstantRange NegMod(APInt(16, -20), APInt(16, -9)); // [-20, -10] in TEST_F()
1269 ConstantRange IntMinMod(APInt::getSignedMinValue(16)); in TEST_F()
1271 ConstantRange Expected(16, true); in TEST_F()
1274 ConstantRange PosLargeLHS(APInt(16, 0), APInt(16, 41)); in TEST_F()
1275 Expected = ConstantRange(APInt(16, 0), APInt(16, 20)); in TEST_F()
1278 ConstantRange NegLargeLHS(APInt(16, -40), APInt(16, 1)); in TEST_F()
1279 Expected = ConstantRange(APInt(16, -19), APInt(16, 1)); in TEST_F()
1282 ConstantRange PosNegLargeLHS(APInt(16, -32), APInt(16, 38)); in TEST_F()
1283 Expected = ConstantRange(APInt(16, -19), APInt(16, 20)); in TEST_F()
1288 ConstantRange PosLHS(APInt(16, 0), APInt(16, 16)); in TEST_F()
1292 ConstantRange NegLHS(APInt(16, -15), APInt(16, 1)); in TEST_F()
1296 ConstantRange PosNegLHS(APInt(16, -12), APInt(16, 18)); in TEST_F()
1302 ConstantRange PosSmallLHS(APInt(16, 3), APInt(16, 8)); in TEST_F()
1306 ConstantRange NegSmallLHS(APInt(16, -7), APInt(16, -2)); in TEST_F()
1310 ConstantRange PosNegSmallLHS(APInt(16, -3), APInt(16, 8)); in TEST_F()
1317 EXPECT_EQ(ConstantRange(APInt(16, 12), APInt(16, 15)) in TEST_F()
1318 .srem(ConstantRange(APInt(16, 10))), in TEST_F()
1319 ConstantRange(APInt(16, 0), APInt(16, 10))); in TEST_F()
1322 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
1335 ConstantRange Some2(APInt(16, 0xfff), APInt(16, 0x8000)); in TEST_F()
1336 ConstantRange WrapNullMax(APInt(16, 0x1), APInt(16, 0x0)); in TEST_F()
1339 EXPECT_EQ(Full.shl(One), ConstantRange(APInt(16, 0), in TEST_F()
1347 EXPECT_EQ(One.shl(One), ConstantRange(APInt(16, 0xa << 0xa), in TEST_F()
1355 Some2.shl(ConstantRange(APInt(16, 0x1))), in TEST_F()
1356 ConstantRange(APInt(16, 0xfff << 0x1), APInt(16, 0x7fff << 0x1) + 1)); in TEST_F()
1360 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
1369 [](const ConstantRange &, const ConstantRange &CR2) { in TEST_F() argument
1378 EXPECT_EQ(Full.lshr(One), ConstantRange(APInt(16, 0), in TEST_F()
1380 EXPECT_EQ(Full.lshr(Some), ConstantRange(APInt(16, 0), in TEST_F()
1387 EXPECT_EQ(One.lshr(One), ConstantRange(APInt(16, 0))); in TEST_F()
1388 EXPECT_EQ(One.lshr(Some), ConstantRange(APInt(16, 0))); in TEST_F()
1389 EXPECT_EQ(One.lshr(Wrap), ConstantRange(APInt(16, 0), APInt(16, 0xb))); in TEST_F()
1390 EXPECT_EQ(Some.lshr(Some), ConstantRange(APInt(16, 0), in TEST_F()
1392 EXPECT_EQ(Some.lshr(Wrap), ConstantRange(APInt(16, 0), APInt(16, 0xaaa))); in TEST_F()
1399 EXPECT_EQ(Full.ashr(One), ConstantRange(APInt(16, 0xffe0), in TEST_F()
1401 ConstantRange Small(APInt(16, 0xa), APInt(16, 0xb)); in TEST_F()
1402 EXPECT_EQ(Full.ashr(Small), ConstantRange(APInt(16, 0xffe0), in TEST_F()
1404 EXPECT_EQ(Full.ashr(Some), ConstantRange(APInt(16, 0xffe0), in TEST_F()
1411 EXPECT_EQ(One.ashr(One), ConstantRange(APInt(16, 0))); in TEST_F()
1412 EXPECT_EQ(One.ashr(Some), ConstantRange(APInt(16, 0))); in TEST_F()
1413 EXPECT_EQ(One.ashr(Wrap), ConstantRange(APInt(16, 0), APInt(16, 0xb))); in TEST_F()
1414 EXPECT_EQ(Some.ashr(Some), ConstantRange(APInt(16, 0), in TEST_F()
1416 EXPECT_EQ(Some.ashr(Wrap), ConstantRange(APInt(16, 0), APInt(16, 0xaaa))); in TEST_F()
1418 ConstantRange Neg(APInt(16, 0xf3f0, true), APInt(16, 0xf7f8, true)); in TEST_F()
1419 EXPECT_EQ(Neg.ashr(Small), ConstantRange(APInt(16, 0xfffc, true), in TEST_F()
1423 TEST(ConstantRange, MakeAllowedICmpRegion) { in TEST() argument
1425 ConstantRange SMax = ConstantRange(APInt::getSignedMaxValue(32)); in TEST()
1426 EXPECT_TRUE(ConstantRange::makeAllowedICmpRegion(ICmpInst::ICMP_SGT, SMax) in TEST()
1430 TEST(ConstantRange, MakeSatisfyingICmpRegion) { in TEST() argument
1431 ConstantRange LowHalf(APInt(8, 0), APInt(8, 128)); in TEST()
1432 ConstantRange HighHalf(APInt(8, 128), APInt(8, 0)); in TEST()
1433 ConstantRange EmptySet(8, /* isFullSet = */ false); in TEST()
1435 EXPECT_EQ(ConstantRange::makeSatisfyingICmpRegion(ICmpInst::ICMP_NE, LowHalf), in TEST()
1439 ConstantRange::makeSatisfyingICmpRegion(ICmpInst::ICMP_NE, HighHalf), in TEST()
1442 EXPECT_TRUE(ConstantRange::makeSatisfyingICmpRegion(ICmpInst::ICMP_EQ, in TEST()
1445 ConstantRange UnsignedSample(APInt(8, 5), APInt(8, 200)); in TEST()
1447 EXPECT_EQ(ConstantRange::makeSatisfyingICmpRegion(ICmpInst::ICMP_ULT, in TEST()
1449 ConstantRange(APInt(8, 0), APInt(8, 5))); in TEST()
1451 EXPECT_EQ(ConstantRange::makeSatisfyingICmpRegion(ICmpInst::ICMP_ULE, in TEST()
1453 ConstantRange(APInt(8, 0), APInt(8, 6))); in TEST()
1455 EXPECT_EQ(ConstantRange::makeSatisfyingICmpRegion(ICmpInst::ICMP_UGT, in TEST()
1457 ConstantRange(APInt(8, 200), APInt(8, 0))); in TEST()
1459 EXPECT_EQ(ConstantRange::makeSatisfyingICmpRegion(ICmpInst::ICMP_UGE, in TEST()
1461 ConstantRange(APInt(8, 199), APInt(8, 0))); in TEST()
1463 ConstantRange SignedSample(APInt(8, -5), APInt(8, 5)); in TEST()
1466 ConstantRange::makeSatisfyingICmpRegion(ICmpInst::ICMP_SLT, SignedSample), in TEST()
1467 ConstantRange(APInt(8, -128), APInt(8, -5))); in TEST()
1470 ConstantRange::makeSatisfyingICmpRegion(ICmpInst::ICMP_SLE, SignedSample), in TEST()
1471 ConstantRange(APInt(8, -128), APInt(8, -4))); in TEST()
1474 ConstantRange::makeSatisfyingICmpRegion(ICmpInst::ICMP_SGT, SignedSample), in TEST()
1475 ConstantRange(APInt(8, 5), APInt(8, -128))); in TEST()
1478 ConstantRange::makeSatisfyingICmpRegion(ICmpInst::ICMP_SGE, SignedSample), in TEST()
1479 ConstantRange(APInt(8, 4), APInt(8, -128))); in TEST()
1485 Bits, [&](const ConstantRange &CR1, const ConstantRange &CR2) { in ICmpTestImpl()
1496 TEST(ConstantRange, ICmp) { in TEST() argument
1501 TEST(ConstantRange, MakeGuaranteedNoWrapRegion) { in TEST() argument
1509 auto NUWRegion = ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1514 auto NSWRegion = ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1537 auto NUWRegion = ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1542 auto NSWRegion = ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1562 auto NSWForAllValues = ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1563 Instruction::Add, ConstantRange(32, /* isFullSet = */ true), in TEST()
1568 NSWForAllValues = ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1569 Instruction::Sub, ConstantRange(32, /* isFullSet = */ true), in TEST()
1574 auto NUWForAllValues = ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1575 Instruction::Add, ConstantRange(32, /* isFullSet = */ true), in TEST()
1580 NUWForAllValues = ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1581 Instruction::Sub, ConstantRange(32, /* isFullSet = */ true), in TEST()
1586 EXPECT_TRUE(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1588 EXPECT_TRUE(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1590 EXPECT_TRUE(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1592 EXPECT_TRUE(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1595 ConstantRange OneToFive(APInt(32, 1), APInt(32, 6)); in TEST()
1596 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1598 ConstantRange(APInt::getSignedMinValue(32), in TEST()
1600 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1602 ConstantRange(APInt::getMinValue(32), APInt::getMinValue(32) - 5)); in TEST()
1603 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1605 ConstantRange(APInt::getSignedMinValue(32) + 5, in TEST()
1607 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1609 ConstantRange(APInt::getMinValue(32) + 5, APInt::getMinValue(32))); in TEST()
1611 ConstantRange MinusFiveToMinusTwo(APInt(32, -5), APInt(32, -1)); in TEST()
1612 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1614 ConstantRange(APInt::getSignedMinValue(32) + 5, in TEST()
1616 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1618 ConstantRange(APInt(32, 0), APInt(32, 2))); in TEST()
1619 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1621 ConstantRange(APInt::getSignedMinValue(32), in TEST()
1623 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1625 ConstantRange(APInt::getMaxValue(32) - 1, in TEST()
1628 ConstantRange MinusOneToOne(APInt(32, -1), APInt(32, 2)); in TEST()
1629 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1631 ConstantRange(APInt::getSignedMinValue(32) + 1, in TEST()
1633 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1635 ConstantRange(APInt(32, 0), APInt(32, 1))); in TEST()
1636 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1638 ConstantRange(APInt::getSignedMinValue(32) + 1, in TEST()
1640 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1642 ConstantRange(APInt::getMaxValue(32), in TEST()
1645 ConstantRange One(APInt(32, 1), APInt(32, 2)); in TEST()
1646 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1648 ConstantRange(APInt::getSignedMinValue(32), in TEST()
1650 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1652 ConstantRange(APInt::getMinValue(32), APInt::getMaxValue(32))); in TEST()
1653 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1655 ConstantRange(APInt::getSignedMinValue(32) + 1, in TEST()
1657 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1659 ConstantRange(APInt::getMinValue(32) + 1, APInt::getMinValue(32))); in TEST()
1661 ConstantRange OneLessThanBitWidth(APInt(32, 0), APInt(32, 31) + 1); in TEST()
1662 ConstantRange UpToBitWidth(APInt(32, 0), APInt(32, 32) + 1); in TEST()
1663 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1665 ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1667 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1669 ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1671 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1673 ConstantRange(APInt(32, 0), APInt(32, 1) + 1)); in TEST()
1674 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1676 ConstantRange(APInt(32, -1), APInt(32, 0) + 1)); in TEST()
1679 ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1680 Instruction::Shl, ConstantRange::getFull(32), OBO::NoUnsignedWrap), in TEST()
1681 ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1684 ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1685 Instruction::Shl, ConstantRange::getFull(32), OBO::NoSignedWrap), in TEST()
1686 ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1689 ConstantRange IllegalShAmt(APInt(32, 32), APInt(32, 0) + 1); in TEST()
1690 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1692 ConstantRange::getFull(32)); in TEST()
1693 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1695 ConstantRange::getFull(32)); in TEST()
1698 ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1699 Instruction::Shl, ConstantRange(APInt(32, -32), APInt(32, 16) + 1), in TEST()
1701 ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1702 Instruction::Shl, ConstantRange(APInt(32, 0), APInt(32, 16) + 1), in TEST()
1705 ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1706 Instruction::Shl, ConstantRange(APInt(32, -32), APInt(32, 16) + 1), in TEST()
1708 ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1709 Instruction::Shl, ConstantRange(APInt(32, 0), APInt(32, 16) + 1), in TEST()
1712 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1714 ConstantRange(APInt(32, -32), APInt(32, 16) + 1), in TEST()
1716 ConstantRange(APInt(32, 0), APInt(32, 65535) + 1)); in TEST()
1717 EXPECT_EQ(ConstantRange::makeGuaranteedNoWrapRegion( in TEST()
1719 ConstantRange(APInt(32, -32), APInt(32, 16) + 1), in TEST()
1721 ConstantRange(APInt(32, -32768), APInt(32, 32767) + 1)); in TEST()
1728 EnumerateConstantRanges(Bits, [&](const ConstantRange &CR) { in TestNoWrapRegionExhaustive()
1734 ConstantRange NoWrap = in TestNoWrapRegionExhaustive()
1735 ConstantRange::makeGuaranteedNoWrapRegion(BinOp, CR, NoWrapKind); in TestNoWrapRegionExhaustive()
1757 TEST(ConstantRange, NoWrapRegionExhaustive) { in TEST() argument
1816 TEST(ConstantRange, GetEquivalentICmp) { in TEST() argument
1820 EXPECT_TRUE(ConstantRange(APInt::getMinValue(32), APInt(32, 100)) in TEST()
1825 EXPECT_TRUE(ConstantRange(APInt::getSignedMinValue(32), APInt(32, 100)) in TEST()
1830 EXPECT_TRUE(ConstantRange(APInt(32, 100), APInt::getMinValue(32)) in TEST()
1835 EXPECT_TRUE(ConstantRange(APInt(32, 100), APInt::getSignedMinValue(32)) in TEST()
1841 ConstantRange(32, /*isFullSet=*/true).getEquivalentICmp(Pred, RHS)); in TEST()
1846 ConstantRange(32, /*isFullSet=*/false).getEquivalentICmp(Pred, RHS)); in TEST()
1850 EXPECT_FALSE(ConstantRange(APInt(32, 100), APInt(32, 200)) in TEST()
1853 EXPECT_FALSE(ConstantRange(APInt::getSignedMinValue(32) - APInt(32, 100), in TEST()
1857 EXPECT_FALSE(ConstantRange(APInt::getMinValue(32) - APInt(32, 100), in TEST()
1861 EXPECT_TRUE(ConstantRange(APInt(32, 100)).getEquivalentICmp(Pred, RHS)); in TEST()
1866 ConstantRange(APInt(32, 100)).inverse().getEquivalentICmp(Pred, RHS)); in TEST()
1871 ConstantRange(APInt(512, 100)).inverse().getEquivalentICmp(Pred, RHS)); in TEST()
1879 EXPECT_TRUE(ConstantRange(APInt(32, 0)).getEquivalentICmp(Pred, RHS)); in TEST()
1884 ConstantRange(APInt(32, 0)).inverse().getEquivalentICmp(Pred, RHS)); in TEST()
1888 EXPECT_TRUE(ConstantRange(APInt(32, -1)).getEquivalentICmp(Pred, RHS)); in TEST()
1893 ConstantRange(APInt(32, -1)).inverse().getEquivalentICmp(Pred, RHS)); in TEST()
1898 EnumerateConstantRanges(Bits, [Bits](const ConstantRange &CR) { in TEST()
1917 EXPECT_EQ(ConstantRange::OverflowResult::MayOverflow, (op))
1919 EXPECT_EQ(ConstantRange::OverflowResult::AlwaysOverflowsLow, (op))
1921 EXPECT_EQ(ConstantRange::OverflowResult::AlwaysOverflowsHigh, (op))
1923 EXPECT_EQ(ConstantRange::OverflowResult::NeverOverflows, (op))
1931 ConstantRange Zero(APInt::getZero(16)); in TEST_F()
1943 ConstantRange A(APInt(16, 0xfd00), APInt(16, 0xfe00)); in TEST_F()
1944 ConstantRange B1(APInt(16, 0x0100), APInt(16, 0x0201)); in TEST_F()
1945 ConstantRange B2(APInt(16, 0x0100), APInt(16, 0x0202)); in TEST_F()
1951 ConstantRange C1(APInt(16, 0x0299), APInt(16, 0x0400)); in TEST_F()
1952 ConstantRange C2(APInt(16, 0x0300), APInt(16, 0x0400)); in TEST_F()
1965 ConstantRange Zero(APInt::getZero(16)); in TEST_F()
1966 ConstantRange Max(APInt::getAllOnes(16)); in TEST_F()
1978 ConstantRange A(APInt(16, 0x0000), APInt(16, 0x0100)); in TEST_F()
1979 ConstantRange B(APInt(16, 0x0100), APInt(16, 0x0200)); in TEST_F()
1983 ConstantRange A1(APInt(16, 0x0000), APInt(16, 0x0101)); in TEST_F()
1984 ConstantRange B1(APInt(16, 0x0100), APInt(16, 0x0201)); in TEST_F()
1988 ConstantRange A2(APInt(16, 0x0000), APInt(16, 0x0102)); in TEST_F()
1989 ConstantRange B2(APInt(16, 0x0100), APInt(16, 0x0202)); in TEST_F()
2000 ConstantRange Zero(APInt::getZero(16)); in TEST_F()
2012 ConstantRange A(APInt(16, 0x7d00), APInt(16, 0x7e00)); in TEST_F()
2013 ConstantRange B1(APInt(16, 0x0100), APInt(16, 0x0201)); in TEST_F()
2014 ConstantRange B2(APInt(16, 0x0100), APInt(16, 0x0202)); in TEST_F()
2017 ConstantRange B3(APInt(16, 0x8000), APInt(16, 0x0201)); in TEST_F()
2018 ConstantRange B4(APInt(16, 0x8000), APInt(16, 0x0202)); in TEST_F()
2021 ConstantRange B5(APInt(16, 0x0299), APInt(16, 0x0400)); in TEST_F()
2022 ConstantRange B6(APInt(16, 0x0300), APInt(16, 0x0400)); in TEST_F()
2026 ConstantRange C(APInt(16, 0x8200), APInt(16, 0x8300)); in TEST_F()
2027 ConstantRange D1(APInt(16, 0xfe00), APInt(16, 0xff00)); in TEST_F()
2028 ConstantRange D2(APInt(16, 0xfd99), APInt(16, 0xff00)); in TEST_F()
2031 ConstantRange D3(APInt(16, 0xfe00), APInt(16, 0x8000)); in TEST_F()
2032 ConstantRange D4(APInt(16, 0xfd99), APInt(16, 0x8000)); in TEST_F()
2035 ConstantRange D5(APInt(16, 0xfc00), APInt(16, 0xfd02)); in TEST_F()
2036 ConstantRange D6(APInt(16, 0xfc00), APInt(16, 0xfd01)); in TEST_F()
2040 ConstantRange E(APInt(16, 0xff00), APInt(16, 0x0100)); in TEST_F()
2042 ConstantRange F(APInt(16, 0xf000), APInt(16, 0x7000)); in TEST_F()
2052 ConstantRange Zero(APInt::getZero(16)); in TEST_F()
2062 ConstantRange A(APInt(16, 0x7d00), APInt(16, 0x7e00)); in TEST_F()
2063 ConstantRange B1(APInt(16, 0xfe00), APInt(16, 0xff00)); in TEST_F()
2064 ConstantRange B2(APInt(16, 0xfd99), APInt(16, 0xff00)); in TEST_F()
2067 ConstantRange B3(APInt(16, 0xfc00), APInt(16, 0xfd02)); in TEST_F()
2068 ConstantRange B4(APInt(16, 0xfc00), APInt(16, 0xfd01)); in TEST_F()
2072 ConstantRange C(APInt(16, 0x8200), APInt(16, 0x8300)); in TEST_F()
2073 ConstantRange D1(APInt(16, 0x0100), APInt(16, 0x0201)); in TEST_F()
2074 ConstantRange D2(APInt(16, 0x0100), APInt(16, 0x0202)); in TEST_F()
2077 ConstantRange D3(APInt(16, 0x0299), APInt(16, 0x0400)); in TEST_F()
2078 ConstantRange D4(APInt(16, 0x0300), APInt(16, 0x0400)); in TEST_F()
2082 ConstantRange E(APInt(16, 0xff00), APInt(16, 0x0100)); in TEST_F()
2084 ConstantRange F(APInt(16, 0xf000), APInt(16, 0x7001)); in TEST_F()
2092 EnumerateTwoConstantRanges(Bits, [=](const ConstantRange &CR1, in TestOverflowExhaustive()
2093 const ConstantRange &CR2) { in TestOverflowExhaustive()
2114 ConstantRange::OverflowResult OR = MayOverflowFn(CR1, CR2); in TestOverflowExhaustive()
2116 case ConstantRange::OverflowResult::AlwaysOverflowsLow: in TestOverflowExhaustive()
2121 case ConstantRange::OverflowResult::AlwaysOverflowsHigh: in TestOverflowExhaustive()
2126 case ConstantRange::OverflowResult::NeverOverflows: in TestOverflowExhaustive()
2131 case ConstantRange::OverflowResult::MayOverflow: in TestOverflowExhaustive()
2153 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
2166 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
2179 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
2192 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
2205 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
2212 EXPECT_EQ(Full, ConstantRange::fromKnownBits(Unknown, /*signed*/false)); in TEST_F()
2213 EXPECT_EQ(Full, ConstantRange::fromKnownBits(Unknown, /*signed*/true)); in TEST_F()
2220 ConstantRange Unsigned(APInt(8, 66), APInt(8, 219 + 1)); in TEST_F()
2221 ConstantRange Signed(APInt(8, 194), APInt(8, 91 + 1)); in TEST_F()
2222 EXPECT_EQ(Unsigned, ConstantRange::fromKnownBits(Known, /*signed*/false)); in TEST_F()
2223 EXPECT_EQ(Signed, ConstantRange::fromKnownBits(Known, /*signed*/true)); in TEST_F()
2228 ConstantRange CR1(APInt(8, 164), APInt(8, 237 + 1)); in TEST_F()
2229 EXPECT_EQ(CR1, ConstantRange::fromKnownBits(Known, /*signed*/false)); in TEST_F()
2230 EXPECT_EQ(CR1, ConstantRange::fromKnownBits(Known, /*signed*/true)); in TEST_F()
2235 ConstantRange CR2(APInt(8, 68), APInt(8, 110 + 1)); in TEST_F()
2236 EXPECT_EQ(CR2, ConstantRange::fromKnownBits(Known, /*signed*/false)); in TEST_F()
2237 EXPECT_EQ(CR2, ConstantRange::fromKnownBits(Known, /*signed*/true)); in TEST_F()
2259 TestRange(ConstantRange::fromKnownBits(Known, false), in TEST_F()
2261 TestRange(ConstantRange::fromKnownBits(Known, true), in TEST_F()
2269 EnumerateConstantRanges(Bits, [&](const ConstantRange &CR) { in TEST_F()
2295 EnumerateConstantRanges(Bits, [](const ConstantRange &CR) { in TEST_F()
2314 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
2325 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
2336 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
2345 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
2354 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
2365 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
2376 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
2385 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
2394 [](const ConstantRange &CR) { return CR.abs(); }, in TEST_F()
2398 [](const ConstantRange &CR) { return CR.abs(/*IntMinIsPoison=*/true); }, in TEST_F()
2407 ConstantRange A(APInt(16, 66), APInt(16, 128)); in TEST_F()
2408 ConstantRange FpToI8 = A.castOp(Instruction::FPToSI, 8); in TEST_F()
2412 ConstantRange FpToI16 = A.castOp(Instruction::FPToSI, 16); in TEST_F()
2416 ConstantRange FPExtToDouble = A.castOp(Instruction::FPExt, 64); in TEST_F()
2420 ConstantRange PtrToInt = A.castOp(Instruction::PtrToInt, 64); in TEST_F()
2424 ConstantRange IntToPtr = A.castOp(Instruction::IntToPtr, 64); in TEST_F()
2431 ConstantRange R16(APInt(8, 16)); in TEST_F()
2432 ConstantRange R20(APInt(8, 20)); in TEST_F()
2436 ConstantRange R16_32(APInt(8, 16), APInt(8, 32)); in TEST_F()
2438 ConstantRange R32(APInt(8, 32)); in TEST_F()
2442 ConstantRange R4(APInt(8, 4)); in TEST_F()
2443 ConstantRange R0_5(APInt(8, 0), APInt(8, 5)); in TEST_F()
2448 ConstantRange R0_99(APInt(8, 0), APInt(8, 99)); in TEST_F()
2449 ConstantRange R0_32(APInt(8, 0), APInt(8, 32)); in TEST_F()
2454 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
2463 ConstantRange R16(APInt(8, 16)); in TEST_F()
2464 ConstantRange R20(APInt(8, 20)); in TEST_F()
2468 ConstantRange R16_32(APInt(8, 16), APInt(8, 32)); in TEST_F()
2472 ConstantRange R32(APInt(8, 32)); in TEST_F()
2473 ConstantRange R48_64(APInt(8, 48), APInt(8, 64)); in TEST_F()
2477 ConstantRange R4(APInt(8, 4)); in TEST_F()
2478 ConstantRange R0_16(APInt(8, 0), APInt(8, 16)); in TEST_F()
2479 ConstantRange R4_16(APInt(8, 4), APInt(8, 16)); in TEST_F()
2485 ConstantRange R0_64(APInt(8, 0), APInt(8, 64)); in TEST_F()
2486 ConstantRange R5_32(APInt(8, 5), APInt(8, 32)); in TEST_F()
2487 ConstantRange R5_64(APInt(8, 5), APInt(8, 64)); in TEST_F()
2492 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
2501 ConstantRange R16(APInt(8, 16)); in TEST_F()
2502 ConstantRange R20(APInt(8, 20)); in TEST_F()
2507 ConstantRange R16_35(APInt(8, 16), APInt(8, 35)); in TEST_F()
2508 ConstantRange R0_99(APInt(8, 0), APInt(8, 99)); in TEST_F()
2509 EXPECT_EQ(R16_35.binaryXor(R16_35), ConstantRange(APInt(8, 0), APInt(8, 64))); in TEST_F()
2510 EXPECT_EQ(R16_35.binaryXor(R0_99), ConstantRange(APInt(8, 0), APInt(8, 128))); in TEST_F()
2511 EXPECT_EQ(R0_99.binaryXor(R16_35), ConstantRange(APInt(8, 0), APInt(8, 128))); in TEST_F()
2514 [](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
2526 [](const ConstantRange &CR) { return CR.binaryNot(); }, in TEST_F()
2530 [](const ConstantRange &CR) { in TEST_F()
2531 return CR.binaryXor(ConstantRange(APInt::getAllOnes(CR.getBitWidth()))); in TEST_F()
2535 [](const ConstantRange &CR) { in TEST_F()
2536 return ConstantRange(APInt::getAllOnes(CR.getBitWidth())).binaryXor(CR); in TEST_F()
2545 Bits, [&](const ConstantRange &CR1, const ConstantRange &CR2) { in testConstantRangeICmpPredEquivalence()
2573 const ConstantRange &CR1, in TEST_F()
2574 const ConstantRange &CR2) { in TEST_F()
2577 ConstantRange::areInsensitiveToSignednessOfICmpPredicate(CR1, CR2)); in TEST_F()
2590 Pred, [InvertedFlippedSignednessPred](const ConstantRange &CR1, in TEST_F()
2591 const ConstantRange &CR2) { in TEST_F()
2594 ConstantRange::areInsensitiveToSignednessOfInvertedICmpPredicate( in TEST_F()
2605 Pred, [Pred](const ConstantRange &CR1, const ConstantRange &CR2) { in TEST_F()
2607 ConstantRange::getEquivalentPredWithFlippedSignedness(Pred, CR1, in TEST_F()