From: Richard Biener Date: Mon, 15 Nov 2021 11:13:40 +0000 (+0100) Subject: middle-end/103193 - avoid canonicalizing <= and >= to == for floats X-Git-Tag: basepoints/gcc-13~2818 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d9ca2ca381e44a332703155d07b50b84aa21f80d;p=thirdparty%2Fgcc.git middle-end/103193 - avoid canonicalizing <= and >= to == for floats This avoids doing aforementioned canoncalization when -ftrapping-math is in effect and we honor NaNs. 2021-11-15 Richard Biener PR middle-end/103193 * match.pd: Avoid canonicalizing (le/ge @0 @0) to (eq @0 @0) with NaNs and -ftrapping-math. --- diff --git a/gcc/match.pd b/gcc/match.pd index 3e54e2cf5a6d..5adcd6bd02c5 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -4671,7 +4671,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