src/share/vm/opto/loopopts.cpp

changeset 686
020a0b730379
parent 670
9c2ecc2ffb12
child 688
b0fe4deeb9fb
     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) {

mercurial