]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
loop.c (check_final_value): Use v->always_executed instead of v->always_computable.
authorEric Botcazou <ebotcazou@multimania.com>
Sat, 15 Jun 2002 01:12:06 +0000 (01:12 +0000)
committerRichard Henderson <rth@gcc.gnu.org>
Sat, 15 Jun 2002 01:12:06 +0000 (18:12 -0700)
* loop.c (check_final_value): Use v->always_executed
instead of v->always_computable.
* unroll.c (final_giv_value): Don't calculate the final
value as a function of the biv if the giv is not computed
for every loop iteration.

From-SVN: r54635

gcc/ChangeLog
gcc/loop.c
gcc/unroll.c

index 4ea5b89f7cb318a9098d611df49440e7838a8061..a7a67e26ffb92e73572a0cd2679cc9f59e721d9d 100644 (file)
@@ -1,3 +1,11 @@
+2002-06-14  Eric Botcazou  <ebotcazou@multimania.com>
+
+       * loop.c (check_final_value): Use v->always_executed
+       instead of v->always_computable.
+       * unroll.c (final_giv_value): Don't calculate the final
+       value as a function of the biv if the giv is not computed
+       for every loop iteration.
+
 2002-06-14  Eric Botcazou  <ebotcazou@multimania.com>
 
        PR c/6677
index a913574b16c13e9d083fbf636229223ecf37cc53..4045cedb47a74acb1ddbcf9e1300986edec17a66 100644 (file)
@@ -5851,7 +5851,7 @@ check_final_value (loop, v)
 #endif
 
   if ((final_value = final_giv_value (loop, v))
-      && (v->always_computable || last_use_this_basic_block (v->dest_reg, v->insn)))
+      && (v->always_executed || last_use_this_basic_block (v->dest_reg, v->insn)))
     {
       int biv_increment_seen = 0, before_giv_insn = 0;
       rtx p = v->insn;
index 6936a710244f21cee362afe0054b29479fe61df0..6be951e279223b385fd7a8b7a24c3b09d44236cb 100644 (file)
@@ -3305,7 +3305,8 @@ final_giv_value (loop, v)
 
   /* Try to calculate the final value as a function of the biv it depends
      upon.  The only exit from the loop must be the fall through at the bottom
-     (otherwise it may not have its final value when the loop exits).  */
+     and the insn that sets the giv must be executed on every iteration
+     (otherwise the giv may not have its final value when the loop exits).  */
 
   /* ??? Can calculate the final giv value by subtracting off the
      extra biv increments times the giv's mult_val.  The loop must have
@@ -3313,7 +3314,8 @@ final_giv_value (loop, v)
      to be known.  */
 
   if (n_iterations != 0
-      && ! loop->exit_count)
+      && ! loop->exit_count
+      && v->always_executed)
     {
       /* ?? It is tempting to use the biv's value here since these insns will
         be put after the loop, and hence the biv will have its final value