https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82319

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
Testing the following to match comments.

Index: gcc/match.pd
===================================================================
--- gcc/match.pd        (revision 253134)
+++ gcc/match.pd        (working copy)
@@ -2930,7 +2930,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
          only one mantissa bit.  */
        bool signed_p = isign == SIGNED;
        bool itype_fits_ftype_p
-        = TYPE_PRECISION (itype) - signed_p <= significand_size (fmt);
+        = (TYPE_PRECISION (itype) - signed_p) <= significand_size (fmt);
      }
      /* TODO: allow non-fitting itype and SNaNs when
        -fno-trapping-math.  */
@@ -2964,20 +2964,15 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
         { constant_boolean_node (cmp == LT_EXPR || cmp == LE_EXPR || cmp ==
NE_EXPR,
                                  type); })
        /* Remove cast if CST is an integer representable by ITYPE.  */
-       (if (cst_int_p)
-        (cmp @0 { gcc_assert (!overflow_p);
-                  wide_int_to_tree (itype, icst_val); })
-       )
+       (if (cst_int_p && ! overflow_p)
+        (cmp @0 { wide_int_to_tree (itype, icst_val); }))
        /* When CST is fractional, optimize
            (FTYPE) N == CST -> 0
            (FTYPE) N != CST -> 1.  */
-       (if (cmp == EQ_EXPR || cmp == NE_EXPR)
+       (if (! cst_int_p && (cmp == EQ_EXPR || cmp == NE_EXPR))
         { constant_boolean_node (cmp == NE_EXPR, type); }) 
-       /* Otherwise replace with sensible integer constant.  */
-       (with
-        {
-          gcc_checking_assert (!overflow_p);
-        }
+       /* Otherwise replace with sensible integer constant if it fits.  */
+       (if (! overflow_p)
         (icmp @0 { wide_int_to_tree (itype, icst_val); })))))))))

 /* Fold A /[ex] B CMP C to A CMP B * C.  */

Reply via email to