On 12 April 2023 16:21:24 CEST, Jakub Jelinek via Gcc-patches <gcc-patches@gcc.gnu.org> wrote:
>--- gcc/range-op-float.cc.jj 2023-04-12 12:17:44.784962757 +0200 >+++ gcc/range-op-float.cc 2023-04-12 16:07:54.948759355 +0200 >@@ -835,10 +835,17 @@ public: > bool fold_range (irange &r, tree type, > const frange &op1, const frange &op2, > relation_trio = TRIO_VARYING) const final override; >- relation_kind op1_op2_relation (const irange &lhs, const frange &, >- const frange &) const final override >+ relation_kind op1_op2_relation (const irange &lhs, const frange &op1, >+ const frange &op2) const final override > { >- return lt_op1_op2_relation (lhs); >+ relation_kind ret = lt_op1_op2_relation (lhs); >+ if (ret == VREL_GE >+ && (op1.known_isnan () >+ || op1.maybe_isnan () >+ || op2.known_isnan () >+ || op2.maybe_isnan ())) >+ ret = VREL_VARYING; // Inverse of VREL_LT is VREL_UNGE with NAN ops. >+ return ret; > } > bool op1_range (frange &r, tree type, > const irange &lhs, const frange &op2, >@@ -952,9 +959,17 @@ public: > bool fold_range (irange &r, tree type, > const frange &op1, const frange &op2, > relation_trio rel = TRIO_VARYING) const final override; >- relation_kind op1_op2_relation (const irange &lhs, const frange &, >- const frange &) const final override >+ relation_kind op1_op2_relation (const irange &lhs, const frange &op1, >+ const frange &op2) const final override > { >+ relation_kind ret = le_op1_op2_relation (lhs); >+ if (ret == VREL_GT >+ && (op1.known_isnan () >+ || op1.maybe_isnan () >+ || op2.known_isnan () >+ || op2.maybe_isnan ())) >+ ret = VREL_VARYING; // Inverse of VREL_LE is VREL_UNGT with NAN ops. >+ return ret; > return le_op1_op2_relation (lhs); I think you forgot to delete the above return. thanks,