Avoid streaming of stray referneces
Jan Hubicka
hubicka@ucw.cz
Fri May 22 14:22:57 GMT 2020
Hi,
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.
Honza
gcc/ChangeLog:
2020-05-22 Jan Hubicka <hubicka@ucw.cz>
* 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 <hubicka@ucw.cz>
* lto-common.c (lto_read_decls): Do not skip stray refs.
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/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);
}
}
More information about the Gcc-patches
mailing list