< prev index next >

src/hotspot/share/opto/loopnode.cpp

Print this page

        

*** 2707,2721 **** _ltree_root->set_nest( 0 ); // Split shared headers and insert loop landing pads. // Do not bother doing this on the Root loop of course. if( !_verify_me && !_verify_only && _ltree_root->_child ) { C->print_method(PHASE_BEFORE_BEAUTIFY_LOOPS, 3); if( _ltree_root->_child->beautify_loops( this ) ) { ! // IdealLoopTree::split_outer_loop may produce phi-nodes with a single in edge. ! // Transform them away. _igvn.optimize(); // Re-build loop tree! _ltree_root->_child = NULL; _nodes.clear(); reallocate_preorders(); --- 2707,2729 ---- _ltree_root->set_nest( 0 ); // Split shared headers and insert loop landing pads. // Do not bother doing this on the Root loop of course. if( !_verify_me && !_verify_only && _ltree_root->_child ) { + bool change = true; + // Fix point iterate beautify_loops until it returns false + // Then no strucutral change has been made. + while (change) { + change = false; C->print_method(PHASE_BEFORE_BEAUTIFY_LOOPS, 3); if( _ltree_root->_child->beautify_loops( this ) ) { ! // IdealLoopTree::split_outer_loop may reduce phi-nodes to loop invariants, ! // and we want to get rid of them _igvn.optimize(); + change = true; // do one more iteration after clean up + orig_worklist_size = _igvn._worklist.size(); + } // Re-build loop tree! _ltree_root->_child = NULL; _nodes.clear(); reallocate_preorders();
< prev index next >