summaryrefslogtreecommitdiff
path: root/gcc/lto
diff options
context:
space:
mode:
authordnovillo <dnovillo@138bc75d-0d04-0410-961f-82ee72b054a4>2011-06-07 14:11:05 +0000
committerdnovillo <dnovillo@138bc75d-0d04-0410-961f-82ee72b054a4>2011-06-07 14:11:05 +0000
commitbbcef2a7b155a927afeaa5421cede04b1fc2338e (patch)
tree1c4ebb43692ab9d19dee42af45f66e94ccf6970f /gcc/lto
parentf5ec651645d37432a89d8cba8b36483a29a50fc8 (diff)
downloadgcc-bbcef2a7b155a927afeaa5421cede04b1fc2338e.tar.gz
* lto.c (uniquify_nodes): Move code to register decls to
the loop that computes canonical types. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@174745 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/lto')
-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 0d980ee3fc6..44265df529f 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 74dfecdbc3e..6e49ee77b59 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);
}
}