diff options
author | Jan Hubicka <jh@suse.cz> | 2010-05-18 00:42:02 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2010-05-17 22:42:02 +0000 |
commit | 28632d639518d2d98347218a1269548fa2c22765 (patch) | |
tree | dd39735c3c41044f11ba9127db8622a7b69e26c7 /gcc/lto | |
parent | d3a9b459b78d601a3790e688cd8c40d164365120 (diff) | |
download | gcc-28632d639518d2d98347218a1269548fa2c22765.zip gcc-28632d639518d2d98347218a1269548fa2c22765.tar.gz gcc-28632d639518d2d98347218a1269548fa2c22765.tar.bz2 |
lto.c (lto_materialize_function): Announce function when reading body...
* lto.c (lto_materialize_function): Announce function when
reading body; allocate_struct_function only when reading body;
do not finalize local statics; ggc_collect after reading;
do not mark reachable node.
(materialize_cgraph): Do not announce function.
From-SVN: r159516
Diffstat (limited to 'gcc/lto')
-rw-r--r-- | gcc/lto/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/lto/lto.c | 23 |
2 files changed, 12 insertions, 19 deletions
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index ff33788..e5abeb1 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,11 @@ +2010-05-18 Jan Hubicka <jh@suse.cz> + + * lto.c (lto_materialize_function): Announce function when + reading body; allocate_struct_function only when reading body; + do not finalize local statics; ggc_collect after reading; + do not mark reachable node. + (materialize_cgraph): Do not announce function. + 2010-05-11 Jan Hubicka <jh@suse.cz> * lto.c (materialize_cgraph): Revert my previous patch. diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c index 438cf3c..ab55c12 100644 --- a/gcc/lto/lto.c +++ b/gcc/lto/lto.c @@ -84,7 +84,6 @@ lto_materialize_function (struct cgraph_node *node) struct lto_file_decl_data *file_data; const char *data, *name; size_t len; - tree step; /* Ignore clone nodes. Read the body only from the original one. We may find clone nodes during LTRANS after WPA has made inlining @@ -103,46 +102,33 @@ lto_materialize_function (struct cgraph_node *node) name, &len); if (data) { - struct function *fn; - gcc_assert (!DECL_IS_BUILTIN (decl)); /* This function has a definition. */ TREE_STATIC (decl) = 1; gcc_assert (DECL_STRUCT_FUNCTION (decl) == NULL); - allocate_struct_function (decl, false); /* Load the function body only if not operating in WPA mode. In WPA mode, the body of the function is not needed. */ if (!flag_wpa) { + allocate_struct_function (decl, false); + announce_function (node->decl); lto_input_function_body (file_data, decl, data); lto_stats.num_function_bodies++; } - fn = DECL_STRUCT_FUNCTION (decl); lto_free_section_data (file_data, LTO_section_function_body, name, data, len); - - /* Look for initializers of constant variables and private - statics. */ - for (step = fn->local_decls; step; step = TREE_CHAIN (step)) - { - tree decl = TREE_VALUE (step); - if (TREE_CODE (decl) == VAR_DECL - && (TREE_STATIC (decl) && !DECL_EXTERNAL (decl)) - && flag_unit_at_a_time) - varpool_finalize_decl (decl); - } + if (!flag_wpa) + ggc_collect (); } else DECL_EXTERNAL (decl) = 1; /* Let the middle end know about the function. */ rest_of_decl_compilation (decl, 1, 0); - if (cgraph_node (decl)->needed) - cgraph_mark_reachable_node (cgraph_node (decl)); } @@ -1686,7 +1672,6 @@ materialize_cgraph (void) if (node->local.lto_file_data && !DECL_IS_BUILTIN (node->decl)) { - announce_function (node->decl); lto_materialize_function (node); lto_stats.num_input_cgraph_nodes++; } |