From: Jan Hubicka Date: Fri, 22 May 2020 14:37:06 +0000 (+0200) Subject: Avoid streaming stray references. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bcb63eb2cbd3caf212b9cf42d8c218c09dc6ff8b;p=gcc.git Avoid streaming stray references. this patch avoids stremaing completely useless stray references to gobal decl stream. I am re-testing the patch (rebased to current tree) on x86_64-linux and intend to commit once testing finishes. gcc/ChangeLog: 2020-05-22 Jan Hubicka * lto-streamer-out.c (lto_output_tree): Do not stream final ref if it is not needed. gcc/lto/ChangeLog: 2020-05-22 Jan Hubicka * lto-common.c (lto_read_decls): Do not skip stray refs. --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b0199510aed..cef15b09314 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2020-05-22 Jan Hubicka + + * lto-streamer-out.c (lto_output_tree): Do not stream final ref if + it is not needed. + 2020-05-22 Jan Hubicka * lto-section-out.c (lto_output_decl_index): Adjust dump indentation. diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c index f5daadc657b..5ff7f33bfb1 100644 --- a/gcc/lto-streamer-out.c +++ b/gcc/lto-streamer-out.c @@ -1780,7 +1780,7 @@ lto_output_tree (struct output_block *ob, tree expr, it. */ if (!existed_p) lto_output_tree_1 (ob, expr, 0, ref_p, this_ref_p); - else + else if (this_ref_p) { if (streamer_dump_file) { diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index aedcba9d83a..047afbafc80 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,7 @@ +2020-05-22 Jan Hubicka + + * lto-common.c (lto_read_decls): Do not skip stray refs. + 2020-05-20 Jan Hubicka * lto-common.c (compare_tree_sccs_1): Sanity check that we never diff --git a/gcc/lto/lto-common.c b/gcc/lto/lto-common.c index d04b1c9ca7b..3ea1894ce96 100644 --- a/gcc/lto/lto-common.c +++ b/gcc/lto/lto-common.c @@ -1955,25 +1955,19 @@ lto_read_decls (struct lto_file_decl_data *decl_data, const void *data, else { t = lto_input_tree_1 (&ib_main, data_in, tag, 0); - /* We streamed in new tree. Add it to cache and process dref. */ - if (data_in->reader_cache->nodes.length () == from + 1) + gcc_assert (data_in->reader_cache->nodes.length () == from + 1); + num_unshared_trees_read++; + data_in->location_cache.accept_location_cache (); + process_dref (data_in, t, from); + if (TREE_CODE (t) == IDENTIFIER_NODE + || (TREE_CODE (t) == INTEGER_CST + && !TREE_OVERFLOW (t))) + ; + else { - num_unshared_trees_read++; - data_in->location_cache.accept_location_cache (); - process_dref (data_in, t, from); - if (TREE_CODE (t) == IDENTIFIER_NODE - || (TREE_CODE (t) == INTEGER_CST - && !TREE_OVERFLOW (t))) - ; - else - { - lto_maybe_register_decl (data_in, t, from); - process_new_tree (t, &hm, from, &total, data_in); - } + lto_maybe_register_decl (data_in, t, from); + process_new_tree (t, &hm, from, &total, data_in); } - else - /* FIXME: It seems useless to pickle stray references. */ - gcc_assert (data_in->reader_cache->nodes.length () == from); } }