re PR bootstrap/53197 (bootstrap comparison failure)
authorMichael Matz <matz@suse.de>
Thu, 3 May 2012 02:32:08 +0000 (02:32 +0000)
committerMichael Matz <matz@gcc.gnu.org>
Thu, 3 May 2012 02:32:08 +0000 (02:32 +0000)
PR bootstrap/53197
* tree-ssa-dse.c (dse_optimize_stmt): Take pointer to
iterator.
(dse_enter_block): Properly iterate the whole sequence even
if the last statement was removed.

From-SVN: r187074

gcc/ChangeLog
gcc/tree-ssa-dse.c

index a72cd97dc795bf4449ac381b2473947dd64ba95a..d34288455bbf5f748d3c571fc5e4b5d9b839bd85 100644 (file)
@@ -1,3 +1,11 @@
+2012-05-03  Michael Matz  <matz@suse.de>
+
+       PR bootstrap/53197
+       * tree-ssa-dse.c (dse_optimize_stmt): Take pointer to
+       iterator.
+       (dse_enter_block): Properly iterate the whole sequence even
+       if the last statement was removed.
+
 2012-05-02  Steven Bosscher  <steven@gcc.gnu.org>
 
        * config/alpha/vms.h (SUBTARGET_OVERRIDE_OPTIONS): For pic code,
index bf4458065e99cadeff2890953c55c809d0ba9098..5fdba8c543be164657936cd84e7fb12d74221e42 100644 (file)
@@ -199,9 +199,9 @@ dse_possible_dead_store_p (gimple stmt, gimple *use_stmt)
    post dominates the first store, then the first store is dead.  */
 
 static void
-dse_optimize_stmt (gimple_stmt_iterator gsi)
+dse_optimize_stmt (gimple_stmt_iterator *gsi)
 {
-  gimple stmt = gsi_stmt (gsi);
+  gimple stmt = gsi_stmt (*gsi);
 
   /* If this statement has no virtual defs, then there is nothing
      to do.  */
@@ -252,7 +252,7 @@ dse_optimize_stmt (gimple_stmt_iterator gsi)
          if (dump_file && (dump_flags & TDF_DETAILS))
             {
               fprintf (dump_file, "  Deleted dead store '");
-              print_gimple_stmt (dump_file, gsi_stmt (gsi), dump_flags, 0);
+              print_gimple_stmt (dump_file, gsi_stmt (*gsi), dump_flags, 0);
               fprintf (dump_file, "'\n");
             }
 
@@ -261,7 +261,7 @@ dse_optimize_stmt (gimple_stmt_iterator gsi)
 
          /* Remove the dead store.  */
          bb = gimple_bb (stmt);
-         if (gsi_remove (&gsi, true))
+         if (gsi_remove (gsi, true))
            bitmap_set_bit (need_eh_cleanup, bb->index);
 
          /* And release any SSA_NAMEs set in this statement back to the
@@ -277,8 +277,14 @@ dse_enter_block (struct dom_walk_data *walk_data ATTRIBUTE_UNUSED,
 {
   gimple_stmt_iterator gsi;
 
-  for (gsi = gsi_last_bb (bb); !gsi_end_p (gsi); gsi_prev (&gsi))
-    dse_optimize_stmt (gsi);
+  for (gsi = gsi_last_bb (bb); !gsi_end_p (gsi);)
+    {
+      dse_optimize_stmt (&gsi);
+      if (gsi_end_p (gsi))
+       gsi = gsi_last_bb (bb);
+      else
+       gsi_prev (&gsi);
+    }
 }
 
 /* Main entry point.  */