Adds an edge between two nodes in this graph.
Parameters: src - Node at which the edge originates. Parameters: dst - Node at which the edge terminates.
Sets up the control flow graph. Computes the dominators and the dominance
frontier, cleans up the tree, works with the loops, inserts stores to aid
copy and constant propagation as well as code generation.
Returns the depth of the loop in which a block is contained. The block
must be contained in a loop. The procedure has depth 0. A loop (while,
for, etc.) at the procedure level has depth 1. Depth increases as loops
are nested.
Parameters: block - A block whose depth we are interested in. See Also:FlowGraph.loopLevel
Returns the level of the loop containing a given block. The innermost
loops have level 0. The level increases as you go outward to higher loop
nestings. For any given loop, the level is the maximum possible.
Returns the loop tree for the method modeled by this flow graph. The loop
tree represents the nesting of the loops in a method. The procedure is at
the root of the loop tree. Nested loops are represented by a parent and
child relationship.
Creates a new Block starting with the specified Label. The Block is added
to this FlowGraph using its label as its key.
Parameters: label - The new Block's Label
Creates a graphical description of the CFG in the dot language. The name
of the generated file is the name of the method modeled by this CFG
followed by a number and the ".dot" postfix. For more information about
dot and tools that use it see:
Removes an edge from the graph and performs the necessary cleanup.
Parameters: v - Node at which edge to be removed originates. Parameters: w - Node at which edge to be removed terminates.
Set the entry in the mapping between subroutine entry Blocks
and the Subroutines that they begin. It also sets the
Subroutine's entry block.
Parameters: sub - The subroutine whose entry block is being set. Parameters: entry - The subroutine's entry Block. See Also:Subroutine.setEntry
Returns the basic blocks contained in this CFG in trace order. Trace
order implies that basic blocks that end with a conditional jump are
followed by their false branch and, where possible, that blocks that end
in an unconditional jump are followed by the block that is the target of
the unconditional branch.
The trace does not contain the source and the sink blocks.
The basic Blocks in this CFG.