From 5629b16c018a9d6fec937f506f577c691a62fc44 Mon Sep 17 00:00:00 2001 From: Michael Hayes Date: Sun, 6 Dec 1998 04:19:20 +0000 Subject: [PATCH] loop.c (check_dbra_loop): New argument loop_info. * loop.c (check_dbra_loop): New argument loop_info. Update fields as needed. From-SVN: r24131 --- gcc/ChangeLog | 5 +++++ gcc/loop.c | 16 +++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4963d59e064..ac6594f34f0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Sun Dec 6 05:16:16 1998 Michael Hayes + + * 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. diff --git a/gcc/loop.c b/gcc/loop.c index 1d0e08d59f5..959c4e66984 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -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)) ++;