forked from OSchip/llvm-project
				
			
							parent
							
								
									e0e1db012c
								
							
						
					
					
						commit
						135fb4be7c
					
				| 
						 | 
				
			
			@ -1,87 +0,0 @@
 | 
			
		|||
//===- DependenceGraph.cpp - Dependence graph for a function ----*- C++ -*-===//
 | 
			
		||||
// 
 | 
			
		||||
//                     The LLVM Compiler Infrastructure
 | 
			
		||||
//
 | 
			
		||||
// This file was developed by the LLVM research group and is distributed under
 | 
			
		||||
// the University of Illinois Open Source License. See LICENSE.TXT for details.
 | 
			
		||||
// 
 | 
			
		||||
//===----------------------------------------------------------------------===//
 | 
			
		||||
//
 | 
			
		||||
// This file implements an explicit representation for the dependence graph
 | 
			
		||||
// of a function, with one node per instruction and one edge per dependence.
 | 
			
		||||
// Dependences include both data and control dependences.
 | 
			
		||||
// 
 | 
			
		||||
// Each dep. graph node (class DepGraphNode) keeps lists of incoming and
 | 
			
		||||
// outgoing dependence edges.
 | 
			
		||||
// 
 | 
			
		||||
// Each dep. graph edge (class Dependence) keeps a pointer to one end-point
 | 
			
		||||
// of the dependence.  This saves space and is important because dep. graphs
 | 
			
		||||
// can grow quickly.  It works just fine because the standard idiom is to
 | 
			
		||||
// start with a known node and enumerate the dependences to or from that node.
 | 
			
		||||
//===----------------------------------------------------------------------===//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "llvm/Analysis/DependenceGraph.h"
 | 
			
		||||
#include "llvm/Function.h"
 | 
			
		||||
 | 
			
		||||
namespace llvm {
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------------------------
 | 
			
		||||
// class Dependence:
 | 
			
		||||
// 
 | 
			
		||||
// A representation of a simple (non-loop-related) dependence
 | 
			
		||||
//----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void Dependence::print(std::ostream &O) const
 | 
			
		||||
{
 | 
			
		||||
  assert(depType != NoDependence && "This dependence should never be created!");
 | 
			
		||||
  switch (depType) {
 | 
			
		||||
  case TrueDependence:    O << "TRUE dependence"; break;
 | 
			
		||||
  case AntiDependence:    O << "ANTI dependence"; break;
 | 
			
		||||
  case OutputDependence:  O << "OUTPUT dependence"; break;
 | 
			
		||||
  case ControlDependence: O << "CONTROL dependence"; break;
 | 
			
		||||
  default: assert(0 && "Invalid dependence type"); break;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------------------------
 | 
			
		||||
// class DepGraphNode
 | 
			
		||||
//----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void DepGraphNode::print(std::ostream &O) const
 | 
			
		||||
{
 | 
			
		||||
  const_iterator DI = outDepBegin(), DE = outDepEnd();
 | 
			
		||||
 | 
			
		||||
  O << "\nDeps. from instr:" << getInstr();
 | 
			
		||||
 | 
			
		||||
  for ( ; DI != DE; ++DI)
 | 
			
		||||
    {
 | 
			
		||||
      O << "\t";
 | 
			
		||||
      DI->print(O);
 | 
			
		||||
      O << " to instruction:";
 | 
			
		||||
      O << DI->getSink()->getInstr();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------------------------
 | 
			
		||||
// class DependenceGraph
 | 
			
		||||
//----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
DependenceGraph::~DependenceGraph()
 | 
			
		||||
{
 | 
			
		||||
  // Free all DepGraphNode objects created for this graph
 | 
			
		||||
  for (map_iterator I = depNodeMap.begin(), E = depNodeMap.end(); I != E; ++I)
 | 
			
		||||
    delete I->second;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DependenceGraph::print(const Function& func, std::ostream &O) const
 | 
			
		||||
{
 | 
			
		||||
  O << "DEPENDENCE GRAPH FOR FUNCTION " << func.getName() << ":\n";
 | 
			
		||||
  for (Function::const_iterator BB=func.begin(), FE=func.end(); BB != FE; ++BB)
 | 
			
		||||
    for (BasicBlock::const_iterator II=BB->begin(), IE=BB->end(); II !=IE; ++II)
 | 
			
		||||
      if (const DepGraphNode* dgNode = this->getNode(*II))
 | 
			
		||||
        dgNode->print(O);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // End llvm namespace
 | 
			
		||||
		Loading…
	
		Reference in New Issue