loop.c (check_dbra_loop): Fix calculation of FINAL_VALUE when COMPARISON_VAL was...
authorJ"orn Rennecke <amylaar@cygnus.co.uk>
Fri, 28 Aug 1998 07:05:20 +0000 (07:05 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Fri, 28 Aug 1998 07:05:20 +0000 (08:05 +0100)
* loop.c (check_dbra_loop): Fix calculation of FINAL_VALUE when
COMPARISON_VAL was normalized.

From-SVN: r22051

gcc/ChangeLog
gcc/loop.c

index ae5ef3d301a239dcfbd7ec085b64827403e28f85..9341194a3c26ae9a605e39e640c9276f3658e6c1 100644 (file)
@@ -1,3 +1,8 @@
+Fri Aug 28 14:54:07 1998  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * loop.c (check_dbra_loop): Fix calculation of FINAL_VALUE when
+       COMPARISON_VAL was normalized.
+
 Thu Aug 27 20:10:46 1998  Jeffrey A Law  (law@cygnus.com)
 
        * loop.c (check_dbra_loop): The loop ending comparison value
index cd257be9c352c09c31a5cea7638e44fc884fe959..e581f44d7cad7379c3cbde77c1bf184145393046 100644 (file)
@@ -7004,11 +7004,18 @@ check_dbra_loop (loop_end, insn_count, loop_start)
                    return 0;
                }
 
+             final_value = comparison_value;
+
              /* Reset these in case we normalized the initial value
                 and comparison value above.  */
+             if (GET_CODE (comparison_value) == CONST_INT
+                 && GET_CODE (initial_value) == CONST_INT)
+               {
+                 comparison_value = GEN_INT (comparison_val);
+                 final_value
+                   = GEN_INT (comparison_val + INTVAL (bl->initial_value));
+               }
              bl->initial_value = initial_value;
-             if (GET_CODE (comparison_value) == CONST_INT)
-               comparison_value = GEN_INT (comparison_val);
 
              /* Save some info needed to produce the new insns.  */
              reg = bl->biv->dest_reg;
@@ -7017,7 +7024,6 @@ check_dbra_loop (loop_end, insn_count, loop_start)
                jump_label = XEXP (SET_SRC (PATTERN (PREV_INSN (loop_end))), 2);
              new_add_val = GEN_INT (- INTVAL (bl->biv->add_val));
 
-             final_value = comparison_value;
              /* Set start_value; if this is not a CONST_INT, we need
                 to generate a SUB.
                 Initialize biv to start_value before loop start.