On Thu, 21 Jun 2018, Jan Hubicka wrote: > Hi, > this patch drops streaming of binfo bits we do not need. We only care > about BINFO_TYPE, BINFO_VTABLE, BASES and BINFO_OFFSET. > > Bootstrapped/regtested x86_64-linux, OK?
OK. Richard. > Honza > > * lto-streamer-out.c (DFS::DFS_write_tree_body): Do not stream > BINFO_BASE_ACCESSES and BINFO_VPTR_FIELD. > * tree-streamer-in.c (streamer_read_tree_bitfields): Likewise. > (lto_input_ts_binfo_tree_pointers): Likewise. > * tree-streamer-out.c (streamer_write_tree_bitfields, > write_ts_binfo_tree_pointers): Likewise. > * tree.c (free_lang_data_in_binfo): Clear BINFO_VPTR_FIELD. > Index: lto-streamer-out.c > =================================================================== > --- lto-streamer-out.c (revision 261841) > +++ lto-streamer-out.c (working copy) > @@ -954,15 +947,10 @@ DFS::DFS_write_tree_body (struct output_ > DFS_follow_tree_edge (t); > DFS_follow_tree_edge (BINFO_OFFSET (expr)); > DFS_follow_tree_edge (BINFO_VTABLE (expr)); > - DFS_follow_tree_edge (BINFO_VPTR_FIELD (expr)); > - > - /* The number of BINFO_BASE_ACCESSES has already been emitted in > - EXPR's bitfield section. */ > - FOR_EACH_VEC_SAFE_ELT (BINFO_BASE_ACCESSES (expr), i, t) > - DFS_follow_tree_edge (t); > > - /* Do not walk BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX > - and BINFO_VPTR_INDEX; these are used by C++ FE only. */ > + /* Do not walk BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX, > + BINFO_BASE_ACCESSES and BINFO_VPTR_INDEX; these are used > + by C++ FE only. */ > } > > if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR)) > @@ -1347,11 +1329,9 @@ hash_tree (struct streamer_tree_cache_d > visit (b); > visit (BINFO_OFFSET (t)); > visit (BINFO_VTABLE (t)); > - visit (BINFO_VPTR_FIELD (t)); > - FOR_EACH_VEC_SAFE_ELT (BINFO_BASE_ACCESSES (t), i, b) > - visit (b); > /* Do not walk BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX > - and BINFO_VPTR_INDEX; these are used by C++ FE only. */ > + BINFO_BASE_ACCESSES and BINFO_VPTR_INDEX; these are used > + by C++ FE only. */ > } > > if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR)) > Index: tree-streamer-in.c > =================================================================== > --- tree-streamer-in.c (revision 261841) > +++ tree-streamer-in.c (working copy) > @@ -532,13 +532,6 @@ streamer_read_tree_bitfields (struct lto > if (CODE_CONTAINS_STRUCT (code, TS_OPTIMIZATION)) > cl_optimization_stream_in (&bp, TREE_OPTIMIZATION (expr)); > > - if (CODE_CONTAINS_STRUCT (code, TS_BINFO)) > - { > - unsigned HOST_WIDE_INT length = bp_unpack_var_len_unsigned (&bp); > - if (length > 0) > - vec_safe_grow (BINFO_BASE_ACCESSES (expr), length); > - } > - > if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR)) > { > unsigned HOST_WIDE_INT length = bp_unpack_var_len_unsigned (&bp); > @@ -969,7 +960,6 @@ static void > lto_input_ts_binfo_tree_pointers (struct lto_input_block *ib, > struct data_in *data_in, tree expr) > { > - unsigned i; > tree t; > > /* Note that the number of slots in EXPR was read in > @@ -987,17 +977,10 @@ lto_input_ts_binfo_tree_pointers (struct > > BINFO_OFFSET (expr) = stream_read_tree (ib, data_in); > BINFO_VTABLE (expr) = stream_read_tree (ib, data_in); > - BINFO_VPTR_FIELD (expr) = stream_read_tree (ib, data_in); > > - /* The vector of BINFO_BASE_ACCESSES is pre-allocated during > - unpacking the bitfield section. */ > - for (i = 0; i < vec_safe_length (BINFO_BASE_ACCESSES (expr)); i++) > - { > - tree a = stream_read_tree (ib, data_in); > - (*BINFO_BASE_ACCESSES (expr))[i] = a; > - } > - /* Do not walk BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX > - and BINFO_VPTR_INDEX; these are used by C++ FE only. */ > + /* Do not walk BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX, > + BINFO_BASE_ACCESSES and BINFO_VPTR_INDEX; these are used by C++ FE > + only. */ > } > > > Index: tree-streamer-out.c > =================================================================== > --- tree-streamer-out.c (revision 261841) > +++ tree-streamer-out.c (working copy) > @@ -468,9 +468,6 @@ streamer_write_tree_bitfields (struct ou > if (CODE_CONTAINS_STRUCT (code, TS_OPTIMIZATION)) > cl_optimization_stream_out (&bp, TREE_OPTIMIZATION (expr)); > > - if (CODE_CONTAINS_STRUCT (code, TS_BINFO)) > - bp_pack_var_len_unsigned (&bp, vec_safe_length (BINFO_BASE_ACCESSES > (expr))); > - > if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR)) > bp_pack_var_len_unsigned (&bp, CONSTRUCTOR_NELTS (expr)); > > @@ -824,15 +814,9 @@ write_ts_binfo_tree_pointers (struct out > > stream_write_tree (ob, BINFO_OFFSET (expr), ref_p); > stream_write_tree (ob, BINFO_VTABLE (expr), ref_p); > - stream_write_tree (ob, BINFO_VPTR_FIELD (expr), ref_p); > - > - /* The number of BINFO_BASE_ACCESSES has already been emitted in > - EXPR's bitfield section. */ > - FOR_EACH_VEC_SAFE_ELT (BINFO_BASE_ACCESSES (expr), i, t) > - stream_write_tree (ob, t, ref_p); > > - /* Do not walk BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX > - and BINFO_VPTR_INDEX; these are used by C++ FE only. */ > + /* Do not walk BINFO_INHERITANCE_CHAIN, BINFO_SUBVTT_INDEX, > + BINFO_BASE_ACCESSES and BINFO_VPTR_INDEX; these are used by C++ FE > only. */ > } > > > Index: tree.c > =================================================================== > --- tree.c (revision 261841) > +++ tree.c (working copy) > @@ -5073,6 +5073,7 @@ free_lang_data_in_binfo (tree binfo) > BINFO_BASE_ACCESSES (binfo) = NULL; > BINFO_INHERITANCE_CHAIN (binfo) = NULL_TREE; > BINFO_SUBVTT_INDEX (binfo) = NULL_TREE; > + BINFO_VPTR_FIELD (binfo) = NULL_TREE; > > FOR_EACH_VEC_ELT (*BINFO_BASE_BINFOS (binfo), i, t) > free_lang_data_in_binfo (t); > > -- Richard Biener <rguent...@suse.de> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)