static void calculateReachableNodesInLoop(LoopNode* loop, Node* node, Node* stopNode, BitSet& flags) { int id = node->getId(); if (!loop->inLoop(node) || node == stopNode || flags.getBit(id)) { return; } flags.setBit(id, true); const Edges& edges = node->getOutEdges(); for (Edges::const_iterator ite = edges.begin(), ende = edges.end(); ite!=ende; ++ite) { Edge* e = *ite; Node* nextNode = e->getTargetNode(); if (nextNode != loop->getHeader()) { calculateReachableNodesInLoop(loop, nextNode, stopNode, flags); } } }