[PATCH] [frange] Stream frange sub-ranges in LTO

Aldy Hernandez <[email protected]>
Newsgroups gmane.comp.gcc.patches
Message-ID <[email protected]>
Tested on ppc64le Linux.

Pushed.

gcc/ChangeLog:

	* data-streamer-out.cc (streamer_write_vrange): Stream each frange
	sub-range.
	* data-streamer-in.cc (streamer_read_value_range): Read them.
---
 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 a4c2b0b6ba3..b43e3c199dd 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 c4f24db5875..15970880dfa 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;
     }
-- 
2.47.3
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.