aboutsummaryrefslogtreecommitdiff
path: root/gcc/lto
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2010-05-18 00:42:02 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2010-05-17 22:42:02 +0000
commit28632d639518d2d98347218a1269548fa2c22765 (patch)
treedd39735c3c41044f11ba9127db8622a7b69e26c7 /gcc/lto
parentd3a9b459b78d601a3790e688cd8c40d164365120 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/lto/lto.c23
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++;
}