[patch] loop-invariant.c: Use VEC instead of VARRAY.
Zdenek Dvorak
rakdver@atrey.karlin.mff.cuni.cz
Sat Apr 30 08:53:00 GMT 2005
Hello,
> Attached is a patch to use VEC instead of VARRAY.
>
> Zdenek, Diego has preapproved this kind of patch, but are you (or
> anyone working in this area) OK with this?
OK, thanks.
Zdenek
> Tested on i686-pc-linux-gnu.
>
> Kazu Hirata
>
> 2005-04-30 Kazu Hirata <kazu@cs.umass.edu>
>
> * loop-invariant.c (invariants, create_new_invariant,
> get_inv_cost, best_gain_for_invariant,
> find_invariants_to_move, move_invariants,
> init_inv_motion_data, free_inv_motion_data): Use VEC instead
> of VARRAY.
>
> Index: loop-invariant.c
> ===================================================================
> RCS file: /cvs/gcc/gcc/gcc/loop-invariant.c,v
> retrieving revision 2.13
> diff -u -d -p -r2.13 loop-invariant.c
> --- loop-invariant.c 28 Apr 2005 05:03:07 -0000 2.13
> +++ loop-invariant.c 29 Apr 2005 14:10:44 -0000
> @@ -118,9 +118,14 @@ struct invariant
>
> static unsigned actual_stamp;
>
> +typedef struct invariant *invariant_p;
> +
> +DEF_VEC_P(invariant_p);
> +DEF_VEC_ALLOC_P(invariant_p, heap);
> +
> /* The invariants. */
>
> -static varray_type invariants;
> +static VEC(invariant_p,heap) *invariants;
>
> /* Test for possibility of invariantness of X. */
>
> @@ -332,10 +337,10 @@ create_new_invariant (struct def *def, r
> inv->stamp = 0;
> inv->insn = insn;
>
> - inv->invno = VARRAY_ACTIVE_SIZE (invariants);
> + inv->invno = VEC_length (invariant_p, invariants);
> if (def)
> def->invno = inv->invno;
> - VARRAY_PUSH_GENERIC_PTR_NOGC (invariants, inv);
> + VEC_safe_push (invariant_p, heap, invariants, inv);
>
> if (dump_file)
> {
> @@ -614,7 +619,7 @@ get_inv_cost (struct invariant *inv, int
>
> EXECUTE_IF_SET_IN_BITMAP (inv->depends_on, 0, depno, bi)
> {
> - dep = VARRAY_GENERIC_PTR_NOGC (invariants, depno);
> + dep = VEC_index (invariant_p, invariants, depno);
>
> get_inv_cost (dep, &acomp_cost, &aregs_needed);
>
> @@ -673,9 +678,8 @@ best_gain_for_invariant (struct invarian
> int gain = 0, again;
> unsigned aregs_needed, invno;
>
> - for (invno = 0; invno < VARRAY_ACTIVE_SIZE (invariants); invno++)
> + for (invno = 0; VEC_iterate (invariant_p, invariants, invno, inv); invno++)
> {
> - inv = VARRAY_GENERIC_PTR_NOGC (invariants, invno);
> if (inv->move)
> continue;
>
> @@ -697,7 +701,7 @@ best_gain_for_invariant (struct invarian
> static void
> set_move_mark (unsigned invno)
> {
> - struct invariant *inv = VARRAY_GENERIC_PTR_NOGC (invariants, invno);
> + struct invariant *inv = VEC_index (invariant_p, invariants, invno);
> bitmap_iterator bi;
>
> if (inv->move)
> @@ -721,7 +725,7 @@ find_invariants_to_move (struct df *df)
> unsigned i, regs_used, n_inv_uses, regs_needed = 0, new_regs;
> struct invariant *inv = NULL;
>
> - if (!VARRAY_ACTIVE_SIZE (invariants))
> + if (!VEC_length (invariant_p, invariants))
> return;
>
> /* Now something slightly more involved. First estimate the number of used
> @@ -741,9 +745,8 @@ find_invariants_to_move (struct df *df)
> }
> }
>
> - for (i = 0; i < VARRAY_ACTIVE_SIZE (invariants); i++)
> + for (i = 0; VEC_iterate (invariant_p, invariants, i, inv); i++)
> {
> - inv = VARRAY_GENERIC_PTR_NOGC (invariants, i);
> if (inv->def)
> n_inv_uses += inv->def->n_uses;
> }
> @@ -762,7 +765,7 @@ find_invariants_to_move (struct df *df)
> static void
> move_invariant_reg (struct loop *loop, unsigned invno, struct df *df)
> {
> - struct invariant *inv = VARRAY_GENERIC_PTR_NOGC (invariants, invno);
> + struct invariant *inv = VEC_index (invariant_p, invariants, invno);
> unsigned i;
> basic_block preheader = loop_preheader_edge (loop)->src;
> rtx reg, set;
> @@ -816,9 +819,8 @@ move_invariants (struct loop *loop, stru
> struct invariant *inv;
> unsigned i;
>
> - for (i = 0; i < VARRAY_ACTIVE_SIZE (invariants); i++)
> + for (i = 0; VEC_iterate (invariant_p, invariants, i, inv); i++)
> {
> - inv = VARRAY_GENERIC_PTR_NOGC (invariants, i);
> if (inv->move)
> move_invariant_reg (loop, i, df);
> }
> @@ -831,8 +833,7 @@ init_inv_motion_data (void)
> {
> actual_stamp = 1;
>
> - if (!invariants)
> - VARRAY_GENERIC_PTR_NOGC_INIT (invariants, 100, "invariants");
> + invariants = VEC_alloc (invariant_p, heap, 100);
> }
>
> /* Frees the data allocated by invariant motion. DF is the dataflow
> @@ -859,13 +860,12 @@ free_inv_motion_data (struct df *df)
> DF_REF_DATA (df->defs[i]) = NULL;
> }
>
> - for (i = 0; i < VARRAY_ACTIVE_SIZE (invariants); i++)
> + for (i = 0; VEC_iterate (invariant_p, invariants, i, inv); i++)
> {
> - inv = VARRAY_GENERIC_PTR_NOGC (invariants, i);
> BITMAP_FREE (inv->depends_on);
> free (inv);
> }
> - VARRAY_POP_ALL (invariants);
> + VEC_free (invariant_p, heap, invariants);
> }
>
> /* Move the invariants out of the LOOP. DF is the dataflow object. */
More information about the Gcc-patches
mailing list