1.1 --- a/src/share/vm/opto/superword.cpp Wed Jul 27 15:06:35 2011 -0700 1.2 +++ b/src/share/vm/opto/superword.cpp Wed Jul 27 17:28:36 2011 -0700 1.3 @@ -1167,7 +1167,7 @@ 1.4 1.5 } else if (n->is_Store()) { 1.6 // Promote value to be stored to vector 1.7 - VectorNode* val = vector_opd(p, MemNode::ValueIn); 1.8 + Node* val = vector_opd(p, MemNode::ValueIn); 1.9 1.10 int opc = n->Opcode(); 1.11 Node* ctl = n->in(MemNode::Control); 1.12 @@ -1199,7 +1199,7 @@ 1.13 1.14 //------------------------------vector_opd--------------------------- 1.15 // Create a vector operand for the nodes in pack p for operand: in(opd_idx) 1.16 -VectorNode* SuperWord::vector_opd(Node_List* p, int opd_idx) { 1.17 +Node* SuperWord::vector_opd(Node_List* p, int opd_idx) { 1.18 Node* p0 = p->at(0); 1.19 uint vlen = p->size(); 1.20 Node* opd = p0->in(opd_idx); 1.21 @@ -1215,9 +1215,10 @@ 1.22 } 1.23 1.24 if (same_opd) { 1.25 - if (opd->is_Vector()) { 1.26 - return (VectorNode*)opd; // input is matching vector 1.27 + if (opd->is_Vector() || opd->is_VectorLoad()) { 1.28 + return opd; // input is matching vector 1.29 } 1.30 + assert(!opd->is_VectorStore(), "such vector is not expected here"); 1.31 // Convert scalar input to vector. Use p0's type because it's container 1.32 // maybe smaller than the operand's container. 1.33 const Type* opd_t = velt_type(!in_bb(opd) ? p0 : opd);