Lines Matching refs:loops

13 GCC provides extensive infrastructure for work with natural loops, i.e.,
15 chapter describes representation of loops in GCC, both on GIMPLE and in
20 * Loop representation:: Representation and analysis of loops.
21 * Loop querying:: Getting information about loops.
35 This chapter describes the representation of loops in GCC, and functions
43 passes to allow attaching meta information to individual loops
48 the loop. Loops with several latches may appear if several loops share
50 The representation of loops in GCC however allows only loops with a
51 single latch. During loop analysis, headers of such loops are split and
54 variables in the loops is used to determine whether the latches
55 correspond to sub-loops or to control flow in a single loop. This means
61 correctly for loops with multiple latch edges (the functions that only
62 query membership of blocks to loops and subloop relationships, or
67 loops are organized in a containment hierarchy (tree) such that all the
68 loops immediately contained inside loop L are the children of L in the
69 tree. This tree is represented by the @code{struct loops} structure.
71 function. Each of the loops is represented in a @code{struct loop}
74 the corresponding field of the @code{larray} vector in the loops
77 loops. Also, there is no guarantee on the relative order of a loop
83 loops in the function. To traverse all loops, use @code{FOR_EACH_LOOP}
85 the direction of traversal and the set of loops visited. Each loop is
87 loop tree, and the loops may be removed during the traversal. The newly
88 created loops are never traversed, if they need to be visited, this
93 one @code{struct loops} structure initialized at the same time for each
95 @code{struct loops} structure. Many of the loop manipulation functions
98 The loops are analyzed through @code{loop_optimizer_init} function. The
106 loops with multiple latch edges will not be disambiguated. If a loop
108 the loop manipulation functions will not work for loops in this shape.
119 sub-loops, and makes manipulation with the loops significantly easier.
120 Most of the loop manipulation functions assume that the loops are in
124 edges in the strongly connected components that are not natural loops
127 flag is not set for blocks and edges that belong to natural loops that
142 The memory occupied by the loops structures should be freed with
151 used to cleanup CFG while updating the loops structures if
162 The functions to query the information about loops are declared in
172 the basic blocks of the sub-loops).
174 sub-loop, and the sibling of the loop in the loops tree.
184 @item @code{loop_depth}: The depth of the loop in the loops tree, i.e., the
185 number of super-loops of the loop.
186 @item @code{flow_loops_dump}: Dumps the information about loops to a
191 @item @code{loop_preheader_edge}: If loops have preheaders, returns
196 to a loop (including its sub-loops).
197 @item @code{find_common_loop}: Finds the common super-loop of two loops.
204 @item @code{mark_loop_exit_edges}: Marks all exit edges of all loops
223 The loops tree can be manipulated using the following functions:
229 @item @code{remove_bb_from_loops}: Removes a basic block from loops.
232 Most low-level CFG functions update loops automatically. The following
244 loops, they are mostly untested in that case, and at the moment, they
245 are only reliable for the innermost loops:
278 created at the exits of the loops for the SSA names that are used
328 Given an SSA name, its behavior in loops can be analyzed using the
335 only for some analysis, and when you work with whole nest of loops at
336 once. It will try replacing all SSA names by their SCEV in all loops,
337 including the super-loops of the current loop, thus providing a complete
343 their evolution in the outer loops is known.
384 several loops) is finished, @code{iv_analysis_done} should be called.
470 @code{number_of_latch_executions} works only for single-exit loops.
498 indicating that loops' latch must roll thus @code{may_be_zero} would be
615 @item an array of loops @code{loop_nest} that contains the loops to