Avoid streaming stray references.
authorJan Hubicka <jh@suse.cz>
Fri, 22 May 2020 14:37:06 +0000 (16:37 +0200)
committerJan Hubicka <jh@suse.cz>
Fri, 22 May 2020 14:37:06 +0000 (16:37 +0200)
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  <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.

gcc/ChangeLog
gcc/lto-streamer-out.c
gcc/lto/ChangeLog
gcc/lto/lto-common.c

index b0199510aed5c99bd33a5e5b96ad36f9d12b94b9..cef15b093149c0ed62445822353ce2b5c0ed5afc 100644 (file)
@@ -1,3 +1,8 @@
+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.
+
 2020-05-22  Jan Hubicka  <hubicka@ucw.cz>
 
        * lto-section-out.c (lto_output_decl_index): Adjust dump indentation.
index f5daadc657b206a66a779f0676c0c3c9bc13abf6..5ff7f33bfb14cd46eae50a0443003e02e39e7c02 100644 (file)
@@ -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)
            {
index aedcba9d83a9b1eef395a14cb0e3698346cccf00..047afbafc80ecc21c5b70b602c47c557355e0f0e 100644 (file)
@@ -1,3 +1,7 @@
+2020-05-22  Jan Hubicka  <hubicka@ucw.cz>
+
+       * lto-common.c (lto_read_decls): Do not skip stray refs.
+
 2020-05-20  Jan Hubicka  <hubicka@ucw.cz>
 
        * lto-common.c (compare_tree_sccs_1): Sanity check that we never
index d04b1c9ca7be54e54c16285012c09d60e509eac0..3ea1894ce96edbedbe2bfc3a3b2e00b7d15f2d4b 100644 (file)
@@ -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);
        }
     }