diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2022-09-21 11:18:48 +0200 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2022-09-21 13:33:40 +0200 |
commit | dc829c7613ddf562d1aecaf22eda965e87108ac8 (patch) | |
tree | 7ee6f7e4ba6a079f22570442ff09bec1b7bfdb5d /gcc | |
parent | 324fa420b66bc084dd5b20644c6ee7b35be90c00 (diff) | |
download | gcc-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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/value-range.cc | 9 |
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; } |