diff options
author | dnovillo <dnovillo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-06-07 14:11:05 +0000 |
---|---|---|
committer | dnovillo <dnovillo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-06-07 14:11:05 +0000 |
commit | bbcef2a7b155a927afeaa5421cede04b1fc2338e (patch) | |
tree | 1c4ebb43692ab9d19dee42af45f66e94ccf6970f /gcc/lto | |
parent | f5ec651645d37432a89d8cba8b36483a29a50fc8 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/lto/lto.c | 36 |
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); } } |