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...

procNodeprocedure () const
 Procedure. More...

loopTreeNodetopLoop () const
 Top loop object. More...

loopTreeNodewhichLoop (basicblockNode *block)
 Which loop. More...

loopTreeNodeloopAncestor (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...

basicblockNodecommonDominator (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