summaryrefslogtreecommitdiff
path: root/gcc/doc
diff options
context:
space:
mode:
authorZdenek Dvorak <dvorakz@suse.cz>2007-01-12 18:57:40 +0100
committerZdenek Dvorak <rakdver@gcc.gnu.org>2007-01-12 17:57:40 +0000
commit6270df4c21eb9114e9023f0da513e68cf465553d (patch)
tree6cc0ea65afc6e5ab5c27890dd53712843ef3bc17 /gcc/doc
parent1cbe999f085718f7310aa7f8352cce3cbd9e4526 (diff)
downloadgcc-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.texi10
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.