diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b37d58baecf..d323a62e80e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-04-08 Richard Guenther + + * gimple.c (gimple_set_modified): Do not queue calls to + MODIFIED_NORETURN_CALLS here ... + * tree-ssa-operands.c (update_stmt_operands): ... but here. + 2011-04-08 Richard Guenther PR lto/48467 diff --git a/gcc/gimple.c b/gcc/gimple.c index 4675d14193e..3183711b96f 100644 --- a/gcc/gimple.c +++ b/gcc/gimple.c @@ -2254,15 +2254,7 @@ void gimple_set_modified (gimple s, bool modifiedp) { if (gimple_has_ops (s)) - { - s->gsbase.modified = (unsigned) modifiedp; - - if (modifiedp - && cfun->gimple_df - && is_gimple_call (s) - && gimple_call_noreturn_p (s)) - VEC_safe_push (gimple, gc, MODIFIED_NORETURN_CALLS (cfun), s); - } + s->gsbase.modified = (unsigned) modifiedp; } diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c index 7e2600d6e6d..57f443fe2bc 100644 --- a/gcc/tree-ssa-operands.c +++ b/gcc/tree-ssa-operands.c @@ -1134,6 +1134,12 @@ update_stmt_operands (gimple stmt) timevar_push (TV_TREE_OPS); + /* If the stmt is a noreturn call queue it to be processed by + split_bbs_on_noreturn_calls during cfg cleanup. */ + if (is_gimple_call (stmt) + && gimple_call_noreturn_p (stmt)) + VEC_safe_push (gimple, gc, MODIFIED_NORETURN_CALLS (cfun), stmt); + gcc_assert (gimple_modified_p (stmt)); build_ssa_operands (stmt); gimple_set_modified (stmt, false);