From: hubicka Date: Mon, 17 May 2010 22:42:02 +0000 (+0000) Subject: * lto.c (lto_materialize_function): Announce function when X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1375c6f8ee50f0882e3bec39b0ce9e97d40c9434;p=thirdparty%2Fgcc.git * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159516 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index ff33788d57bc..e5abeb1f11ae 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,11 @@ +2010-05-18 Jan Hubicka + + * 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 * lto.c (materialize_cgraph): Revert my previous patch. diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c index 438cf3cb0c29..ab55c126e9c2 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++; }