src/share/vm/opto/superword.cpp

changeset 7859
c1c199dde5c9
parent 7819
95dbbc0431d9
child 7994
04ff2f6cd0eb
child 8285
535618ab1c04
     1.1 --- a/src/share/vm/opto/superword.cpp	Tue May 06 09:17:57 2014 +0200
     1.2 +++ b/src/share/vm/opto/superword.cpp	Wed Jun 03 14:22:57 2015 +0200
     1.3 @@ -1431,7 +1431,7 @@
     1.4          }
     1.5          Node* adr = low_adr->in(MemNode::Address);
     1.6          const TypePtr* atyp = n->adr_type();
     1.7 -        vn = LoadVectorNode::make(C, opc, ctl, mem, adr, atyp, vlen, velt_basic_type(n));
     1.8 +        vn = LoadVectorNode::make(C, opc, ctl, mem, adr, atyp, vlen, velt_basic_type(n), control_dependency(p));
     1.9          vlen_in_bytes = vn->as_LoadVector()->memory_size();
    1.10        } else if (n->is_Store()) {
    1.11          // Promote value to be stored to vector
    1.12 @@ -2029,6 +2029,19 @@
    1.13    return n;
    1.14  }
    1.15  
    1.16 +LoadNode::ControlDependency SuperWord::control_dependency(Node_List* p) {
    1.17 +  LoadNode::ControlDependency dep = LoadNode::DependsOnlyOnTest;
    1.18 +  for (uint i = 0; i < p->size(); i++) {
    1.19 +    Node* n = p->at(i);
    1.20 +    assert(n->is_Load(), "only meaningful for loads");
    1.21 +    if (!n->depends_only_on_test()) {
    1.22 +      dep = LoadNode::Pinned;
    1.23 +    }
    1.24 +  }
    1.25 +  return dep;
    1.26 +}
    1.27 +
    1.28 +
    1.29  //----------------------------align_initial_loop_index---------------------------
    1.30  // Adjust pre-loop limit so that in main loop, a load/store reference
    1.31  // to align_to_ref will be a position zero in the vector.

mercurial