Commit 4a76d91a by Jan Hubicka Committed by Jan Hubicka

cgraph.c (cgraph_remove_node): Avoid loop in code deciding whether function body…

cgraph.c (cgraph_remove_node): Avoid loop in code deciding whether function body should be released...

	* cgraph.c (cgraph_remove_node): Avoid loop in code deciding whether
	function body should be released; do not proactively release function
	bodies in non-unit-at-a-time mode.

From-SVN: r96654
parent 49aa94f9
2005-03-18 Jan Hubicka <jh@suse.cz>
* cgraph.c (cgraph_remove_node): Avoid loop in code deciding whether
function body should be released; do not proactively release function
bodies in non-unit-at-a-time mode.
2005-03-18 Ralf Corsepius <ralf.corsepius@rtems.org> 2005-03-18 Ralf Corsepius <ralf.corsepius@rtems.org>
* config/i386/t-rtems-i386 (MULTILIBS): Remove k6, athlon, * config/i386/t-rtems-i386 (MULTILIBS): Remove k6, athlon,
......
...@@ -398,7 +398,7 @@ void ...@@ -398,7 +398,7 @@ void
cgraph_remove_node (struct cgraph_node *node) cgraph_remove_node (struct cgraph_node *node)
{ {
void **slot; void **slot;
bool check_dead = 1; bool kill_body = false;
cgraph_node_remove_callers (node); cgraph_node_remove_callers (node);
cgraph_node_remove_callees (node); cgraph_node_remove_callees (node);
...@@ -426,12 +426,7 @@ cgraph_remove_node (struct cgraph_node *node) ...@@ -426,12 +426,7 @@ cgraph_remove_node (struct cgraph_node *node)
else else
{ {
htab_clear_slot (cgraph_hash, slot); htab_clear_slot (cgraph_hash, slot);
if (!dump_enabled_p (TDI_tree_all)) kill_body = true;
{
DECL_SAVED_TREE (node->decl) = NULL;
DECL_STRUCT_FUNCTION (node->decl) = NULL;
}
check_dead = false;
} }
} }
else else
...@@ -443,23 +438,23 @@ cgraph_remove_node (struct cgraph_node *node) ...@@ -443,23 +438,23 @@ cgraph_remove_node (struct cgraph_node *node)
n->next_clone = node->next_clone; n->next_clone = node->next_clone;
} }
/* Work out whether we still need a function body (either there is inline /* While all the clones are removed after being proceeded, the function
clone or there is out of line function whose body is not written). */ itself is kept in the cgraph even after it is compiled. Check whether
if (check_dead && flag_unit_at_a_time) we are done with this body and reclaim it proactively if this is the case.
*/
if (!kill_body && *slot)
{ {
struct cgraph_node *n; struct cgraph_node *n = *slot;
if (!n->next_clone && !n->global.inlined_to
&& (TREE_ASM_WRITTEN (n->decl) || DECL_EXTERNAL (n->decl)))
kill_body = true;
}
for (n = *slot; n; n = n->next_clone) if (kill_body && !dump_enabled_p (TDI_tree_all) && flag_unit_at_a_time)
if (n->global.inlined_to {
|| (!n->global.inlined_to DECL_SAVED_TREE (node->decl) = NULL;
&& !TREE_ASM_WRITTEN (n->decl) && !DECL_EXTERNAL (n->decl))) DECL_STRUCT_FUNCTION (node->decl) = NULL;
break; DECL_INITIAL (node->decl) = error_mark_node;
if (!n && !dump_enabled_p (TDI_tree_all))
{
DECL_SAVED_TREE (node->decl) = NULL;
DECL_STRUCT_FUNCTION (node->decl) = NULL;
DECL_INITIAL (node->decl) = error_mark_node;
}
} }
cgraph_n_nodes--; cgraph_n_nodes--;
/* Do not free the structure itself so the walk over chain can continue. */ /* Do not free the structure itself so the walk over chain can continue. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment