OSDN Git Service

* unroll.c (loop_iterations): If we cannot prove iteration variable
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 13 Jan 2001 21:54:10 +0000 (21:54 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 13 Jan 2001 21:54:10 +0000 (21:54 +0000)
is set once in each iteration, punt.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@38996 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/unroll.c

index cea3dc8..d775e76 100644 (file)
@@ -1,3 +1,8 @@
+2001-01-13  Jakub Jelinek  <jakub@redhat.com>
+
+       * unroll.c (loop_iterations): If we cannot prove iteration variable
+       is set once in each iteration, punt.
+
 Sun Jan 14 00:23:15 2001  Denis Chertykov  <denisc@overta.ru>
 
        * config/avr/avr.md ("strlenhi"): Remove clobber of input address.
index 11be66d..9289595 100644 (file)
@@ -3577,6 +3577,13 @@ loop_iterations (loop)
       /* Grab initial value, only useful if it is a constant.  */
       bl = REG_IV_CLASS (ivs, REGNO (iteration_var));
       initial_value = bl->initial_value;
+      if (!bl->biv->always_executed || bl->biv->maybe_multiple)
+       {
+         if (loop_dump_stream)
+           fprintf (loop_dump_stream,
+                    "Loop iterations: Basic induction var not set once in each iteration.\n");
+         return 0;
+       }
 
       increment = biv_total_increment (bl);
     }
@@ -3589,6 +3596,14 @@ loop_iterations (loop)
       if (REGNO (v->src_reg) >= ivs->n_regs)
        abort ();
 
+      if (!v->always_executed || v->maybe_multiple)
+       {
+         if (loop_dump_stream)
+           fprintf (loop_dump_stream,
+                    "Loop iterations: General induction var not set once in each iteration.\n");
+         return 0;
+       }
+
       bl = REG_IV_CLASS (ivs, REGNO (v->src_reg));
 
       /* Increment value is mult_val times the increment value of the biv.  */