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/doc | |
parent | 1cbe999f085718f7310aa7f8352cce3cbd9e4526 (diff) | |
download | gcc-6270df4c21eb9114e9023f0da513e68cf465553d.tar.gz |
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/doc')
-rw-r--r-- | gcc/doc/loop.texi | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/gcc/doc/loop.texi b/gcc/doc/loop.texi index 1b189c778fd..fee30f8ec65 100644 --- a/gcc/doc/loop.texi +++ b/gcc/doc/loop.texi @@ -108,14 +108,16 @@ edges in the strongly connected components that are not natural loops flag is not set for blocks and edges that belong to natural loops that are in such an irreducible region (but it is set for the entry and exit edges of such a loop, if they lead to/from this region). -@item @code{LOOPS_HAVE_MARKED_SINGLE_EXITS}: If a loop has exactly one -exit edge, this edge is recorded in the loop structure. @code{single_exit} -function can be used to retrieve this edge. +@item @code{LOOPS_HAVE_RECORDED_EXITS}: The lists of exits are recorded +and updated for each loop. This makes some functions (e.g., +@code{get_loop_exit_edges}) more efficient. Some functions (e.g., +@code{single_exit}) can be used only if the lists of exits are +recorded. @end itemize These properties may also be computed/enforced later, using functions @code{create_preheaders}, @code{force_single_succ_latches}, -@code{mark_irreducible_loops} and @code{mark_single_exit_loops}. +@code{mark_irreducible_loops} and @code{record_loop_exits}. The memory occupied by the loops structures should be freed with @code{loop_optimizer_finalize} function. |