void DominatorTree::findDominanceFrontiers() { BasicBlock *bb; for (IteratorRef dtIt = iteratorDFS(false); !dtIt->end(); dtIt->next()) { EdgeIterator succIt, chldIt; bb = BasicBlock::get(reinterpret_cast<Node *>(dtIt->get())); bb->getDF().clear(); for (succIt = bb->cfg.outgoing(); !succIt.end(); succIt.next()) { BasicBlock *dfLocal = BasicBlock::get(succIt.getNode()); if (dfLocal->idom() != bb) bb->getDF().insert(dfLocal); } for (chldIt = bb->dom.outgoing(); !chldIt.end(); chldIt.next()) { BasicBlock *cb = BasicBlock::get(chldIt.getNode()); DLList::Iterator dfIt = cb->getDF().iterator(); for (; !dfIt.end(); dfIt.next()) { BasicBlock *dfUp = BasicBlock::get(dfIt); if (dfUp->idom() != bb) bb->getDF().insert(dfUp); } } } }
void Graph::classifyEdges() { int seq; for (IteratorRef it = iteratorDFS(true); !it->end(); it->next()) { Node *node = reinterpret_cast<Node *>(it->get()); node->visit(0); node->tag = 0; } classifyDFS(root, (seq = 0)); sequence = seq; }