< prev index next >

src/share/vm/opto/gcm.cpp

Print this page

        

*** 1736,1745 **** --- 1736,1768 ---- ch->compute_loop_depth(depth + 1); ch = ch->_sibling; } } + Block *CFGLoop::backedge_block() { + Block* hd = head(); + Block* back_edge = NULL; + assert(_members.length() > 0, "no empty loops"); + for (int i = 0; i < _members.length(); i++) { + CFGElement* s = _members.at(i); + if (s->is_block()) { + Block* b = s->as_Block(); + if (b == hd) continue; + for (uint j = 0; j < b->_num_succs; j++) { + Block* sb = b->_succs[j]; + if (sb == hd) { + back_edge = b; + break; + } + } + } + if (back_edge) break; + } + + return back_edge; + } + //------------------------------compute_freq----------------------------------- // Compute the frequency of each block and loop, relative to a single entry // into the dominating loop head. void CFGLoop::compute_freq() { // Bottom up traversal of loop tree (visit inner loops first.)
< prev index next >