re PR tree-optimization/51775 (FAIL: gnat.dg/pack9.adb scan-tree-dump-not optimized...
authorRichard Guenther <rguenther@suse.de>
Mon, 9 Jan 2012 14:06:31 +0000 (14:06 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 9 Jan 2012 14:06:31 +0000 (14:06 +0000)
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

gcc/ChangeLog
gcc/tree-ssa-pre.c
gcc/tree-ssa-sccvn.c

index 378707ea03f8468319bfbf06b4178bcf78dea55a..1df29212233976490a2c8c6652c462400ec44270 100644 (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>
 
        * config/arm/arm-cores.def (cortex-a15): Use cortex_a15_tune for
index 6e86024917b25ae0e970ac3e76e160586bdae53e..c5d253c941ae69ce3d4b3000726e8339c7adc8ae 100644 (file)
@@ -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);
index 9adf3ecc1ea243a129fd07820e9f8c7df75a51d6..ca11ca1cdfcf3246e76b6acb8a339fb4a18d021e 100644 (file)
@@ -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))
        {