--- a/hotspot/src/share/vm/opto/loopnode.cpp Wed Sep 17 08:29:17 2008 -0700
+++ b/hotspot/src/share/vm/opto/loopnode.cpp Wed Sep 17 12:59:52 2008 -0700
@@ -1279,7 +1279,7 @@
// Visit all children, looking for Phis
for (DUIterator i = cl->outs(); cl->has_out(i); i++) {
Node *out = cl->out(i);
- if (!out->is_Phi()) continue; // Looking for phis
+ if (!out->is_Phi() || out == phi) continue; // Looking for other phis
PhiNode* phi2 = out->as_Phi();
Node *incr2 = phi2->in( LoopNode::LoopBackControl );
// Look for induction variables of the form: X += constant
@@ -1388,6 +1388,37 @@
#endif
+static void log_loop_tree(IdealLoopTree* root, IdealLoopTree* loop, CompileLog* log) {
+ if (loop == root) {
+ if (loop->_child != NULL) {
+ log->begin_head("loop_tree");
+ log->end_head();
+ if( loop->_child ) log_loop_tree(root, loop->_child, log);
+ log->tail("loop_tree");
+ assert(loop->_next == NULL, "what?");
+ }
+ } else {
+ Node* head = loop->_head;
+ log->begin_head("loop");
+ log->print(" idx='%d' ", head->_idx);
+ if (loop->_irreducible) log->print("irreducible='1' ");
+ if (head->is_Loop()) {
+ if (head->as_Loop()->is_inner_loop()) log->print("inner_loop='1' ");
+ if (head->as_Loop()->is_partial_peel_loop()) log->print("partial_peel_loop='1' ");
+ }
+ if (head->is_CountedLoop()) {
+ CountedLoopNode* cl = head->as_CountedLoop();
+ if (cl->is_pre_loop()) log->print("pre_loop='%d' ", cl->main_idx());
+ if (cl->is_main_loop()) log->print("main_loop='%d' ", cl->_idx);
+ if (cl->is_post_loop()) log->print("post_loop='%d' ", cl->main_idx());
+ }
+ log->end_head();
+ if( loop->_child ) log_loop_tree(root, loop->_child, log);
+ log->tail("loop");
+ if( loop->_next ) log_loop_tree(root, loop->_next, log);
+ }
+}
+
//=============================================================================
//------------------------------PhaseIdealLoop---------------------------------
// Create a PhaseLoop. Build the ideal Loop tree. Map each Ideal Node to
@@ -1624,10 +1655,13 @@
// Cleanup any modified bits
_igvn.optimize();
- // Do not repeat loop optimizations if irreducible loops are present
- // by claiming no-progress.
- if( _has_irreducible_loops )
- C->clear_major_progress();
+ // disable assert until issue with split_flow_path is resolved (6742111)
+ // assert(!_has_irreducible_loops || C->parsed_irreducible_loop() || C->is_osr_compilation(),
+ // "shouldn't introduce irreducible loops");
+
+ if (C->log() != NULL) {
+ log_loop_tree(_ltree_root, _ltree_root, C->log());
+ }
}
#ifndef PRODUCT
@@ -2732,11 +2766,7 @@
}
void PhaseIdealLoop::dump( IdealLoopTree *loop, uint idx, Node_List &rpo_list ) const {
-
- // Indent by loop nesting depth
- for( uint x = 0; x < loop->_nest; x++ )
- tty->print(" ");
- tty->print_cr("---- Loop N%d-N%d ----", loop->_head->_idx,loop->_tail->_idx);
+ loop->dump_head();
// Now scan for CFG nodes in the same loop
for( uint j=idx; j > 0; j-- ) {