void LoopFinder::compute_loop_exits_and_entries(LoopList* loops) { // create loop exits for each loop int loop_index = loops->length() - 1; for (; loop_index >= 0; loop_index--) { Loop* loop = loops->at(loop_index); int n = loop->nof_blocks() - 1; // mark all nodes belonging to this loop for (; n >= 0; n --) { BlockBegin* bb = loop->block_no(n); bb->set_loop_index(loop_index); } find_loop_entries(loop->start(), loop); // search for blocks that have successors outside the loop n = loop->nof_blocks() - 1; for (; n >= 0; n--) { BlockBegin* bb = loop->block_no(n); find_loop_exits(bb, loop); } } }