aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2022-09-21 11:18:48 +0200
committerAldy Hernandez <aldyh@redhat.com>2022-09-21 13:33:40 +0200
commitdc829c7613ddf562d1aecaf22eda965e87108ac8 (patch)
tree7ee6f7e4ba6a079f22570442ff09bec1b7bfdb5d
parent324fa420b66bc084dd5b20644c6ee7b35be90c00 (diff)
downloadgcc-dc829c7613ddf562d1aecaf22eda965e87108ac8.zip
gcc-dc829c7613ddf562d1aecaf22eda965e87108ac8.tar.gz
gcc-dc829c7613ddf562d1aecaf22eda965e87108ac8.tar.bz2
[PR106967] Set known NANs to undefined for flag_finite_math_only.
Explicit NANs in the IL can be treated as undefined for flag_finite_math_only. This causes all the right things to happen wrt threading, folding, etc. It also saves us special casing throughout. PR tree-optimization/106967 gcc/ChangeLog: * value-range.cc (frange::set): Set known NANs to undefined for flag_finite_math_only.
-rw-r--r--gcc/value-range.cc9
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/value-range.cc b/gcc/value-range.cc
index 505eb92..7e8028e 100644
--- a/gcc/value-range.cc
+++ b/gcc/value-range.cc
@@ -313,8 +313,13 @@ frange::set (tree min, tree max, value_range_kind kind)
gcc_checking_assert (real_identical (TREE_REAL_CST_PTR (min),
TREE_REAL_CST_PTR (max)));
tree type = TREE_TYPE (min);
- bool sign = real_isneg (TREE_REAL_CST_PTR (min));
- set_nan (type, sign);
+ if (HONOR_NANS (type))
+ {
+ bool sign = real_isneg (TREE_REAL_CST_PTR (min));
+ set_nan (type, sign);
+ }
+ else
+ set_undefined ();
return;
}