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;
     }

Reply via email to