loop.c (loops_info): New variable.

* loop.c (loops_info): New variable.
	(loop_optimize): Allocate loops->array and free it on exit.
	Allocate memory for loops_info and assign to each loop,
 	replacing alloca.
	(find_and_verify_loops): Do not allocate loops->array.

From-SVN: r31556
This commit is contained in:
Michael Hayes 2000-01-22 02:23:14 +00:00 committed by Michael Hayes
parent e8736c0002
commit 4cda35d4c9
2 changed files with 20 additions and 13 deletions

View File

@ -1,3 +1,11 @@
2000-01-22 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
* loop.c (loops_info): New variable.
(loop_optimize): Allocate loops->array and free it on exit.
Allocate memory for loops_info and assign to each loop,
replacing alloca.
(find_and_verify_loops): Do not allocate loops->array.
2000-01-21 Zack Weinberg <zack@wolery.cumb.org>
* fixinc/fixfixes.c (machine_name_fix): Don't free 'scratch'.

View File

@ -419,6 +419,7 @@ loop_optimize (f, dumpfile, unroll_p, bct_p)
register int i;
struct loops loops_data;
struct loops *loops = &loops_data;
struct loop_info *loops_info;
loop_dump_stream = dumpfile;
@ -455,10 +456,19 @@ loop_optimize (f, dumpfile, unroll_p, bct_p)
uid_loop = (struct loop **) xcalloc (max_uid_for_loop,
sizeof (struct loop *));
/* Allocate storage for array of loops. */
loops->array = (struct loop *)
xcalloc (loops->num, sizeof (struct loop));
/* Find and process each loop.
First, find them, and record them in order of their beginnings. */
find_and_verify_loops (f, loops);
/* Allocate and initialize auxiliary loop information. */
loops_info = xcalloc (loops->num, sizeof (struct loop_info));
for (i = 0; i < loops->num; i++)
loops->array[i].info = loops_info + i;
/* Now find all register lifetimes. This must be done after
find_and_verify_loops, because it might reorder the insns in the
function. */
@ -510,15 +520,6 @@ loop_optimize (f, dumpfile, unroll_p, bct_p)
this prevents low overhead loop instructions from being used. */
indirect_jump_in_function = indirect_jump_in_function_p (f);
/* Allocate and initialize auxiliary loop information. */
for (i = max_loop_num - 1; i >= 0; i--)
{
struct loop *loop = &loops->array[i];
loop->info = (struct loop_info *) alloca (sizeof (struct loop_info));
memset (loop->info, 0, sizeof (struct loop_info));
}
/* Now scan the loops, last ones first, since this means inner ones are done
before outer ones. */
for (i = max_loop_num - 1; i >= 0; i--)
@ -539,6 +540,8 @@ loop_optimize (f, dumpfile, unroll_p, bct_p)
free (moved_once);
free (uid_luid);
free (uid_loop);
free (loops_info);
free (loops->array);
}
/* Returns the next insn, in execution order, after INSN. START and
@ -2596,10 +2599,6 @@ find_and_verify_loops (f, loops)
This also avoids writing past end of tables when there are no loops. */
uid_loop[0] = NULL;
loops->array = (struct loop *)
xmalloc (num_loops * sizeof (struct loop));
bzero ((char *)loops->array, num_loops * sizeof (struct loop));
/* Find boundaries of loops, mark which loops are contained within
loops, and invalidate loops that have setjmp. */