tree-ssa-propagate.c (substitute_and_fold): Use do_dce flag to deside...
authorKai Tietz <ktietz@redhat.com>
Thu, 21 Jul 2011 09:42:04 +0000 (11:42 +0200)
committerKai Tietz <ktietz@gcc.gnu.org>
Thu, 21 Jul 2011 09:42:04 +0000 (11:42 +0200)
2011-07-21  Kai Tietz  <ktietz@redhat.com>

* tree-ssa-propagate.c (substitute_and_fold): Use
do_dce flag to deside, if BB's statements are scanned
in last to first, or first to last order.

From-SVN: r176556

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

index fa19176659c629cf1d4f237ec4cfec27d8716b2c..2f3578696b9a64c395e2b72749cada25b68220fa 100644 (file)
@@ -1,3 +1,9 @@
+2011-07-21  Kai Tietz  <ktietz@redhat.com>
+
+       * tree-ssa-propagate.c (substitute_and_fold): Use
+       do_dce flag to deside, if BB's statements are scanned
+       in last to first, or first to last order.
+
 2011-07-21  Georg-Johann Lay  <avr@gjlay.de>
        
        * config/avr/avr.c (avr_rtx_costs): Set cost of CONST, LABEL_REF to 0.
index 64c3fdfe5704f16cdb662f994cc511b76298ff28..7741db886866f396caa634ad75324ac23aba9b1e 100644 (file)
@@ -966,6 +966,9 @@ replace_phi_args_in (gimple phi, ssa_prop_get_value_fn get_value)
 
    DO_DCE is true if trivially dead stmts can be removed.
 
+   If DO_DCE is true, the statements within a BB are walked from
+   last to first element.  Otherwise we scan from first to last element.
+
    Return TRUE when something changed.  */
 
 bool
@@ -1046,9 +1049,10 @@ substitute_and_fold (ssa_prop_get_value_fn get_value_fn,
        for (i = gsi_start_phis (bb); !gsi_end_p (i); gsi_next (&i))
          replace_phi_args_in (gsi_stmt (i), get_value_fn);
 
-      /* Propagate known values into stmts.  Do a backward walk to expose
-        more trivially deletable stmts.  */
-      for (i = gsi_last_bb (bb); !gsi_end_p (i);)
+      /* Propagate known values into stmts.  Do a backward walk if
+         do_dce is true. In some case it exposes
+        more trivially deletable stmts to walk backward.  */
+      for (i = (do_dce ? gsi_last_bb (bb) : gsi_start_bb (bb)); !gsi_end_p (i);)
        {
           bool did_replace;
          gimple stmt = gsi_stmt (i);
@@ -1057,7 +1061,10 @@ substitute_and_fold (ssa_prop_get_value_fn get_value_fn,
          gimple_stmt_iterator oldi;
 
          oldi = i;
-         gsi_prev (&i);
+         if (do_dce)
+           gsi_prev (&i);
+         else
+           gsi_next (&i);
 
          /* Ignore ASSERT_EXPRs.  They are used by VRP to generate
             range information for names and they are discarded