public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r13-3880] Do not specify NAN sign in frange::set_nonnegative.
@ 2022-11-10 15:41 Aldy Hernandez
  0 siblings, 0 replies; only message in thread
From: Aldy Hernandez @ 2022-11-10 15:41 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:b4fc06d8c9091166a7404ca1dbeb7c197263de94

commit r13-3880-gb4fc06d8c9091166a7404ca1dbeb7c197263de94
Author: Aldy Hernandez <aldyh@redhat.com>
Date:   Thu Nov 10 14:29:13 2022 +0100

    Do not specify NAN sign in frange::set_nonnegative.
    
    After further reading of the IEEE 754 standard, it has become clear
    that there are no guarantees with regards to the sign of a NAN when it
    comes to any operation other than copy, copysign, abs, and negate.
    
    Currently, set_nonnegative() is only used in one place in ranger
    applicable to floating point values, when expanding unknown calls.
    Since we already specially handle copy, copysign, abs, and negate, all
    the calls to set_nonnegative() must be NAN-sign agnostic.
    
    The cleanest solution is to leave the sign unspecificied in
    frange::set_nonnegative().  Any special case, must be handled by the
    caller.
    
    gcc/ChangeLog:
    
            * value-range.cc (frange::set_nonnegative): Remove NAN sign handling.
            (range_tests_signed_zeros): Adjust test.

Diff:
---
 gcc/value-range.cc | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/gcc/value-range.cc b/gcc/value-range.cc
index 852ac09f2c4..d55d85846c1 100644
--- a/gcc/value-range.cc
+++ b/gcc/value-range.cc
@@ -797,14 +797,17 @@ frange::zero_p () const
 	  && real_iszero (&m_max));
 }
 
+// Set the range to non-negative numbers, that is [+0.0, +INF].
+//
+// The NAN in the resulting range (if HONOR_NANS) has a varying sign
+// as there are no guarantees in IEEE 754 wrt to the sign of a NAN,
+// except for copy, abs, and copysign.  It is the responsibility of
+// the caller to set the NAN's sign if desired.
+
 void
 frange::set_nonnegative (tree type)
 {
   set (type, dconst0, frange_val_max (type));
-
-  // Set +NAN as the only possibility.
-  if (HONOR_NANS (type))
-    update_nan (/*sign=*/false);
 }
 
 // Here we copy between any two irange's.  The ranges can be legacy or
@@ -3923,7 +3926,6 @@ range_tests_signed_zeros ()
     ASSERT_TRUE (r0.undefined_p ());
 
   r0.set_nonnegative (float_type_node);
-  ASSERT_TRUE (r0.signbit_p (signbit) && !signbit);
   if (HONOR_NANS (float_type_node))
     ASSERT_TRUE (r0.maybe_isnan ());
 }

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-11-10 15:41 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-10 15:41 [gcc r13-3880] Do not specify NAN sign in frange::set_nonnegative Aldy Hernandez

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).