aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2020-05-25 14:41:33 +0200
committerJan Hubicka <jh@suse.cz>2020-05-25 14:41:33 +0200
commita746f952abb78af9db28a7f3bce442e113877c9c (patch)
treeb7eb8047093027d31c4d5f5becab23088c81df83
parent67bfbda18f4e6d0d30ad8f8790f1d0d4653131ed (diff)
downloadgcc-a746f952abb78af9db28a7f3bce442e113877c9c.zip
gcc-a746f952abb78af9db28a7f3bce442e113877c9c.tar.gz
gcc-a746f952abb78af9db28a7f3bce442e113877c9c.tar.bz2
Do not stream redundant stuff
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 gcc/ * 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.
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/lto-streamer-out.c5
-rw-r--r--gcc/lto-streamer.h3
-rw-r--r--gcc/tree-streamer-in.c21
-rw-r--r--gcc/tree-streamer-out.c3
5 files changed, 31 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d584459..a83cc4b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2020-05-25 Jan Hubicka <hubicka@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.
+
2020-05-25 Richard Biener <rguenther@suse.de>
PR tree-optimization/95308
diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c
index 887a51d..288e3c0 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 a466fb8..93da3c6 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 450f40d..d2e45e3 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 4e8a12c..94635c4 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);