Convert flag_finite_math_only uses in frange to HONOR_*.

Message ID 20221025205901.125058-1-aldyh@redhat.com
State Accepted
Headers
Series Convert flag_finite_math_only uses in frange to HONOR_*. |

Checks

Context Check Description
snail/gcc-patch-check success Github commit url

Commit Message

Aldy Hernandez Oct. 25, 2022, 8:59 p.m. UTC
  [As Richi, and probably Jakub, have mentioned in the past...]

As mentioned earlier, we should be using HONOR_* on types rather than
flag_finite_math_only.

Will commit pending tests.

gcc/ChangeLog:

	* value-range.cc (frange::set): Use HONOR_*.
	(frange::verify_range): Same.
	* value-range.h (frange_val_min): Same.
	(frange_val_max): Same.
---
 gcc/value-range.cc |  6 +++---
 gcc/value-range.h  | 12 ++++++------
 2 files changed, 9 insertions(+), 9 deletions(-)
  

Comments

Jeff Law Oct. 27, 2022, 10:59 p.m. UTC | #1
On 10/25/22 14:59, Aldy Hernandez via Gcc-patches wrote:
> [As Richi, and probably Jakub, have mentioned in the past...]
>
> As mentioned earlier, we should be using HONOR_* on types rather than
> flag_finite_math_only.
>
> Will commit pending tests.
>
> gcc/ChangeLog:
>
> 	* value-range.cc (frange::set): Use HONOR_*.
> 	(frange::verify_range): Same.
> 	* value-range.h (frange_val_min): Same.
> 	(frange_val_max): Same.

I haven't verified it's this patch, but our friend the vax regression is 
back:


cc1: internal compiler error: in fail, at selftest.cc:47
0x1686807 selftest::fail(selftest::location const&, char const*)
     ../../../gcc/gcc/selftest.cc:47
0x10578d2 range_tests_floats
     ../../../gcc/gcc/value-range.cc:4038
0x10658fd range_tests_floats_various
     ../../../gcc/gcc/value-range.cc:4056
0x10658fd selftest::range_tests()
     ../../../gcc/gcc/value-range.cc:4069

http://law-sandy.freeddns.org:8080/job/vax-unknown-linux/1458/console


Jeff
  
Aldy Hernandez Oct. 28, 2022, 6:22 a.m. UTC | #2
On Fri, Oct 28, 2022 at 1:00 AM Jeff Law <jeffreyalaw@gmail.com> wrote:
>
>
> On 10/25/22 14:59, Aldy Hernandez via Gcc-patches wrote:
> > [As Richi, and probably Jakub, have mentioned in the past...]
> >
> > As mentioned earlier, we should be using HONOR_* on types rather than
> > flag_finite_math_only.
> >
> > Will commit pending tests.
> >
> > gcc/ChangeLog:
> >
> >       * value-range.cc (frange::set): Use HONOR_*.
> >       (frange::verify_range): Same.
> >       * value-range.h (frange_val_min): Same.
> >       (frange_val_max): Same.
>
> I haven't verified it's this patch, but our friend the vax regression is
> back:

Bah.  I suck.  There was one remaining use of flag_finite_math_only in
the self tests.  Fixed and finally done:

$ grep flag_finite *range*
value-range.cc:  int save_finite_math_only = flag_finite_math_only;
value-range.cc:  flag_finite_math_only = 1;
value-range.cc:  flag_finite_math_only = 0;
value-range.cc:  flag_finite_math_only = save_finite_math_only;

Aldy
  

Patch

diff --git a/gcc/value-range.cc b/gcc/value-range.cc
index d8ee6ec0d0f..77e5a2cc299 100644
--- a/gcc/value-range.cc
+++ b/gcc/value-range.cc
@@ -341,7 +341,7 @@  frange::set (tree type,
 
   // For -ffinite-math-only we can drop ranges outside the
   // representable numbers to min/max for the type.
-  if (flag_finite_math_only)
+  if (!HONOR_INFINITIES (m_type))
     {
       REAL_VALUE_TYPE min_repr = frange_val_min (m_type);
       REAL_VALUE_TYPE max_repr = frange_val_max (m_type);
@@ -712,8 +712,8 @@  frange::supports_type_p (const_tree type) const
 void
 frange::verify_range ()
 {
-  if (flag_finite_math_only)
-    gcc_checking_assert (!maybe_isnan ());
+  if (!undefined_p ())
+    gcc_checking_assert (HONOR_NANS (m_type) || !maybe_isnan ());
   switch (m_kind)
     {
     case VR_UNDEFINED:
diff --git a/gcc/value-range.h b/gcc/value-range.h
index b48542a68aa..c87734dd8cd 100644
--- a/gcc/value-range.h
+++ b/gcc/value-range.h
@@ -1201,10 +1201,10 @@  real_min_representable (const_tree type)
 inline REAL_VALUE_TYPE
 frange_val_min (const_tree type)
 {
-  if (flag_finite_math_only)
-    return real_min_representable (type);
-  else
+  if (HONOR_INFINITIES (type))
     return dconstninf;
+  else
+    return real_min_representable (type);
 }
 
 // Return the maximum value for TYPE.
@@ -1212,10 +1212,10 @@  frange_val_min (const_tree type)
 inline REAL_VALUE_TYPE
 frange_val_max (const_tree type)
 {
-  if (flag_finite_math_only)
-    return real_max_representable (type);
-  else
+  if (HONOR_INFINITIES (type))
     return dconstinf;
+  else
+    return real_max_representable (type);
 }
 
 // Return TRUE if R is the minimum value for TYPE.