loop.c (strength_reduce): When doing biv->giv conversion, fix up reg_biv_class.
authorJ"orn Rennecke <amylaar@cygnus.co.uk>
Thu, 17 Jun 1999 09:32:59 +0000 (09:32 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Thu, 17 Jun 1999 09:32:59 +0000 (10:32 +0100)
* loop.c (strength_reduce): When doing biv->giv conversion, fix up
reg_biv_class.
(recombine_givs): Set ix field after sorting.

From-SVN: r27565

gcc/ChangeLog
gcc/loop.c

index f0608fcd84983cdb26b84f695aa5cdfb52a822b7..ca79f7c6c0adef95ea7a54f45678fa49fdedcd8c 100644 (file)
@@ -1,3 +1,10 @@
+Thu Jun 17 17:22:07 1999  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * loop.c (strength_reduce): When doing biv->giv conversion, fix up
+       reg_biv_class.
+
+       (recombine_givs): Set ix field after sorting.
+
 Thu Jun 17 02:54:30 1999  Jeffrey A Law  (law@cygnus.com)
 
        * emit-rtl.c (operand_subword): Tighten checks for when it is safe
index 90720c4ec15bae24f8536cfa8f0f4df6860081de..6f0637fcf2024cd15daf51319ea7594ceb0e74f3 100644 (file)
@@ -4058,6 +4058,7 @@ strength_reduce (scan_start, end, loop_top, insn_count,
                fprintf (loop_dump_stream, "is giv of biv %d\n", bl2->regno);
              /* Let this giv be discovered by the generic code.  */
              REG_IV_TYPE (bl->regno) = UNKNOWN_INDUCT;
+             reg_biv_class[bl->regno] = NULL_PTR;
              /* We can get better optimization if we can move the giv setting
                 before the first giv use.  */
              if (dominator
@@ -4109,7 +4110,13 @@ strength_reduce (scan_start, end, loop_top, insn_count,
                }
              /* Remove this biv from the chain.  */
              if (bl->next)
-               *bl = *bl->next;
+               {
+                 /* We move the following giv from *bl->next into *bl.
+                    We have to update reg_biv_class for that moved biv
+                    to point to its new address.  */
+                 *bl = *bl->next;
+                 reg_biv_class[bl->regno] = bl;
+               }
              else
                {
                  *backbl = 0;
@@ -7190,16 +7197,18 @@ recombine_givs (bl, loop_start, loop_end, unroll_p)
       for (p = v->insn; INSN_UID (p) >= max_uid_for_loop; )
        p = PREV_INSN (p);
       stats[i].start_luid = INSN_LUID (p);
-      v->ix = i;
       i++;
     }
 
   qsort (stats, giv_count, sizeof(*stats), cmp_recombine_givs_stats);
 
-  /* Do the actual most-recently-used recombination.  */
+  /* Set up the ix field for each giv in stats to name
+     the corresponding index into stats, and
+     do the actual most-recently-used recombination.  */
   for (last_giv = 0, i = giv_count - 1; i >= 0; i--)
     {
       v = giv_array[stats[i].giv_number];
+      v->ix = i;
       if (v->same)
        {
          struct induction *old_same = v->same;