@@ -565,6 +565,40 @@ TEST_F(ConstantFPRangeTest, makeAllowedFCmpRegion) {
565565}
566566
567567TEST_F (ConstantFPRangeTest, makeSatisfyingFCmpRegion) {
568+ EXPECT_EQ (ConstantFPRange::makeSatisfyingFCmpRegion (
569+ FCmpInst::FCMP_OLE,
570+ ConstantFPRange::getNonNaN (APFloat (1.0 ), APFloat (2.0 ))),
571+ ConstantFPRange::getNonNaN (APFloat::getInf (Sem, /* Negative=*/ true ),
572+ APFloat (1.0 )));
573+ EXPECT_EQ (
574+ ConstantFPRange::makeSatisfyingFCmpRegion (
575+ FCmpInst::FCMP_OLT, ConstantFPRange::getNonNaN (
576+ APFloat::getSmallest (Sem, /* Negative=*/ false ),
577+ APFloat::getInf (Sem, /* Negative=*/ false ))),
578+ ConstantFPRange::getNonNaN (APFloat::getInf (Sem, /* Negative=*/ true ),
579+ APFloat::getZero (Sem, /* Negative=*/ false )));
580+ EXPECT_EQ (
581+ ConstantFPRange::makeSatisfyingFCmpRegion (
582+ FCmpInst::FCMP_OGT, ConstantFPRange::getNonNaN (
583+ APFloat::getZero (Sem, /* Negative=*/ true ),
584+ APFloat::getZero (Sem, /* Negative=*/ false ))),
585+ ConstantFPRange::getNonNaN (APFloat::getSmallest (Sem, /* Negative=*/ false ),
586+ APFloat::getInf (Sem, /* Negative=*/ false )));
587+ EXPECT_EQ (ConstantFPRange::makeSatisfyingFCmpRegion (
588+ FCmpInst::FCMP_OGE,
589+ ConstantFPRange::getNonNaN (APFloat (1.0 ), APFloat (2.0 ))),
590+ ConstantFPRange::getNonNaN (
591+ APFloat (2.0 ), APFloat::getInf (Sem, /* Negative=*/ false )));
592+ EXPECT_EQ (ConstantFPRange::makeSatisfyingFCmpRegion (
593+ FCmpInst::FCMP_OEQ,
594+ ConstantFPRange::getNonNaN (APFloat (1.0 ), APFloat (2.0 ))),
595+ ConstantFPRange::getEmpty (Sem));
596+ EXPECT_EQ (ConstantFPRange::makeSatisfyingFCmpRegion (
597+ FCmpInst::FCMP_OEQ,
598+ ConstantFPRange::getNonNaN (APFloat (1.0 ), APFloat (1.0 ))),
599+ ConstantFPRange::getNonNaN (APFloat (1.0 ), APFloat (1.0 )));
600+
601+ #if defined(EXPENSIVE_CHECKS)
568602 for (auto Pred : FCmpInst::predicates ()) {
569603 EnumerateConstantFPRanges (
570604 [Pred](const ConstantFPRange &CR) {
@@ -578,9 +612,12 @@ TEST_F(ConstantFPRangeTest, makeSatisfyingFCmpRegion) {
578612 EnumerateValuesInConstantFPRange (
579613 ConstantFPRange::getFull (CR.getSemantics ()),
580614 [&](const APFloat &V) {
581- if (AnyOfValueInConstantFPRange (CR, [&](const APFloat &U) {
582- return !FCmpInst::compare (V, U, Pred);
583- })) {
615+ if (AnyOfValueInConstantFPRange (
616+ CR,
617+ [&](const APFloat &U) {
618+ return !FCmpInst::compare (V, U, Pred);
619+ },
620+ /* IgnoreNaNPayload=*/ true )) {
584621 EXPECT_FALSE (Res.contains (V))
585622 << " Wrong result for makeSatisfyingFCmpRegion(" << Pred
586623 << " , " << CR << " ). The result " << Res
@@ -596,7 +633,8 @@ TEST_F(ConstantFPRangeTest, makeSatisfyingFCmpRegion) {
596633 ++NonNaNValsInOptimalSet;
597634 }
598635 }
599- });
636+ },
637+ /* IgnoreNaNPayload=*/ true );
600638
601639 // Check optimality
602640
@@ -615,10 +653,13 @@ TEST_F(ConstantFPRangeTest, makeSatisfyingFCmpRegion) {
615653 // We only care about the cases where the result is representable by
616654 // ConstantFPRange.
617655 unsigned NonNaNValsInSuperSet = 0 ;
618- EnumerateValuesInConstantFPRange (SuperSet, [&](const APFloat &V) {
619- if (!V.isNaN ())
620- ++NonNaNValsInSuperSet;
621- });
656+ EnumerateValuesInConstantFPRange (
657+ SuperSet,
658+ [&](const APFloat &V) {
659+ if (!V.isNaN ())
660+ ++NonNaNValsInSuperSet;
661+ },
662+ /* IgnoreNaNPayload=*/ true );
622663
623664 if (NonNaNValsInSuperSet == NonNaNValsInOptimalSet) {
624665 ConstantFPRange Optimal =
@@ -631,6 +672,7 @@ TEST_F(ConstantFPRangeTest, makeSatisfyingFCmpRegion) {
631672 },
632673 /* Exhaustive=*/ false );
633674 }
675+ #endif
634676}
635677
636678TEST_F (ConstantFPRangeTest, fcmp) {
@@ -682,12 +724,19 @@ TEST_F(ConstantFPRangeTest, fcmp) {
682724 for (auto &RHS : InterestingRanges) {
683725 for (auto Pred : FCmpInst::predicates ()) {
684726 if (LHS.fcmp (Pred, RHS)) {
685- EnumerateValuesInConstantFPRange (LHS, [&](const APFloat &LHSC) {
686- EnumerateValuesInConstantFPRange (RHS, [&](const APFloat &RHSC) {
687- EXPECT_TRUE (FCmpInst::compare (LHSC, RHSC, Pred))
688- << LHS << " " << Pred << " " << RHS << " doesn't hold" ;
689- });
690- });
727+ EnumerateValuesInConstantFPRange (
728+ LHS,
729+ [&](const APFloat &LHSC) {
730+ EnumerateValuesInConstantFPRange (
731+ RHS,
732+ [&](const APFloat &RHSC) {
733+ EXPECT_TRUE (FCmpInst::compare (LHSC, RHSC, Pred))
734+ << LHS << " " << Pred << " " << RHS
735+ << " doesn't hold" ;
736+ },
737+ /* IgnoreNaNPayload=*/ true );
738+ },
739+ /* IgnoreNaNPayload=*/ true );
691740 }
692741 }
693742 }
0 commit comments