loop.c (check_dbra_loop): New argument loop_info.
authorMichael Hayes <m.hayes@elec.canterbury.ac.nz>
Sun, 6 Dec 1998 04:19:20 +0000 (04:19 +0000)
committerJeff Law <law@gcc.gnu.org>
Sun, 6 Dec 1998 04:19:20 +0000 (21:19 -0700)
        * loop.c (check_dbra_loop): New argument loop_info.  Update fields
        as needed.

From-SVN: r24131

gcc/ChangeLog
gcc/loop.c

index 4963d59e06441e7c95b9d16e1b8183fc10733578..ac6594f34f02da210bf1186f0f17b259c1f95595 100644 (file)
@@ -1,3 +1,8 @@
+Sun Dec  6 05:16:16 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>
+
+       * loop.c (check_dbra_loop): New argument loop_info.  Update fields
+       as needed.
+
 Sun Dec 6 03:40:13 PST 1998 Jeff Law  (law@cygnus.com)
 
        * version.c: Bump for snapshot.
index 1d0e08d59f5b7b780065a4005397921014537af6..959c4e6698423ca8b1d8d5ea9691bc823b5ba3c0 100644 (file)
@@ -312,7 +312,7 @@ static int basic_induction_var PROTO((rtx, enum machine_mode, rtx, rtx, rtx *, r
 static rtx simplify_giv_expr PROTO((rtx, int *));
 static int general_induction_var PROTO((rtx, rtx *, rtx *, rtx *, int, int *));
 static int consec_sets_giv PROTO((int, rtx, rtx, rtx, rtx *, rtx *));
-static int check_dbra_loop PROTO((rtx, int, rtx));
+static int check_dbra_loop PROTO((rtx, int, rtx, struct loop_info *));
 static rtx express_from_1 PROTO((rtx, rtx, rtx));
 static rtx express_from PROTO((struct induction *, struct induction *));
 static rtx combine_givs_p PROTO((struct induction *, struct induction *));
@@ -4041,7 +4041,7 @@ strength_reduce (scan_start, end, loop_top, insn_count,
   /* Try to prove that the loop counter variable (if any) is always
      nonnegative; if so, record that fact with a REG_NONNEG note
      so that "decrement and branch until zero" insn can be used.  */
-  check_dbra_loop (loop_end, insn_count, loop_start);
+  check_dbra_loop (loop_end, insn_count, loop_start, loop_info);
 
   /* Create reg_map to hold substitutions for replaceable giv regs.  */
   reg_map = (rtx *) alloca (max_reg_before_loop * sizeof (rtx));
@@ -6634,10 +6634,11 @@ product_cheap_p (a, b)
    final_[bg]iv_value.  */
 
 static int
-check_dbra_loop (loop_end, insn_count, loop_start)
+check_dbra_loop (loop_end, insn_count, loop_start, loop_info)
      rtx loop_end;
      int insn_count;
      rtx loop_start;
+     struct loop_info *loop_info;
 {
   struct iv_class *bl;
   rtx reg;
@@ -7065,6 +7066,15 @@ check_dbra_loop (loop_end, insn_count, loop_start)
              bl->initial_value = start_value;
              bl->biv->add_val = new_add_val;
 
+             /* Update loop info.  */
+             loop_info->initial_value = bl->initial_value;
+             loop_info->initial_equiv_value = bl->initial_value;
+             loop_info->final_value = const0_rtx;
+             loop_info->final_equiv_value = const0_rtx;
+             loop_info->comparison_value = const0_rtx;
+             loop_info->comparison_code = cmp_code;
+             loop_info->increment = new_add_val;
+
              /* Inc LABEL_NUSES so that delete_insn will
                 not delete the label.  */
              LABEL_NUSES (XEXP (jump_label, 0)) ++;