Next: Loop manipulation, Previous: Loop representation, Up: Loop Analysis and Representation
The functions to query the information about loops are declared in
cfgloop.h. Some of the information can be taken directly from
the structures. loop_father
field of each basic block contains
the innermost loop to that the block belongs. The most useful fields of
loop structure (that are kept up-to-date at all times) are:
header
, latch
: Header and latch basic blocks of the
loop.
num_nodes
: Number of basic blocks in the loop (including
the basic blocks of the sub-loops).
depth
: The depth of the loop in the loops tree, i.e., the
number of super-loops of the loop.
outer
, inner
, next
: The super-loop, the first
sub-loop, and the sibling of the loop in the loops tree.
single_exit
: The exit edge of the loop, if the loop has
exactly one exit and the loops were analyzed with
LOOPS_HAVE_MARKED_SINGLE_EXITS.
There are other fields in the loop structures, many of them used only by some of the passes, or not updated during CFG changes; in general, they should not be accessed directly.
The most important functions to query loop structures are:
flow_loops_dump
: Dumps the information about loops to a
file.
verify_loop_structure
: Checks consistency of the loop
structures.
loop_latch_edge
: Returns the latch edge of a loop.
loop_preheader_edge
: If loops have preheaders, returns
the preheader edge of a loop.
flow_loop_nested_p
: Tests whether loop is a sub-loop of
another loop.
flow_bb_inside_loop_p
: Tests whether a basic block belongs
to a loop (including its sub-loops).
find_common_loop
: Finds the common super-loop of two loops.
superloop_at_depth
: Returns the super-loop of a loop with
the given depth.
tree_num_loop_insns
, num_loop_insns
: Estimates the
number of insns in the loop, on GIMPLE and on RTL.
loop_exit_edge_p
: Tests whether edge is an exit from a
loop.
mark_loop_exit_edges
: Marks all exit edges of all loops
with EDGE_LOOP_EXIT
flag.
get_loop_body
, get_loop_body_in_dom_order
,
get_loop_body_in_bfs_order
: Enumerates the basic blocks in the
loop in depth-first search order in reversed CFG, ordered by dominance
relation, and breath-first search order, respectively.
get_loop_exit_edges
: Enumerates the exit edges of a loop.
just_once_each_iteration_p
: Returns true if the basic block
is executed exactly once during each iteration of a loop (that is, it
does not belong to a sub-loop, and it dominates the latch of the loop).