aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego Novillo <dnovillo@google.com>2011-06-07 10:11:05 -0400
committerDiego Novillo <dnovillo@gcc.gnu.org>2011-06-07 10:11:05 -0400
commit28628ea69f5eea41ec4e678e7e66924a574943cb (patch)
tree1c4ebb43692ab9d19dee42af45f66e94ccf6970f
parent1dcad079712bdc8e49d6bc2bcecc0034a4691402 (diff)
downloadgcc-28628ea69f5eea41ec4e678e7e66924a574943cb.zip
gcc-28628ea69f5eea41ec4e678e7e66924a574943cb.tar.gz
gcc-28628ea69f5eea41ec4e678e7e66924a574943cb.tar.bz2
lto.c (uniquify_nodes): Move code to register decls to the loop that computes canonical types.
* lto.c (uniquify_nodes): Move code to register decls to the loop that computes canonical types. From-SVN: r174745
-rw-r--r--gcc/lto/ChangeLog5
-rw-r--r--gcc/lto/lto.c36
2 files changed, 21 insertions, 20 deletions
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog
index 0d980ee..44265df 100644
--- a/gcc/lto/ChangeLog
+++ b/gcc/lto/ChangeLog
@@ -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
diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c
index 74dfecd..6e49ee7 100644
--- a/gcc/lto/lto.c
+++ b/gcc/lto/lto.c
@@ -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);
}
}