* loop.c (loop_ivs_free): New function.
(strength_reduce): Break out from...
From-SVN: r38583
2001-01-01 Michael Hayes <mhayes@redhat.com>
2001-01-01 Michael Hayes <mhayes@redhat.com>
+ * loop.c (loop_ivs_free): New function.
+ (strength_reduce): Break out from...
+
+2001-01-01 Michael Hayes <mhayes@redhat.com>
+
* loop.h (struct iv): New.
(REG_IV_TYPE, REG_IV_CLASS, REG_INFO): Modify to use 'struct iv'.
(struct loop_ivs): Replace 'reg_iv_type', 'reg_iv_info',
* loop.h (struct iv): New.
(REG_IV_TYPE, REG_IV_CLASS, REG_INFO): Modify to use 'struct iv'.
(struct loop_ivs): Replace 'reg_iv_type', 'reg_iv_info',
static void loop_givs_reduce PARAMS((struct loop *, struct iv_class *));
static void loop_givs_rescan PARAMS((struct loop *, struct iv_class *,
rtx *, rtx));
static void loop_givs_reduce PARAMS((struct loop *, struct iv_class *));
static void loop_givs_rescan PARAMS((struct loop *, struct iv_class *,
rtx *, rtx));
+static void loop_ivs_free PARAMS((struct loop *));
static void strength_reduce PARAMS ((struct loop *, int, int));
static void find_single_use_in_loop PARAMS ((rtx, rtx, varray_type));
static int valid_initial_value_p PARAMS ((rtx, rtx, int, rtx));
static void strength_reduce PARAMS ((struct loop *, int, int));
static void find_single_use_in_loop PARAMS ((rtx, rtx, varray_type));
static int valid_initial_value_p PARAMS ((rtx, rtx, int, rtx));
+/* Free IV structures for LOOP. */
+
+static void
+loop_ivs_free (loop)
+ struct loop *loop;
+{
+ struct loop_ivs *ivs = LOOP_IVS (loop);
+ struct iv_class *iv = ivs->list;
+
+ free (ivs->regs);
+
+ while (iv)
+ {
+ struct iv_class *next = iv->next;
+ struct induction *induction;
+ struct induction *next_induction;
+
+ for (induction = iv->biv; induction; induction = next_induction)
+ {
+ next_induction = induction->next_iv;
+ free (induction);
+ }
+ for (induction = iv->giv; induction; induction = next_induction)
+ {
+ next_induction = induction->next_iv;
+ free (induction);
+ }
+
+ free (iv);
+ iv = next;
+ }
+}
+
+
/* Perform strength reduction and induction variable elimination.
Pseudo registers created during this function will be beyond the
/* Perform strength reduction and induction variable elimination.
Pseudo registers created during this function will be beyond the
if (flags & LOOP_UNROLL)
unroll_loop (loop, insn_count, end_insert_before, 0);
if (flags & LOOP_UNROLL)
unroll_loop (loop, insn_count, end_insert_before, 0);
+ loop_ivs_free (loop);
+ return;
}
/* Determine how BIVS are initialised by looking through pre-header
}
/* Determine how BIVS are initialised by looking through pre-header
if (loop_dump_stream)
fprintf (loop_dump_stream, "\n");
if (loop_dump_stream)
fprintf (loop_dump_stream, "\n");
-egress:
- free (ivs->regs);
- {
- struct iv_class *iv = ivs->list;
-
- while (iv) {
- struct iv_class *next = iv->next;
- struct induction *induction;
- struct induction *next_induction;
-
- for (induction = iv->biv; induction; induction = next_induction)
- {
- next_induction = induction->next_iv;
- free (induction);
- }
- for (induction = iv->giv; induction; induction = next_induction)
- {
- next_induction = induction->next_iv;
- free (induction);
- }
-
- free (iv);
- iv = next;
- }
- }
if (reg_map)
free (reg_map);
}
if (reg_map)
free (reg_map);
}