[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