Commit 257eb6e3 by Jan Hubicka Committed by Jan Hubicka

cgraph.c (dump_cgraph_node): Add replace output flag by process.

	* cgraph.c (dump_cgraph_node): Add replace output flag by process.
	* cgraph.h (cgraph_node): Likewise.
	* cgraphunit.c (cgraph_process_new_functions): Set process flag.
	(cgraph_reset_node): Use process flag.
	(cgraph_mark_functions_to_output): Likewise.
	(cgraph_expand_function): Likewise.
	(cgraph_expand_all_functions): Likewise.
	(cgraph_output_in_order): Likewise.
	* dwarf2out.c (reference_to_unused): Likewise.
	* passes.c do_per_function_toporder): Likewise.

From-SVN: r145178
parent b7551676
2009-03-28 Jan Hubicka <jh@suse.cz> 2009-03-28 Jan Hubicka <jh@suse.cz>
* cgraph.c (dump_cgraph_node): Add replace output flag by process.
* cgraph.h (cgraph_node): Likewise.
* cgraphunit.c (cgraph_process_new_functions): Set process flag.
(cgraph_reset_node): Use process flag.
(cgraph_mark_functions_to_output): Likewise.
(cgraph_expand_function): Likewise.
(cgraph_expand_all_functions): Likewise.
(cgraph_output_in_order): Likewise.
* dwarf2out.c (reference_to_unused): Likewise.
* passes.c do_per_function_toporder): Likewise.
2009-03-28 Jan Hubicka <jh@suse.cz>
Bring from lto-branch: Bring from lto-branch:
2008-09-03 Doug Kwan <dougkwan@google.com> 2008-09-03 Doug Kwan <dougkwan@google.com>
......
...@@ -1168,8 +1168,8 @@ dump_cgraph_node (FILE *f, struct cgraph_node *node) ...@@ -1168,8 +1168,8 @@ dump_cgraph_node (FILE *f, struct cgraph_node *node)
fprintf (f, " reachable"); fprintf (f, " reachable");
if (gimple_has_body_p (node->decl)) if (gimple_has_body_p (node->decl))
fprintf (f, " body"); fprintf (f, " body");
if (node->output) if (node->process)
fprintf (f, " output"); fprintf (f, " process");
if (node->local.local) if (node->local.local)
fprintf (f, " local"); fprintf (f, " local");
if (node->local.externally_visible) if (node->local.externally_visible)
......
...@@ -178,8 +178,8 @@ struct cgraph_node GTY((chain_next ("%h.next"), chain_prev ("%h.previous"))) ...@@ -178,8 +178,8 @@ struct cgraph_node GTY((chain_next ("%h.next"), chain_prev ("%h.previous")))
/* Set once the function has been instantiated and its callee /* Set once the function has been instantiated and its callee
lists created. */ lists created. */
unsigned analyzed : 1; unsigned analyzed : 1;
/* Set when function is scheduled to be assembled. */ /* Set when function is scheduled to be processed by local passes. */
unsigned output : 1; unsigned process : 1;
/* Set for aliases once they got through assemble_alias. */ /* Set for aliases once they got through assemble_alias. */
unsigned alias : 1; unsigned alias : 1;
......
...@@ -426,7 +426,7 @@ cgraph_process_new_functions (void) ...@@ -426,7 +426,7 @@ cgraph_process_new_functions (void)
case CGRAPH_STATE_EXPANSION: case CGRAPH_STATE_EXPANSION:
/* Functions created during expansion shall be compiled /* Functions created during expansion shall be compiled
directly. */ directly. */
node->output = 0; node->process = 0;
cgraph_expand_function (node); cgraph_expand_function (node);
break; break;
...@@ -452,12 +452,12 @@ cgraph_process_new_functions (void) ...@@ -452,12 +452,12 @@ cgraph_process_new_functions (void)
static void static void
cgraph_reset_node (struct cgraph_node *node) cgraph_reset_node (struct cgraph_node *node)
{ {
/* If node->output is set, then we have already begun whole-unit analysis. /* If node->process is set, then we have already begun whole-unit analysis.
This is *not* testing for whether we've already emitted the function. This is *not* testing for whether we've already emitted the function.
That case can be sort-of legitimately seen with real function redefinition That case can be sort-of legitimately seen with real function redefinition
errors. I would argue that the front end should never present us with errors. I would argue that the front end should never present us with
such a case, but don't enforce that for now. */ such a case, but don't enforce that for now. */
gcc_assert (!node->output); gcc_assert (!node->process);
/* Reset our data structures so we can analyze the function again. */ /* Reset our data structures so we can analyze the function again. */
memset (&node->local, 0, sizeof (node->local)); memset (&node->local, 0, sizeof (node->local));
...@@ -990,7 +990,7 @@ cgraph_mark_functions_to_output (void) ...@@ -990,7 +990,7 @@ cgraph_mark_functions_to_output (void)
tree decl = node->decl; tree decl = node->decl;
struct cgraph_edge *e; struct cgraph_edge *e;
gcc_assert (!node->output); gcc_assert (!node->process);
for (e = node->callers; e; e = e->next_caller) for (e = node->callers; e; e = e->next_caller)
if (e->inline_failed) if (e->inline_failed)
...@@ -1005,7 +1005,7 @@ cgraph_mark_functions_to_output (void) ...@@ -1005,7 +1005,7 @@ cgraph_mark_functions_to_output (void)
|| (e && node->reachable)) || (e && node->reachable))
&& !TREE_ASM_WRITTEN (decl) && !TREE_ASM_WRITTEN (decl)
&& !DECL_EXTERNAL (decl)) && !DECL_EXTERNAL (decl))
node->output = 1; node->process = 1;
else else
{ {
/* We should've reclaimed all functions that are not needed. */ /* We should've reclaimed all functions that are not needed. */
...@@ -1038,6 +1038,7 @@ cgraph_expand_function (struct cgraph_node *node) ...@@ -1038,6 +1038,7 @@ cgraph_expand_function (struct cgraph_node *node)
gcc_assert (!node->global.inlined_to); gcc_assert (!node->global.inlined_to);
announce_function (decl); announce_function (decl);
node->process = 0;
gcc_assert (node->lowered); gcc_assert (node->lowered);
...@@ -1093,16 +1094,16 @@ cgraph_expand_all_functions (void) ...@@ -1093,16 +1094,16 @@ cgraph_expand_all_functions (void)
/* Garbage collector may remove inline clones we eliminate during /* Garbage collector may remove inline clones we eliminate during
optimization. So we must be sure to not reference them. */ optimization. So we must be sure to not reference them. */
for (i = 0; i < order_pos; i++) for (i = 0; i < order_pos; i++)
if (order[i]->output) if (order[i]->process)
order[new_order_pos++] = order[i]; order[new_order_pos++] = order[i];
for (i = new_order_pos - 1; i >= 0; i--) for (i = new_order_pos - 1; i >= 0; i--)
{ {
node = order[i]; node = order[i];
if (node->output) if (node->process)
{ {
gcc_assert (node->reachable); gcc_assert (node->reachable);
node->output = 0; node->process = 0;
cgraph_expand_function (node); cgraph_expand_function (node);
} }
} }
...@@ -1151,7 +1152,7 @@ cgraph_output_in_order (void) ...@@ -1151,7 +1152,7 @@ cgraph_output_in_order (void)
for (pf = cgraph_nodes; pf; pf = pf->next) for (pf = cgraph_nodes; pf; pf = pf->next)
{ {
if (pf->output) if (pf->process)
{ {
i = pf->order; i = pf->order;
gcc_assert (nodes[i].kind == ORDER_UNDEFINED); gcc_assert (nodes[i].kind == ORDER_UNDEFINED);
...@@ -1191,7 +1192,7 @@ cgraph_output_in_order (void) ...@@ -1191,7 +1192,7 @@ cgraph_output_in_order (void)
switch (nodes[i].kind) switch (nodes[i].kind)
{ {
case ORDER_FUNCTION: case ORDER_FUNCTION:
nodes[i].u.f->output = 0; nodes[i].u.f->process = 0;
cgraph_expand_function (nodes[i].u.f); cgraph_expand_function (nodes[i].u.f);
break; break;
......
...@@ -11319,7 +11319,7 @@ reference_to_unused (tree * tp, int * walk_subtrees, ...@@ -11319,7 +11319,7 @@ reference_to_unused (tree * tp, int * walk_subtrees,
&& (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp))) && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
{ {
struct cgraph_node *node = cgraph_node (*tp); struct cgraph_node *node = cgraph_node (*tp);
if (!node->output) if (node->process || TREE_ASM_WRITTEN (*tp))
return *tp; return *tp;
} }
else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp)) else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
......
...@@ -878,11 +878,14 @@ do_per_function_toporder (void (*callback) (void *data), void *data) ...@@ -878,11 +878,14 @@ do_per_function_toporder (void (*callback) (void *data), void *data)
order = GGC_NEWVEC (struct cgraph_node *, cgraph_n_nodes); order = GGC_NEWVEC (struct cgraph_node *, cgraph_n_nodes);
nnodes = cgraph_postorder (order); nnodes = cgraph_postorder (order);
for (i = nnodes - 1; i >= 0; i--) for (i = nnodes - 1; i >= 0; i--)
order[i]->process = 1;
for (i = nnodes - 1; i >= 0; i--)
{ {
struct cgraph_node *node = order[i]; struct cgraph_node *node = order[i];
/* Allow possibly removed nodes to be garbage collected. */ /* Allow possibly removed nodes to be garbage collected. */
order[i] = NULL; order[i] = NULL;
node->process = 0;
if (node->analyzed && (node->needed || node->reachable)) if (node->analyzed && (node->needed || node->reachable))
{ {
push_cfun (DECL_STRUCT_FUNCTION (node->decl)); push_cfun (DECL_STRUCT_FUNCTION (node->decl));
......
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