diff options
author | Zdenek Dvorak <dvorakz@suse.cz> | 2007-01-12 18:57:40 +0100 |
---|---|---|
committer | Zdenek Dvorak <rakdver@gcc.gnu.org> | 2007-01-12 17:57:40 +0000 |
commit | 6270df4c21eb9114e9023f0da513e68cf465553d (patch) | |
tree | 6cc0ea65afc6e5ab5c27890dd53712843ef3bc17 /gcc/loop-init.c | |
parent | 1cbe999f085718f7310aa7f8352cce3cbd9e4526 (diff) | |
download | gcc-6270df4c21eb9114e9023f0da513e68cf465553d.zip gcc-6270df4c21eb9114e9023f0da513e68cf465553d.tar.gz gcc-6270df4c21eb9114e9023f0da513e68cf465553d.tar.bz2 |
loop.texi: Document recording of loop exits.
* doc/loop.texi: Document recording of loop exits.
* cfgloopmanip.c (loopify, duplicate_loop): Use alloc_loop.
(update_single_exits_after_duplication,
update_single_exit_for_duplicated_loop,
update_single_exit_for_duplicated_loops): Removed.
(duplicate_loop_to_header_edge): Do not call
update_single_exits_after_duplication and
update_single_exit_for_duplicated_loops.
(loop_version): Do not update single_exit information.
(fix_loop_structure): Use record_loop_exits instead of
mark_single_exit_loops.
* tree-ssa-loop-manip.c (tree_transform_and_unroll_loop): Update
the lists of loop exits.
* cfghooks.c (redirect_edge_and_branch, redirect_edge_and_branch_force,
split_edge, merge_blocks): Update the lists of loop exits.
* modulo-sched.c (sms_schedule): Pass LOOPS_HAVE_RECORDED_EXITS to
loop_optimizer_init.
* loop-init.c (loop_optimizer_init): Call record_loop_exits instead
of mark_single_exit_loops.
(loop_optimizer_finalize): Call release_recorded_exits.
* tree-ssa-loop.c (tree_loop_optimizer_init): Pass
LOOPS_HAVE_RECORDED_EXITS to loop_optimizer_init.
* tree-vectorizer.c (slpeel_tree_duplicate_loop_to_edge_cfg): Do not
update single exit information.
* lambda-code.c (perfect_nestify): Ditto.
* cfgloop.c (flow_loop_free): Destroy the list of exits of the loop.
(mark_single_exit_loops): Removed.
(alloc_loop, loop_exit_hash, loop_exit_eq, loop_exit_free,
get_exit_descriptions, rescan_loop_exit, record_loop_exits,
dump_recorded_exit, dump_recorded_exits, release_recorded_exits): New
functions.
(get_loop_exit_edges, single_exit): Use recorded exit lists.
(add_bb_to_loop, remove_bb_from_loops): Update the lists of loop exits.
(verify_loop_structure): Verify consistency of the exit lists.
(flow_loops_find): Use alloc_loop. Initialize exits hash.
(set_single_exit): Removed.
* cfgloop.h (struct loop_exit): New function.
(struct loop): single_exit_ field replaced by exits field.
(LOOPS_HAVE_MARKED_SINGLE_EXITS): Replaced by LOOPS_HAVE_RECORDED_EXITS.
(struct loops): Added exits hash.
(mark_single_exit_loops, set_single_exit): Declaration removed.
(release_recorded_exits, record_loop_exits, rescan_loop_exit): Declare.
From-SVN: r120728
Diffstat (limited to 'gcc/loop-init.c')
-rw-r--r-- | gcc/loop-init.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/loop-init.c b/gcc/loop-init.c index 32e56b3..1f049c1 100644 --- a/gcc/loop-init.c +++ b/gcc/loop-init.c @@ -88,8 +88,8 @@ loop_optimizer_init (unsigned flags) if (flags & LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS) mark_irreducible_loops (); - if (flags & LOOPS_HAVE_MARKED_SINGLE_EXITS) - mark_single_exit_loops (); + if (flags & LOOPS_HAVE_RECORDED_EXITS) + record_loop_exits (); /* Dump loops. */ flow_loops_dump (dump_file, NULL, 1); @@ -118,6 +118,8 @@ loop_optimizer_finalize (void) } /* Clean up. */ + if (current_loops->state & LOOPS_HAVE_RECORDED_EXITS) + release_recorded_exits (); flow_loops_free (current_loops); free (current_loops); current_loops = NULL; |