< 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 >