diff options
| -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++; } |
