aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2012-01-09 14:06:31 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2012-01-09 14:06:31 +0000
commit0646822981305e0ffc3f8e0aadc4dfd0bc098330 (patch)
tree08b0129c03278f0e05ec4fa8bd1ed08aa3472e1b /gcc
parent12aa62e921a3a26ab78b3be5ff10269c3e856288 (diff)
downloadgcc-0646822981305e0ffc3f8e0aadc4dfd0bc098330.zip
gcc-0646822981305e0ffc3f8e0aadc4dfd0bc098330.tar.gz
gcc-0646822981305e0ffc3f8e0aadc4dfd0bc098330.tar.bz2
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')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-ssa-pre.c13
-rw-r--r--gcc/tree-ssa-sccvn.c3
3 files changed, 19 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 378707ea..1df2921 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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>
* 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))
{