From 0646822981305e0ffc3f8e0aadc4dfd0bc098330 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Mon, 9 Jan 2012 14:06:31 +0000 Subject: [PATCH] re PR tree-optimization/51775 (FAIL: gnat.dg/pack9.adb scan-tree-dump-not optimized "gnat_rcheck") 2012-01-09 Richard Guenther 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 --- gcc/ChangeLog | 6 ++++++ gcc/tree-ssa-pre.c | 13 ++++++++++++- gcc/tree-ssa-sccvn.c | 3 +-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 378707e..1df2921 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-01-09 Richard Guenther + + 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 * config/arm/arm-cores.def (cortex-a15): Use cortex_a15_tune for diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 6e86024..c5d253c 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -4194,6 +4194,7 @@ eliminate (void) tree sprime = NULL; pre_expr lhsexpr = get_or_alloc_expr_for_name (lhs); pre_expr sprimeexpr; + gimple orig_stmt = stmt; sprimeexpr = bitmap_find_leader (AVAIL_OUT (b), get_expr_value_id (lhsexpr), @@ -4231,6 +4232,16 @@ eliminate (void) propagate_tree_value_into_stmt (&gsi, sprime); stmt = gsi_stmt (gsi); 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; } @@ -4286,7 +4297,7 @@ eliminate (void) /* If we removed EH side-effects from the statement, clean 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, gimple_bb (stmt)->index); diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index 9adf3ec..ca11ca1 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -3178,8 +3178,7 @@ visit_use (tree use) if (gimple_code (stmt) == GIMPLE_PHI) changed = visit_phi (stmt); else if (!gimple_has_lhs (stmt) - || gimple_has_volatile_ops (stmt) - || stmt_could_throw_p (stmt)) + || gimple_has_volatile_ops (stmt)) changed = defs_to_varying (stmt); else if (is_gimple_assign (stmt)) { -- 2.7.4