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)

Reply via email to