Commit b6fa5b01 by Jan Hubicka Committed by Jan Hubicka

cgraph.c (cgraph_create_edge, [...]): Set proper cfun.

	* cgraph.c (cgraph_create_edge, cgraph_set_call_stmt): Set proper cfun.
	(dump_cgraph_node): Dump can throw external flag.
	* ipa-pure-const.c (propagate): Fix propagation of nothrow flags.

From-SVN: r146349
parent 9b074dc6
2009-04-19 Jan Hubicka <jh@suse.cz>
* cgraph.c (cgraph_create_edge, cgraph_set_call_stmt): Set proper cfun.
(dump_cgraph_node): Dump can throw external flag.
* ipa-pure-const.c (propagate): Fix propagation of nothrow flags.
2009-04-19 Manuel López-Ibáñez <manu@gcc.gnu.org> 2009-04-19 Manuel López-Ibáñez <manu@gcc.gnu.org>
PR c/32061 PR c/32061
......
...@@ -640,7 +640,9 @@ cgraph_set_call_stmt (struct cgraph_edge *e, gimple new_stmt) ...@@ -640,7 +640,9 @@ cgraph_set_call_stmt (struct cgraph_edge *e, gimple new_stmt)
htab_hash_pointer (e->call_stmt)); htab_hash_pointer (e->call_stmt));
} }
e->call_stmt = new_stmt; e->call_stmt = new_stmt;
push_cfun (DECL_STRUCT_FUNCTION (e->caller->decl));
e->can_throw_external = stmt_can_throw_external (new_stmt); e->can_throw_external = stmt_can_throw_external (new_stmt);
pop_cfun ();
if (e->caller->call_site_hash) if (e->caller->call_site_hash)
{ {
void **slot; void **slot;
...@@ -705,7 +707,9 @@ cgraph_create_edge (struct cgraph_node *caller, struct cgraph_node *callee, ...@@ -705,7 +707,9 @@ cgraph_create_edge (struct cgraph_node *caller, struct cgraph_node *callee,
edge->caller = caller; edge->caller = caller;
edge->callee = callee; edge->callee = callee;
edge->call_stmt = call_stmt; edge->call_stmt = call_stmt;
push_cfun (DECL_STRUCT_FUNCTION (caller->decl));
edge->can_throw_external = stmt_can_throw_external (call_stmt); edge->can_throw_external = stmt_can_throw_external (call_stmt);
pop_cfun ();
edge->prev_caller = NULL; edge->prev_caller = NULL;
edge->next_caller = callee->callers; edge->next_caller = callee->callers;
if (callee->callers) if (callee->callers)
...@@ -1238,6 +1242,8 @@ dump_cgraph_node (FILE *f, struct cgraph_node *node) ...@@ -1238,6 +1242,8 @@ dump_cgraph_node (FILE *f, struct cgraph_node *node)
edge->frequency / (double)CGRAPH_FREQ_BASE); edge->frequency / (double)CGRAPH_FREQ_BASE);
if (edge->loop_nest) if (edge->loop_nest)
fprintf (f, "(nested in %i loops) ", edge->loop_nest); fprintf (f, "(nested in %i loops) ", edge->loop_nest);
if (edge->can_throw_external)
fprintf(f, "(can throw external) ");
} }
fprintf (f, "\n"); fprintf (f, "\n");
} }
......
...@@ -830,6 +830,7 @@ propagate (void) ...@@ -830,6 +830,7 @@ propagate (void)
w = node; w = node;
while (w) while (w)
{ {
funct_state w_l = get_function_state (w);
if (!can_throw && !TREE_NOTHROW (w->decl)) if (!can_throw && !TREE_NOTHROW (w->decl))
{ {
struct cgraph_edge *e; struct cgraph_edge *e;
...@@ -840,6 +841,8 @@ propagate (void) ...@@ -840,6 +841,8 @@ propagate (void)
fprintf (dump_file, "Function found to be nothrow: %s\n", fprintf (dump_file, "Function found to be nothrow: %s\n",
cgraph_node_name (w)); cgraph_node_name (w));
} }
else if (can_throw && !TREE_NOTHROW (w->decl))
w_l->can_throw = true;
w_info = (struct ipa_dfs_info *) w->aux; w_info = (struct ipa_dfs_info *) w->aux;
w = w_info->next_cycle; w = w_info->next_cycle;
} }
......
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