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.