re PR tree-optimization/51775 (FAIL: gnat.dg/pack9.adb scan-tree-dump-not optimized "gnat_rcheck")

2012-01-09  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/51775
	* tree-ssa-sccvn.c (visit_use): Value-number throwing stmts.
	* tree-ssa-pre.c (eliminate): Properly fixup EH info.

From-SVN: r183012
This commit is contained in:
Richard Guenther 2012-01-09 14:06:31 +00:00 committed by Richard Biener
parent 12aa62e921
commit 0646822981
3 changed files with 19 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2012-01-09 Richard Guenther <rguenther@suse.de>
PR tree-optimization/51775
* tree-ssa-sccvn.c (visit_use): Value-number throwing stmts.
* tree-ssa-pre.c (eliminate): Properly fixup EH info.
2012-01-09 Matthew Gretton-Dann <matthew.gretton-dann@arm.com> 2012-01-09 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
* config/arm/arm-cores.def (cortex-a15): Use cortex_a15_tune for * config/arm/arm-cores.def (cortex-a15): Use cortex_a15_tune for

View File

@ -4194,6 +4194,7 @@ eliminate (void)
tree sprime = NULL; tree sprime = NULL;
pre_expr lhsexpr = get_or_alloc_expr_for_name (lhs); pre_expr lhsexpr = get_or_alloc_expr_for_name (lhs);
pre_expr sprimeexpr; pre_expr sprimeexpr;
gimple orig_stmt = stmt;
sprimeexpr = bitmap_find_leader (AVAIL_OUT (b), sprimeexpr = bitmap_find_leader (AVAIL_OUT (b),
get_expr_value_id (lhsexpr), get_expr_value_id (lhsexpr),
@ -4231,6 +4232,16 @@ eliminate (void)
propagate_tree_value_into_stmt (&gsi, sprime); propagate_tree_value_into_stmt (&gsi, sprime);
stmt = gsi_stmt (gsi); stmt = gsi_stmt (gsi);
update_stmt (stmt); update_stmt (stmt);
/* If we removed EH side-effects from the statement, clean
its EH information. */
if (maybe_clean_or_replace_eh_stmt (orig_stmt, stmt))
{
bitmap_set_bit (need_eh_cleanup,
gimple_bb (stmt)->index);
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, " Removed EH side-effects.\n");
}
continue; continue;
} }
@ -4286,7 +4297,7 @@ eliminate (void)
/* If we removed EH side-effects from the statement, clean /* If we removed EH side-effects from the statement, clean
its EH information. */ its EH information. */
if (maybe_clean_or_replace_eh_stmt (stmt, stmt)) if (maybe_clean_or_replace_eh_stmt (orig_stmt, stmt))
{ {
bitmap_set_bit (need_eh_cleanup, bitmap_set_bit (need_eh_cleanup,
gimple_bb (stmt)->index); gimple_bb (stmt)->index);

View File

@ -3178,8 +3178,7 @@ visit_use (tree use)
if (gimple_code (stmt) == GIMPLE_PHI) if (gimple_code (stmt) == GIMPLE_PHI)
changed = visit_phi (stmt); changed = visit_phi (stmt);
else if (!gimple_has_lhs (stmt) else if (!gimple_has_lhs (stmt)
|| gimple_has_volatile_ops (stmt) || gimple_has_volatile_ops (stmt))
|| stmt_could_throw_p (stmt))
changed = defs_to_varying (stmt); changed = defs_to_varying (stmt);
else if (is_gimple_assign (stmt)) else if (is_gimple_assign (stmt))
{ {