--- old/src/share/vm/opto/superword.cpp 2015-04-06 14:41:57.939493600 -0700 +++ new/src/share/vm/opto/superword.cpp 2015-04-06 14:41:57.749474600 -0700 @@ -1167,7 +1167,12 @@ uint size = p->size(); if (p0->is_reduction()) { const Type *arith_type = p0->bottom_type(); - retValue = ReductionNode::implemented(opc, size, arith_type->basic_type()); + // Length 2 reductions of INT/LONG do not offer performance benefits + if (((arith_type->basic_type() == T_INT) || (arith_type->basic_type() == T_LONG)) && (size == 2)) { + retValue = false; + } else { + retValue = ReductionNode::implemented(opc, size, arith_type->basic_type()); + } } else { retValue = VectorNode::implemented(opc, size, velt_basic_type(p0)); } @@ -1210,7 +1215,7 @@ if (p0->is_reduction()) { Node* second_in = p0->in(2); Node_List* second_pk = my_pack(second_in); - if (second_pk == NULL) { + if ((second_pk == NULL) || (_packset.length() < 3)) { // Remove reduction flag if no parent pack, it is not profitable p0->remove_flag(Node::Flag_is_reduction); return false;