This avoids doing aforementioned canoncalization when -ftrapping-math
is in effect and we honor NaNs.
Bootstrapped and tested on x86_64-unknown-linux-gnu.

OK?

Thanks,
Richard.

2021-11-15  Richard Biener  <rguent...@suse.de>

        PR middle-end/103193
        * match.pd: Avoid canonicalizing (le/ge @0 @0) to (eq @0 @0)
        with NaNs and -ftrapping-math.
---
 gcc/match.pd | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/gcc/match.pd b/gcc/match.pd
index a319aefa808..a7f1e56fe2f 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -4629,7 +4629,10 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
   (if (! FLOAT_TYPE_P (TREE_TYPE (@0))
        || ! HONOR_NANS (@0))
    { constant_boolean_node (true, type); }
-   (if (cmp != EQ_EXPR)
+   (if (cmp != EQ_EXPR
+       /* With -ftrapping-math conversion to EQ loses an exception.  */
+       && (! FLOAT_TYPE_P (TREE_TYPE (@0))
+           || ! flag_trapping_math))
     (eq @0 @0)))))
 (for cmp (ne gt lt)
  (simplify
-- 
2.31.1

Reply via email to