aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2021-11-15 12:13:40 +0100
committerRichard Biener <rguenther@suse.de>2021-11-24 11:02:13 +0100
commitd9ca2ca381e44a332703155d07b50b84aa21f80d (patch)
treeadce1c72b1d680be1b4505e749f92cd15286570f
parent5bca26742cf3357bf4e20ec97eee4c7f7de17ce0 (diff)
downloadgcc-d9ca2ca381e44a332703155d07b50b84aa21f80d.zip
gcc-d9ca2ca381e44a332703155d07b50b84aa21f80d.tar.gz
gcc-d9ca2ca381e44a332703155d07b50b84aa21f80d.tar.bz2
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 <rguenther@suse.de> PR middle-end/103193 * match.pd: Avoid canonicalizing (le/ge @0 @0) to (eq @0 @0) with NaNs and -ftrapping-math.
-rw-r--r--gcc/match.pd5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/match.pd b/gcc/match.pd
index 3e54e2cf..5adcd6b 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