diff options
author | m.hayes <m.hayes@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-01-22 02:23:14 +0000 |
---|---|---|
committer | m.hayes <m.hayes@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-01-22 02:23:14 +0000 |
commit | 5ba8b451839b4a1182ccbb3b6be3187329524e97 (patch) | |
tree | a4cf402d42dea98c81adbc839979edee2912f926 /gcc | |
parent | f8a352256eadf356210cb744fee90f46aeb2025e (diff) | |
download | gcc-5ba8b451839b4a1182ccbb3b6be3187329524e97.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31556 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/loop.c | 25 |
2 files changed, 20 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 943dd47b70e..13bd549feac 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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'. diff --git a/gcc/loop.c b/gcc/loop.c index b52b33a55e5..833a0a9a205 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -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. */ |