On Mon, 25 May 2020, Jan Hubicka wrote: > Hi, > as discussed on IRC this adds knob to disable stuff we stream "just for fun" > (or to make it easier to debug streamer desychnonization). > > Te size of .o files in gcc subdirectory is reduced form 506MB to 492MB > > Bootstrapped/regtested x86_64-linux, OK?
OK. > gcc/ChangeLog: > > 2020-05-25 Jan Hubicka <hubi...@ucw.cz> > > * lto-streamer-out.c (lto_output_tree): Add streamer_debugging check. > * lto-streamer.h (streamer_debugging): New constant > * tree-streamer-in.c (streamer_read_tree_bitfields): Add > * streamer_debugging check. > (streamer_get_pickled_tree): Likewise. > * tree-streamer-out.c (pack_ts_base_value_fields): Likewise. > > diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c > index 887a51d3eae..288e3c0f4c6 100644 > --- a/gcc/lto-streamer-out.c > +++ b/gcc/lto-streamer-out.c > @@ -1748,8 +1748,9 @@ lto_output_tree (struct output_block *ob, tree expr, > will instantiate two different nodes for the same object. */ > streamer_write_record_start (ob, LTO_tree_pickle_reference); > streamer_write_uhwi (ob, ix); > - streamer_write_enum (ob->main_stream, LTO_tags, LTO_NUM_TAGS, > - lto_tree_code_to_tag (TREE_CODE (expr))); > + if (streamer_debugging) > + streamer_write_enum (ob->main_stream, LTO_tags, LTO_NUM_TAGS, > + lto_tree_code_to_tag (TREE_CODE (expr))); > lto_stats.num_pickle_refs_output++; > } > else > diff --git a/gcc/lto-streamer.h b/gcc/lto-streamer.h > index a466fb8b329..fbf1dd7162e 100644 > --- a/gcc/lto-streamer.h > +++ b/gcc/lto-streamer.h > @@ -125,6 +125,9 @@ along with GCC; see the file COPYING3. If not see > > typedef unsigned char lto_decl_flags_t; > > +/* Stream additional data to LTO object files to make it easier to debug > + streaming code. This changes object files. */ > +static const bool streamer_debugging = false; > > /* Tags representing the various IL objects written to the bytecode file > (GIMPLE statements, basic blocks, EH regions, tree nodes, etc). > diff --git a/gcc/tree-streamer-in.c b/gcc/tree-streamer-in.c > index 450f40d58d3..d2e45e33554 100644 > --- a/gcc/tree-streamer-in.c > +++ b/gcc/tree-streamer-in.c > @@ -487,9 +487,13 @@ streamer_read_tree_bitfields (class lto_input_block *ib, > > /* The first word in BP contains the code of the tree that we > are about to read. */ > - code = (enum tree_code) bp_unpack_value (&bp, 16); > - lto_tag_check (lto_tree_code_to_tag (code), > - lto_tree_code_to_tag (TREE_CODE (expr))); > + if (streamer_debugging) > + { > + code = (enum tree_code) bp_unpack_value (&bp, 16); > + lto_tag_check (lto_tree_code_to_tag (code), > + lto_tree_code_to_tag (TREE_CODE (expr))); > + } > + code = TREE_CODE (expr); > > /* Note that all these functions are highly sensitive to changes in > the types and sizes of each of the fields being packed. */ > @@ -1107,11 +1111,14 @@ streamer_get_pickled_tree (class lto_input_block *ib, > class data_in *data_in) > enum LTO_tags expected_tag; > > ix = streamer_read_uhwi (ib); > - expected_tag = streamer_read_enum (ib, LTO_tags, LTO_NUM_TAGS); > - > result = streamer_tree_cache_get_tree (data_in->reader_cache, ix); > - gcc_assert (result > - && TREE_CODE (result) == lto_tag_to_tree_code (expected_tag)); > + > + if (streamer_debugging) > + { > + expected_tag = streamer_read_enum (ib, LTO_tags, LTO_NUM_TAGS); > + gcc_assert (result > + && TREE_CODE (result) == lto_tag_to_tree_code (expected_tag)); > + } > > return result; > } > diff --git a/gcc/tree-streamer-out.c b/gcc/tree-streamer-out.c > index 4e8a12c71e6..94635c4a8ae 100644 > --- a/gcc/tree-streamer-out.c > +++ b/gcc/tree-streamer-out.c > @@ -71,7 +71,8 @@ write_identifier (struct output_block *ob, > static inline void > pack_ts_base_value_fields (struct bitpack_d *bp, tree expr) > { > - bp_pack_value (bp, TREE_CODE (expr), 16); > + if (streamer_debugging) > + bp_pack_value (bp, TREE_CODE (expr), 16); > if (!TYPE_P (expr)) > { > bp_pack_value (bp, TREE_SIDE_EFFECTS (expr), 1); > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)