--- old/src/share/vm/opto/vectornode.cpp Tue Sep 25 18:37:43 2012 +++ new/src/share/vm/opto/vectornode.cpp Tue Sep 25 18:37:43 2012 @@ -316,6 +316,24 @@ return NULL; } +VectorNode* VectorNode::shift_count(Compile* C, Node* shift, Node* cnt, uint vlen, BasicType bt) { + assert(VectorNode::is_shift(shift) && !cnt->is_Con(), "only variable shift count"); + // Match shift count type with shift vector type. + const TypeVect* vt = TypeVect::make(bt, vlen); + switch (shift->Opcode()) { + case Op_LShiftI: + case Op_LShiftL: + return new (C, 2) LShiftCntVNode(cnt, vt); + case Op_RShiftI: + case Op_RShiftL: + case Op_URShiftI: + case Op_URShiftL: + return new (C, 2) RShiftCntVNode(cnt, vt); + } + ShouldNotReachHere(); + return NULL; +} + // Return initial Pack node. Additional operands added with add_opd() calls. PackNode* PackNode::make(Compile* C, Node* s, uint vlen, BasicType bt) { const TypeVect* vt = TypeVect::make(bt, vlen); @@ -381,7 +399,6 @@ Node* adr, const TypePtr* atyp, uint vlen, BasicType bt) { const TypeVect* vt = TypeVect::make(bt, vlen); return new (C, 3) LoadVectorNode(ctl, mem, adr, atyp, vt); - return NULL; } // Return the vector version of a scalar store node.