< prev index next >

src/hotspot/share/opto/superword.cpp

Print this page
*** 2562,11 ***
        } else if (opc == Op_SqrtF || opc == Op_SqrtD ||
                   opc == Op_AbsF || opc == Op_AbsD ||
                   opc == Op_AbsI || opc == Op_AbsL ||
                   opc == Op_NegF || opc == Op_NegD ||
                   opc == Op_RoundF || opc == Op_RoundD ||
!                  opc == Op_PopCountI || opc == Op_PopCountL) {
          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();
        } else if (opc == Op_ConvI2F || opc == Op_ConvL2D ||
--- 2562,13 ---
        } else if (opc == Op_SqrtF || opc == Op_SqrtD ||
                   opc == Op_AbsF || opc == Op_AbsD ||
                   opc == Op_AbsI || opc == Op_AbsL ||
                   opc == Op_NegF || opc == Op_NegD ||
                   opc == Op_RoundF || opc == Op_RoundD ||
!                  opc == Op_PopCountI || opc == Op_PopCountL ||
+                  opc == Op_CountLeadingZerosI || opc == Op_CountLeadingZerosL ||
+                  opc == Op_CountTrailingZerosI || opc == Op_CountTrailingZerosL) {
          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();
        } else if (opc == Op_ConvI2F || opc == Op_ConvL2D ||

*** 3030,13 ***
        }
      }
      return true;
    }
  
!   if (VectorNode::is_vpopcnt_long(use)) {
!     // VPOPCNT_LONG takes long and produces int - hence the special checks
!     // on alignment and size.
      if (u_pk->size() != d_pk->size()) {
        return false;
      }
      for (uint i = 0; i < MIN2(d_pk->size(), u_pk->size()); i++) {
        Node* ui = u_pk->at(i);
--- 3032,13 ---
        }
      }
      return true;
    }
  
!   if (VectorNode::is_type_transition_long_to_int(use)) {
!     // PopCountL/CountLeadingZerosL/CountTrailingZerosL takes long and produces
!     // int - hence the special checks on alignment and size.
      if (u_pk->size() != d_pk->size()) {
        return false;
      }
      for (uint i = 0; i < MIN2(d_pk->size(), u_pk->size()); i++) {
        Node* ui = u_pk->at(i);
< prev index next >