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>
* config/i386/t-rtems-i386 (MULTILIBS): Remove k6, athlon,
......
......@@ -398,7 +398,7 @@ void
cgraph_remove_node (struct cgraph_node *node)
{
void **slot;
bool check_dead = 1;
bool kill_body = false;
cgraph_node_remove_callers (node);
cgraph_node_remove_callees (node);
......@@ -426,12 +426,7 @@ cgraph_remove_node (struct cgraph_node *node)
else
{
htab_clear_slot (cgraph_hash, slot);
if (!dump_enabled_p (TDI_tree_all))
{
DECL_SAVED_TREE (node->decl) = NULL;
DECL_STRUCT_FUNCTION (node->decl) = NULL;
}
check_dead = false;
kill_body = true;
}
}
else
......@@ -443,23 +438,23 @@ cgraph_remove_node (struct cgraph_node *node)
n->next_clone = node->next_clone;
}
/* Work out whether we still need a function body (either there is inline
clone or there is out of line function whose body is not written). */
if (check_dead && flag_unit_at_a_time)
/* While all the clones are removed after being proceeded, the function
itself is kept in the cgraph even after it is compiled. Check whether
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 (n->global.inlined_to
|| (!n->global.inlined_to
&& !TREE_ASM_WRITTEN (n->decl) && !DECL_EXTERNAL (n->decl)))
break;
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;
}
if (kill_body && !dump_enabled_p (TDI_tree_all) && flag_unit_at_a_time)
{
DECL_SAVED_TREE (node->decl) = NULL;
DECL_STRUCT_FUNCTION (node->decl) = NULL;
DECL_INITIAL (node->decl) = error_mark_node;
}
cgraph_n_nodes--;
/* 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