1.1 --- a/src/share/vm/opto/loopopts.cpp Fri Jul 25 11:32:56 2008 -0700 1.2 +++ b/src/share/vm/opto/loopopts.cpp Fri Jul 25 15:54:23 2008 -0700 1.3 @@ -1891,18 +1891,19 @@ 1.4 _igvn.hash_delete(use); 1.5 use->set_req(j, n_clone); 1.6 _igvn._worklist.push(use); 1.7 + Node* use_c; 1.8 if (!use->is_Phi()) { 1.9 - Node* use_c = has_ctrl(use) ? get_ctrl(use) : use->in(0); 1.10 - set_ctrl(n_clone, use_c); 1.11 - assert(!loop->is_member(get_loop(use_c)), "should be outside loop"); 1.12 - get_loop(use_c)->_body.push(n_clone); 1.13 + use_c = has_ctrl(use) ? get_ctrl(use) : use->in(0); 1.14 } else { 1.15 // Use in a phi is considered a use in the associated predecessor block 1.16 - Node *prevbb = use->in(0)->in(j); 1.17 - set_ctrl(n_clone, prevbb); 1.18 - assert(!loop->is_member(get_loop(prevbb)), "should be outside loop"); 1.19 - get_loop(prevbb)->_body.push(n_clone); 1.20 + use_c = use->in(0)->in(j); 1.21 } 1.22 + if (use_c->is_CountedLoop()) { 1.23 + use_c = use_c->in(LoopNode::EntryControl); 1.24 + } 1.25 + set_ctrl(n_clone, use_c); 1.26 + assert(!loop->is_member(get_loop(use_c)), "should be outside loop"); 1.27 + get_loop(use_c)->_body.push(n_clone); 1.28 _igvn.register_new_node_with_optimizer(n_clone); 1.29 #if !defined(PRODUCT) 1.30 if (TracePartialPeeling) {