diff options
author | Richard Guenther <rguenther@suse.de> | 2012-01-09 14:06:31 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2012-01-09 14:06:31 +0000 |
commit | 0646822981305e0ffc3f8e0aadc4dfd0bc098330 (patch) | |
tree | 08b0129c03278f0e05ec4fa8bd1ed08aa3472e1b /gcc/tree-ssa-pre.c | |
parent | 12aa62e921a3a26ab78b3be5ff10269c3e856288 (diff) | |
download | gcc-0646822981305e0ffc3f8e0aadc4dfd0bc098330.tar.gz |
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
Diffstat (limited to 'gcc/tree-ssa-pre.c')
-rw-r--r-- | gcc/tree-ssa-pre.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 6e86024917b..c5d253c941a 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); |