34#ifndef TTA_PROGRAM_DEPENDENCE_GRAPH_HH
35#define TTA_PROGRAM_DEPENDENCE_GRAPH_HH
37#include <boost/graph/filtered_graph.hpp>
52 public BoostGraph<ProgramDependenceNode, ProgramDependenceEdge> {
79 typedef std::map<const ControlDependenceNode*, std::vector<Node*> >
83 template <
typename GraphType>
87 template <
typename Edge>
89 return graph_[e]->isControlDependence()
90 ||
graph_[e]->isArtificialControlDependence();
96 typedef boost::filtered_graph<Graph, CDGFilter<Graph> >
FilteredCDG;
98 typedef boost::graph_traits<FilteredCDG>::in_edge_iterator
100 typedef boost::graph_traits<FilteredCDG>::out_edge_iterator
102 typedef boost::graph_traits<FilteredCDG>::vertex_descriptor
104 typedef std::pair<FilteredInEdgeIter, FilteredInEdgeIter>
106 typedef std::pair<FilteredOutEdgeIter, FilteredOutEdgeIter>
110 typedef boost::associative_property_map<PDGOrderMap>
PDGOrder;
113 typedef boost::associative_property_map<DescriptorMap>
Descriptors;
115 typedef std::map <NodeDescriptor, boost::default_color_type >
ColorMap;
116 typedef boost::associative_property_map<ColorMap>
Color;
119 template <
typename NodeSetType,
typename GraphType>
124 template <
typename Node>
135 template <
typename GraphType>
139 template <
typename Edge>
141 return !(
graph_[e]->isLoopCloseEdge() ||
142 (
graph_[e]->isDataDependence() &&
143 graph_[e]->dataDependenceEdge().isBackEdge()));
147 typedef boost::filtered_graph<
151 template <
typename GraphType>
155 template <
typename Edge>
157 return !(
graph_[e]->isBackEdge());
161 typedef boost::filtered_graph<Graph,BackCFGFilter<Graph> >
237 template <
class Name>
241 template <
class VertexOrEdge>
243 VertexOrEdge& v)
const {
244 out <<
"[" <<
name[v]->dotString() <<
"]";
boost::adjacency_list< boost::listS, boost::vecS, boost::bidirectionalS, Node *, Edge * > Graph
Internal graph type, providing actual graph-like operations. This type definition relies on bundled p...
Node & node(const int index) const
std::set< ProgramDependenceNode *, typename GraphNode::Comparator > NodeSet
void operator()(std::ostream &out, const VertexOrEdge &v) const
void moveDDGedges(Node &root, NodeSet &subgraphNodes, FilteredCDG &filteredCDG)
boost::graph_traits< FilteredCDG >::in_edge_iterator FilteredInEdgeIter
Few types to work with filtered graph.
Node * ddgEntryNode_
Stored reference to PDG equivalent of DDG ENTRYNODE.
void removeGuardedJump(ControlToProgram &, ProgramDependenceNode &, ControlDependenceNode &)
void computeEECInfo(const PDGOrderMap &orderMap, FilteredCDG &filteredCDG)
Node * entryNode_
Stores pointer to entry node of the PDG graph.
int detectStrongComponents(PDGOrderMap &components, DescriptorMap &roots, FilteredCDG &filteredCDG)
std::vector< std::set< Node * > > strongComponents_
stores nodes present in each of the found components
boost::graph_traits< FilteredCDG >::vertex_descriptor FilteredVertexDescriptor
void computeRegionInfo(const PDGOrderMap &orderMap, FilteredCDG &filteredCDG)
void processEntry(BasicBlockNode *firstBB)
void addLeafEdges(std::vector< BasicBlockNode * > leafs, BasicBlockNode *bb)
int insCount_
Counts new instructions when creating basic blocks.
void copyRegionEECComponent(ControlToProgram &, BBToCD &, MoveNodeToPDGNode &, MovesInCD &)
void processRegion(Node *region, FilteredCDG &filteredCDG)
std::map< const MoveNode *, ProgramDependenceNode *, MoveNode::Comparator > MoveNodeToPDGNode
void processLoopClose(Node *node)
std::map< const BasicBlockNode *, ControlDependenceNode *, BasicBlockNode::Comparator > BBToCD
std::map< NodeDescriptor, int > PDGOrderMap
Stores data to compute post order relation on CDG and strong components.
std::map< const ControlDependenceNode *, std::vector< Node * > > MovesInCD
void computeRelations(const PDGOrderMap &orderMap, FilteredCDG &filteredCDG)
std::map< NodeDescriptor, NodeDescriptor > DescriptorMap
Storage for relations between nodes.
boost::associative_property_map< ColorMap > Color
virtual ~ProgramDependenceGraph()
ControlFlowGraph * newCFG_
Newly created control flow graph.
std::pair< FilteredInEdgeIter, FilteredInEdgeIter > FilteredInEdgePair
const ControlDependenceGraph * cdg_
Stores original control dependence graph.
boost::filtered_graph< Graph, BackCFGFilter< Graph > > CFGSubgraph
TTAProgram::Program * program_
Original Program object, to get instruction reference manager.
boost::filtered_graph< Graph, CDGFilter< Graph > > FilteredCDG
Type of filtered graph with CD edges only.
boost::graph_traits< FilteredCDG >::out_edge_iterator FilteredOutEdgeIter
std::pair< FilteredOutEdgeIter, FilteredOutEdgeIter > FilteredOutEdgePair
ProgramDependenceNode & entryNode() const
const DataDependenceGraph * ddg_
Stores original data dependence graph.
CompareResult compareSiblings(Node *a, Node *b)
void processLoopEntry(Node *node, BasicBlockNode *bb)
boost::associative_property_map< PDGOrderMap > PDGOrder
void regionHelper(Node *node, FilteredCDG &filteredCDG, Node::NodesInfo &finalNodesInfo)
std::map< const ControlDependenceNode *, ProgramDependenceNode *, ControlDependenceNode::Comparator > ControlToProgram
void processPredicate(Node *predicate, FilteredCDG &filteredCDG)
void createJump(BasicBlockNode *from, BasicBlockNode *to, TTAProgram::Terminal *guardReg=NULL, ControlFlowEdge::CFGEdgePredicate predicate=ControlFlowEdge::CFLOW_EDGE_NORMAL)
boost::filtered_graph< Graph, BackFilter< Graph >, SubgraphTypeTest< NodeSet, Graph > > Subgraph
std::map< NodeDescriptor, boost::default_color_type > ColorMap
Storage for color property used by dfs.
boost::associative_property_map< DescriptorMap > Descriptors
std::set< ProgramDependenceNode * > NodesInfo
BackCFGFilter(GraphType graph)
bool operator()(const Edge &e) const
BackFilter(GraphType graph)
bool operator()(const Edge &e) const
Filter control dependence edges only.
CDGFilter(GraphType graph)
bool operator()(const Edge &e) const
Filter nodes of subgraph only.
SubgraphTypeTest(Node *root, NodeSetType nodes, GraphType graph)
bool operator()(const Node &n) const
NodeSetType subgraphNodes_