aboutsummaryrefslogtreecommitdiff
path: root/gcc/value-range.cc
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2022-10-20 08:55:36 +0200
committerAldy Hernandez <aldyh@redhat.com>2022-10-20 16:11:22 +0200
commitf4fda3eec408e1eb12cc966f55f0de396be71597 (patch)
tree0f8e7c96459b453de04a3a7b740e580229bfcfdd /gcc/value-range.cc
parentbe43d5d3051589ee00f6685103539dced767c47d (diff)
downloadgcc-f4fda3eec408e1eb12cc966f55f0de396be71597.zip
gcc-f4fda3eec408e1eb12cc966f55f0de396be71597.tar.gz
gcc-f4fda3eec408e1eb12cc966f55f0de396be71597.tar.bz2
Do not set NAN flags for VARYING ranges when !HONOR_NANS.
Since NANs can't appear in ranges for !HONOR_NANS, there's no reason to set them in a VARYING range. gcc/ChangeLog: * value-range.h (frange::set_varying): Do not set NAN flags for !HONOR_NANS. * value-range.cc (frange::normalize_kind): Adjust for no NAN when !HONOR_NANS. (frange::verify_range): Same. * range-op-float.cc (maybe_isnan): Remove flag_finite_math_only check.
Diffstat (limited to 'gcc/value-range.cc')
-rw-r--r--gcc/value-range.cc11
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/value-range.cc b/gcc/value-range.cc
index 511cd0a..bcda498 100644
--- a/gcc/value-range.cc
+++ b/gcc/value-range.cc
@@ -388,7 +388,7 @@ frange::normalize_kind ()
&& frange_val_is_min (m_min, m_type)
&& frange_val_is_max (m_max, m_type))
{
- if (m_pos_nan && m_neg_nan)
+ if (!HONOR_NANS (m_type) || (m_pos_nan && m_neg_nan))
{
set_varying (m_type);
return true;
@@ -396,7 +396,7 @@ frange::normalize_kind ()
}
else if (m_kind == VR_VARYING)
{
- if (!m_pos_nan || !m_neg_nan)
+ if (HONOR_NANS (m_type) && (!m_pos_nan || !m_neg_nan))
{
m_kind = VR_RANGE;
m_min = frange_val_min (m_type);
@@ -712,14 +712,19 @@ frange::supports_type_p (const_tree type) const
void
frange::verify_range ()
{
+ if (flag_finite_math_only)
+ gcc_checking_assert (!maybe_isnan ());
switch (m_kind)
{
case VR_UNDEFINED:
gcc_checking_assert (!m_type);
return;
case VR_VARYING:
+ if (flag_finite_math_only)
+ gcc_checking_assert (!m_pos_nan && !m_neg_nan);
+ else
+ gcc_checking_assert (m_pos_nan && m_neg_nan);
gcc_checking_assert (m_type);
- gcc_checking_assert (m_pos_nan && m_neg_nan);
gcc_checking_assert (frange_val_is_min (m_min, m_type));
gcc_checking_assert (frange_val_is_max (m_max, m_type));
return;