On Tue, Apr 18, 2023 at 11:06:38AM +0200, Aldy Hernandez via Gcc-patches wrote: > This patch provides inchash support for vrange. It is along the lines > of the streaming support I just posted and will be used for IPA > hashing of ranges. > > Thoughts? > > gcc/ChangeLog: > > * inchash.cc (hash::add_real_value): New. > * inchash.h (class hash): Add add_real_value. > * value-range.cc (add_vrange): New. > * value-range.h (inchash::add_vrange): New. > --- > gcc/inchash.cc | 20 +++++++++++++++++++ > gcc/inchash.h | 2 ++ > gcc/value-range.cc | 48 ++++++++++++++++++++++++++++++++++++++++++++++ > gcc/value-range.h | 6 ++++++ > 4 files changed, 76 insertions(+) > > diff --git a/gcc/inchash.cc b/gcc/inchash.cc > index a30662b97fe..914e3cc92cd 100644 > --- a/gcc/inchash.cc > +++ b/gcc/inchash.cc > @@ -24,3 +24,23 @@ along with GCC; see the file COPYING3. If not see > #endif > #include "system.h" > #include "coretypes.h" > +#include "real.h" > +#include "inchash.h" > + > +namespace inchash > +{ > + > +/* This is here instead of inchash.h to keep us from having to put > + real.h in coretypes.h. */ > +void > +hash::add_real_value (const real_value &v) > +{ > + add_int (v.sign); > + add_int (v.uexp); > + for (unsigned i = 0; i < SIGSZ; ++i) > + add_hwi (v.sig[i]); > + /* Ignore the rest of the flags, as sign, exponent, and > + significant bits should be enough. */
I don't think that's the case. At least cl, decimal and signalling are essential flags as well. Dunno about canonical. How do you otherwise differentiate between Inf and +0.0 or (canonical) qNaN or (canonical) sNaN? They have the same sign, uexp and sig. Jakub