Main Page   Modules   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members   Related Pages  

loopTree Class Reference

#include <loops.h>

List of all members.

Public Types

enum  EdgeKind { TreeEdge, BackEdge, ForwardEdge, CrossEdge }

Public Methods

 loopTree (procNode *procedure)
 Create a loop tree. More...

 ~loopTree ()
 Delete a loop tree. More...

procNode * procedure () const
 Procedure. More...

loopTreeNode * topLoop () const
 Top loop object. More...

loopTreeNode * whichLoop (basicblockNode *block)
 Which loop. More...

loopTreeNode * loopAncestor (loopTreeNode *loop)
 Find a loop ancestor. More...

EdgeKind classifyEdge (basicblockNode *source, basicblockNode *target)
 Edge classification. More...

void report ()
 Report. More...


Private Methods

void findLoop (basicblockNode *candidate, basicblock_set_map &generators_map)
 Decide if a block is a loop header. More...

void findBody (basicblockNode *head, basicblock_set &generators, loopTreeNode::LoopKind kind)
 Determine the body of a loop. More...

basicblockNode * commonDominator (basicblockNode *first, basicblockNode *second)
 Find a common dominator for two blocks. More...

void classifyEdges (basicblock_list &post_order)
 Classify edges. More...

void depthFirstSearch (basicblockNode *cur, basicblock_list &post_order, int &pre_order_number, int &post_order_number)
 Depth-first search. More...

void setDepths (loopTreeNode *cur, int depth)
 Set the depth on each loop nest. More...

void report (loopTreeNode *cur, int level)
 Report (tree recursion). More...


Private Attributes

procNode * _procedure
 The procedure. More...

loopTreeNode * _top
 The loop tree. More...

loop_list _loops
 A list of the loops. More...

blockloop_map _containedIn
 Mapping from basic blocks to loops. More...

edge_map _backEdges
 List of back edges. More...

edge_map _forwardEdges
 List of forward edges. More...

edge_map _crossEdges
 List of cross edges. More...

basicblock_int_map _preOrder
 Depth-first pre-order of the nodes. More...

basicblock_int_map _rpostOrder
 Depth-first reverse-post-order of the nodes. More...


Member Enumeration Documentation

enum loopTree::EdgeKind
 

Enumeration values:
TreeEdge 
BackEdge 
ForwardEdge 
CrossEdge 


Constructor & Destructor Documentation

loopTree::loopTree (  procNode *    procedure ) 
 

Create a loop tree.

loopTree::~loopTree (    ) 
 

Delete a loop tree.

This destructor is reponsible for deleting all of the loop tree nodes as well.


Member Function Documentation

loopTree::EdgeKind loopTree::classifyEdge (  basicblockNode *    source,
basicblockNode *    target
) 
 

Edge classification.

Given a particular source and target in the control-flow graph, indicate which kind of edge it is: tree, forward, backward, or cross.

void loopTree::classifyEdges (  basicblock_list &    post_order )  [private]
 

Classify edges.

Perform a depth-first search of the control-flow graph, building pre-order and reverse-post-order orderings of the nodes, as well as classifying th edges. Also, return a list with the post-order traversal.

basicblockNode * loopTree::commonDominator (  basicblockNode *    first,
basicblockNode *    second
)  [private]
 

Find a common dominator for two blocks.

void loopTree::depthFirstSearch (  basicblockNode *    cur,
basicblock_list &    post_order,
int &    pre_order_number,
int &    rpost_order_number
)  [private]
 

Depth-first search.

void loopTree::findBody (  basicblockNode *    head,
basicblock_set &    generators,
loopTreeNode::LoopKind    kind
)  [private]
 

Determine the body of a loop.

void loopTree::findLoop (  basicblockNode *    candidate,
basicblock_set_map &    generators_map
)  [private]
 

Decide if a block is a loop header.

loopTreeNode * loopTree::loopAncestor (  loopTreeNode *    loop ) 
 

Find a loop ancestor.

procNode* loopTree::procedure (    )  const [inline]
 

Procedure.

void loopTree::report (  loopTreeNode *    cur,
int    level
)  [private]
 

Report (tree recursion).

void loopTree::report (    ) 
 

Report.

void loopTree::setDepths (  loopTreeNode *    cur,
int    depth
)  [private]
 

Set the depth on each loop nest.

loopTreeNode* loopTree::topLoop (    )  const [inline]
 

Top loop object.

Note that this is not really a loop; it's just used as the root of the tree

loopTreeNode * loopTree::whichLoop (  basicblockNode *    block ) 
 

Which loop.

Determine which loop a particular basic block belongs to.


Member Data Documentation

edge_map loopTree::_backEdges [private]
 

List of back edges.

Back edges are stored according to the *target* of the back-edge, not the source. This is because the algorithm needs to easily find all the back-edges that impinge on a candidate node.

blockloop_map loopTree::_containedIn [private]
 

Mapping from basic blocks to loops.

edge_map loopTree::_crossEdges [private]
 

List of cross edges.

Stored according to the source of the edge

edge_map loopTree::_forwardEdges [private]
 

List of forward edges.

Stored according to the source of the edge

loop_list loopTree::_loops [private]
 

A list of the loops.

basicblock_int_map loopTree::_preOrder [private]
 

Depth-first pre-order of the nodes.

procNode* loopTree::_procedure [private]
 

The procedure.

basicblock_int_map loopTree::_rpostOrder [private]
 

Depth-first reverse-post-order of the nodes.

loopTreeNode* loopTree::_top [private]
 

The loop tree.


The documentation for this class was generated from the following files:
Generated on Thu Jan 10 12:06:30 2002 for C-Breeze by doxygen1.2.13.1 written by Dimitri van Heesch, © 1997-2001