https://gcc.gnu.org/g:6b97b4f0f6323dcebc5bca55a97cb29b868da390
commit r17-3163-g6b97b4f0f6323dcebc5bca55a97cb29b868da390 Author: Aldy Hernandez <[email protected]> Date: Sun Aug 9 07:53:03 2026 +0000 [frange] Stream frange sub-ranges in LTO Tested on ppc64le Linux. gcc/ChangeLog: * data-streamer-out.cc (streamer_write_vrange): Stream each frange sub-range. * data-streamer-in.cc (streamer_read_value_range): Read them. Diff: --- gcc/data-streamer-in.cc | 15 +++++++++++---- gcc/data-streamer-out.cc | 12 ++++++++---- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/gcc/data-streamer-in.cc b/gcc/data-streamer-in.cc index a4c2b0b6ba3c..b43e3c199dd9 100644 --- a/gcc/data-streamer-in.cc +++ b/gcc/data-streamer-in.cc @@ -257,10 +257,17 @@ streamer_read_value_range (class lto_input_block *ib, data_in *data_in, 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); + r.set_undefined (); + unsigned HOST_WIDE_INT num_pairs = streamer_read_uhwi (ib); + for (unsigned i = 0; i < num_pairs; ++i) + { + REAL_VALUE_TYPE lb, ub; + streamer_read_real_value (ib, &lb); + streamer_read_real_value (ib, &ub); + frange tmp; + tmp.set (type, lb, ub, nan); + r.union_ (tmp); + } } return; } diff --git a/gcc/data-streamer-out.cc b/gcc/data-streamer-out.cc index c4f24db58751..15970880dfa7 100644 --- a/gcc/data-streamer-out.cc +++ b/gcc/data-streamer-out.cc @@ -443,10 +443,14 @@ streamer_write_vrange (struct output_block *ob, const vrange &v) // Stream out bounds. if (kind != VR_NAN) { - REAL_VALUE_TYPE lb = r.lower_bound (); - REAL_VALUE_TYPE ub = r.upper_bound (); - streamer_write_real_value (ob, &lb); - streamer_write_real_value (ob, &ub); + streamer_write_uhwi (ob, r.num_pairs ()); + for (unsigned i = 0; i < r.num_pairs (); ++i) + { + REAL_VALUE_TYPE lb = r.lower_bound (i); + REAL_VALUE_TYPE ub = r.upper_bound (i); + streamer_write_real_value (ob, &lb); + streamer_write_real_value (ob, &ub); + } } return; }
