diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2023-05-24 19:57:00 +0200 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2023-05-25 07:24:52 +0200 |
commit | e11685f71a561007b36f02e5ef3f5154313b0d41 (patch) | |
tree | 6521687b1c1ea741972c341580c5730b6368ab8b /gcc/data-streamer-in.cc | |
parent | fae324f1901aff86be3183d87447eddaf33ec262 (diff) | |
download | gcc-e11685f71a561007b36f02e5ef3f5154313b0d41.zip gcc-e11685f71a561007b36f02e5ef3f5154313b0d41.tar.gz gcc-e11685f71a561007b36f02e5ef3f5154313b0d41.tar.bz2 |
Stream out NANs correctly.
NANs don't have bounds, so there's no need to stream them out.
gcc/ChangeLog:
* data-streamer-in.cc (streamer_read_value_range): Handle NANs.
* data-streamer-out.cc (streamer_write_vrange): Same.
* value-range.h (class vrange): Make streamer_write_vrange a friend.
Diffstat (limited to 'gcc/data-streamer-in.cc')
-rw-r--r-- | gcc/data-streamer-in.cc | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/gcc/data-streamer-in.cc b/gcc/data-streamer-in.cc index 07728be..578c328 100644 --- a/gcc/data-streamer-in.cc +++ b/gcc/data-streamer-in.cc @@ -248,14 +248,22 @@ streamer_read_value_range (class lto_input_block *ib, data_in *data_in, if (is_a <frange> (vr)) { frange &r = as_a <frange> (vr); - REAL_VALUE_TYPE lb, ub; - streamer_read_real_value (ib, &lb); - streamer_read_real_value (ib, &ub); + + // Stream in NAN bits. struct bitpack_d bp = streamer_read_bitpack (ib); bool pos_nan = (bool) bp_unpack_value (&bp, 1); bool neg_nan = (bool) bp_unpack_value (&bp, 1); nan_state nan (pos_nan, neg_nan); - r.set (type, lb, ub, nan); + + if (kind == VR_NAN) + r.set_nan (type, nan); + else + { + REAL_VALUE_TYPE lb, ub; + streamer_read_real_value (ib, &lb); + streamer_read_real_value (ib, &ub); + r.set (type, lb, ub, nan); + } return; } gcc_unreachable (); |