42#ifndef TTA_CONTROL_DEPENDENCE_GRAPH_HH
43#define TTA_CONTROL_DEPENDENCE_GRAPH_HH
50#include <boost/graph/reverse_graph.hpp>
66 BoostGraph<ControlDependenceNode, ControlDependenceEdge> {
88 typedef std::map<ControlFlowGraph::NodeDescriptor, int>
PostOrderMap;
89 typedef boost::associative_property_map<PostOrderMap>
PostOrder;
92 typedef boost::associative_property_map<CDGOrderMap>
CDGOrder;
95 typedef boost::associative_property_map<DescriptorMap>
Descriptors;
97 typedef std::map <NodeDescriptor, boost::default_color_type >
ColorMap;
98 typedef boost::associative_property_map<ColorMap>
Color;
112 std::vector<Node*>& cdNodes,
#define IGNORE_CLANG_WARNING(X)
std::map< NodeDescriptor, boost::default_color_type > ColorMap
Storage for color property used by dfs.
std::vector< SourceType > DependentOn
ControlDependenceEdge & createControlDependenceEdge(Node &bTail, Node &bHead, Edge::CDGEdgeType edgeValue=Edge::CDEP_EDGE_NORMAL)
int nearestCommonDom(std::vector< int > &iDom, int node1, int node2) const
void computeRegionInfo(const CDGOrderMap &orderMap)
int componentCount() const
void detectControlDependencies(BlockVector &nodes, std::vector< Node * > &cdNodes, PostOrder &postOrder, DependenceMap &dependencies)
boost::associative_property_map< PostOrderMap > PostOrder
TTAProgram::Program * program_
std::vector< std::set< Node * > > strongComponents_
boost::associative_property_map< DescriptorMap > Descriptors
std::map< NodeDescriptor, int > CDGOrderMap
Stores data to compute post order relation on CDG and strong components.
void computeEECInfo(const CDGOrderMap &orderMap)
virtual ~ControlDependenceGraph()
ControlFlowGraph * cGraph_
std::map< NodeDescriptor, NodeDescriptor > DescriptorMap
Storage for relations between nodes.
void eliminateMultipleOutputs()
void regionHelper(Node *, Node::NodesInfo &)
std::vector< int > iDomTree_
boost::associative_property_map< CDGOrderMap > CDGOrder
void createPostDominanceTree(BlockVector &nodes, PostOrder &postOrder)
boost::associative_property_map< ColorMap > Color
void computeRelations(const CDGOrderMap &orderMap)
CompareResult compareSiblings(Node *a, Node *b) const
TTAProgram::Program * program() const
std::pair< Node *, Edge::CDGEdgeType > SourceType
std::vector< BasicBlockNode * > BlockVector
TTAProgram::Address startAddress_
Node * entryNode_
Stores reference to entryNode of the graph.
std::map< ControlFlowGraph::NodeDescriptor, int > PostOrderMap
Stores data to compute post order relation on CFG.
int detectStrongComponents(CDGOrderMap &components, DescriptorMap &roots)
bool findSubset(DependentOn *, DependentOn *, Node *)
std::map< Node *, DependentOn *, Node::Comparator > DependenceMap
void processRegion(Node *region)
ControlDependenceNode & entryNode()
bool analyzed_
Indicates that CDG already has data required for serialization.
std::set< ControlDependenceNode * > NodesInfo
Storage type for other nodes of same graph needed to define some non graph relations....