OSDN Git Service

* lto.c (uniquify_nodes): Move code to register decls to
authordnovillo <dnovillo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 7 Jun 2011 14:11:05 +0000 (14:11 +0000)
committerdnovillo <dnovillo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 7 Jun 2011 14:11:05 +0000 (14:11 +0000)
the loop that computes canonical types.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@174745 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/lto/ChangeLog
gcc/lto/lto.c

index 0d980ee..44265df 100644 (file)
@@ -1,3 +1,8 @@
+2011-06-07  Diego Novillo  <dnovillo@google.com>
+
+       * lto.c (uniquify_nodes): Move code to register decls to
+       the loop that computes canonical types.
+
 2011-06-07  Richard Guenther  <rguenther@suse.de>
 
        * lto-lang.c (lto_init): Do not set
index 74dfecd..6e49ee7 100644 (file)
@@ -651,21 +651,13 @@ uniquify_nodes (struct data_in *data_in, unsigned from)
   /* Go backwards because children streamed for the first time come
      as part of their parents, and hence are created after them.  */
 
-  /* First register all declarations and types in the cache.
-     This makes sure to have the original structure in the type cycles
-     when registering them and computing hashes.  */
+  /* First register all the types in the cache.  This makes sure to
+     have the original structure in the type cycles when registering
+     them and computing hashes.  */
   for (i = len; i-- > from;)
     {
       tree t = VEC_index (tree, cache->nodes, i);
-
-      if (t == NULL_TREE)
-       continue;
-
-      if (TREE_CODE (t) == VAR_DECL)
-       lto_register_var_decl_in_symtab (data_in, t);
-      else if (TREE_CODE (t) == FUNCTION_DECL && !DECL_BUILT_IN (t))
-       lto_register_function_decl_in_symtab (data_in, t);
-      else if (TYPE_P (t))
+      if (t && TYPE_P (t))
        gimple_register_type (t);
     }
 
@@ -788,19 +780,23 @@ uniquify_nodes (struct data_in *data_in, unsigned from)
        }
     }
 
-  /* Finally compute the canonical type of t.  From this point
-     there are no longer any types with TYPE_STRUCTURAL_EQUALITY_P
-     and its type-based alias problems.  This step requires the
-     TYPE_POINTER_TO lists being present, so make sure it is done
-     last.  */
+  /* Finally compute the canonical type of all TREE_TYPEs and register
+     VAR_DECL and FUNCTION_DECL nodes in the symbol table.
+     From this point there are no longer any types with
+     TYPE_STRUCTURAL_EQUALITY_P and its type-based alias problems.
+     This step requires the TYPE_POINTER_TO lists being present, so
+     make sure it is done last.  */
   for (i = len; i-- > from;)
     {
       tree t = VEC_index (tree, cache->nodes, i);
-      if (!t
-         || !TYPE_P (t))
+      if (t == NULL_TREE)
        continue;
 
-      if (!TYPE_CANONICAL (t))
+      if (TREE_CODE (t) == VAR_DECL)
+       lto_register_var_decl_in_symtab (data_in, t);
+      else if (TREE_CODE (t) == FUNCTION_DECL && !DECL_BUILT_IN (t))
+       lto_register_function_decl_in_symtab (data_in, t);
+      else if (TYPE_P (t) && !TYPE_CANONICAL (t))
        TYPE_CANONICAL (t) = gimple_register_canonical_type (t);
     }
 }