1 #ifndef _DOMINANCEFRONTIER_H_
2 #define _DOMINANCEFRONTIER_H_
6 using std::set_difference;
8 namespace DominatorTreesAndDominanceFrontiers
36 std::cerr<<
"no such ID ("<<node<<
") in dominator-tree\n";
39 return std::set<int>();
55 std::cout <<
"x\tDF\n";
63 std::cout <<
"}" << std::endl;
96 std::vector<std::set<int> > domSets;
97 std::vector<std::set<int> > dfLocal;
101 std::cout <<
"x\tDFl\tDS\tDF\n";
103 for (i=0;i<nodeCount;i++)
107 dfLocal.push_back(std::set<int>());
111 std::vector < VirtualCFG::FilteredCFGEdge < CFGFilterFunction > >
outEdges =
114 for (
unsigned int edge = 0; edge < outEdges.size(); edge++)
124 dfLocal[i].insert(childID);
130 for (i=0;i<nodeCount;i++)
133 tmp.insert(dfLocal[i].begin(),dfLocal[i].end());
134 for (std::set<int>::iterator j=domSets[i].begin();j!=domSets[i].end();j++)
136 tmp.insert(dfLocal[(*j)].begin(),dfLocal[(*j)].end());
138 set_difference(tmp.begin(),tmp.end(),
139 domSets[i].begin(),domSets[i].end(),
142 std::cout <<i<<
"\t"<<dfLocal[i]<<
"\t"<<domSets[i]<<
"\t"<<
dominatorFrontier[i]<<std::endl;