--- old/src/hotspot/share/opto/superword.cpp 2018-03-12 17:44:11.495070392 -0700 +++ new/src/hotspot/share/opto/superword.cpp 2018-03-12 17:44:11.191069254 -0700 @@ -2325,8 +2325,11 @@ vn = VectorNode::make(opc, in1, in2, vlen, velt_basic_type(n)); vlen_in_bytes = vn->as_Vector()->length_in_bytes(); } - } else if (opc == Op_SqrtF || opc == Op_SqrtD || opc == Op_AbsF || opc == Op_AbsD || opc == Op_NegF || opc == Op_NegD) { - // Promote operand to vector (Sqrt/Abs/Neg are 2 address instructions) + } else if (opc == Op_SqrtF || opc == Op_SqrtD || + opc == Op_AbsF || opc == Op_AbsD || + opc == Op_NegF || opc == Op_NegD || + opc == Op_PopCountI) { + assert(n->req() == 2, "only one input expected"); Node* in = vector_opd(p, 1); vn = VectorNode::make(opc, in, NULL, vlen, velt_basic_type(n)); vlen_in_bytes = vn->as_Vector()->length_in_bytes();