< prev index next >

src/hotspot/share/ci/ciType.cpp

Print this page
rev 52233 : Add scalable shapes for Arm Scalable Vector Extension.
Summary: Add scalable vector shapes to support Arm SVE better.
Reviewed-by: duke

@@ -176,12 +176,24 @@
   return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_Float512Vector_Float512Mask);
 }
 static bool is_float512(BasicType bt, vmSymbols::SID sid) {
   return is_float512vector(bt, sid) || is_float512species(bt, sid) || is_float512mask(bt, sid);
 }
+static bool is_float_scalable_vector(BasicType bt, vmSymbols::SID sid) {
+  return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_FloatScalableVector);
+}
+static bool is_float_scalable_species(BasicType bt, vmSymbols::SID sid) {
+  return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_FloatScalableVector_FloatScalableSpecies);
+}
+static bool is_float_scalable_mask(BasicType bt, vmSymbols::SID sid) {
+  return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_FloatScalableVector_FloatScalableMask);
+}
+static bool is_float_scalable(BasicType bt, vmSymbols::SID sid) {
+  return is_float_scalable_vector(bt, sid) || is_float_scalable_species(bt, sid) || is_float_scalable_mask(bt, sid);
+}
 static bool is_float_vec_or_mask(BasicType bt, vmSymbols::SID sid) {
-  return is_float64(bt, sid) || is_float128(bt, sid) || is_float256(bt, sid) || is_float512(bt, sid);
+  return is_float64(bt, sid) || is_float128(bt, sid) || is_float256(bt, sid) || is_float512(bt, sid) || is_float_scalable(bt, sid);
 }
 static bool is_double64vector(BasicType bt, vmSymbols::SID sid) {
   return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_Double64Vector);
 }
 static bool is_double64species(BasicType bt, vmSymbols::SID sid) {

@@ -227,12 +239,24 @@
   return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_Double512Vector_Double512Mask);
 }
 static bool is_double512(BasicType bt, vmSymbols::SID sid) {
   return is_double512vector(bt, sid) || is_double512species(bt, sid) || is_double512mask(bt, sid);
 }
+static bool is_double_scalable_vector(BasicType bt, vmSymbols::SID sid) {
+  return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_DoubleScalableVector);
+}
+static bool is_double_scalable_species(BasicType bt, vmSymbols::SID sid) {
+  return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_DoubleScalableVector_DoubleScalableSpecies);
+}
+static bool is_double_scalable_mask(BasicType bt, vmSymbols::SID sid) {
+  return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_DoubleScalableVector_DoubleScalableMask);
+}
+static bool is_double_scalable(BasicType bt, vmSymbols::SID sid) {
+  return is_double_scalable_vector(bt, sid) || is_double_scalable_species(bt, sid) || is_double_scalable_mask(bt, sid);
+}
 static bool is_double_vec_or_mask(BasicType bt, vmSymbols::SID sid) {
-  return is_double64(bt, sid) || is_double128(bt, sid) || is_double256(bt, sid) || is_double512(bt, sid);
+  return is_double64(bt, sid) || is_double128(bt, sid) || is_double256(bt, sid) || is_double512(bt, sid) || is_double_scalable(bt, sid);
 }
 static bool is_int64vector(BasicType bt, vmSymbols::SID sid) {
   return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_Int64Vector);
 }
 static bool is_int64species(BasicType bt, vmSymbols::SID sid) {

@@ -278,12 +302,24 @@
   return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_Int512Vector_Int512Mask);
 }
 static bool is_int512(BasicType bt, vmSymbols::SID sid) {
   return is_int512vector(bt, sid) || is_int512species(bt, sid) || is_int512mask(bt, sid);
 }
+static bool is_int_scalable_vector(BasicType bt, vmSymbols::SID sid) {
+  return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_IntScalableVector);
+}
+static bool is_int_scalable_species(BasicType bt, vmSymbols::SID sid) {
+  return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_IntScalableVector_IntScalableSpecies);
+}
+static bool is_int_scalable_mask(BasicType bt, vmSymbols::SID sid) {
+  return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_IntScalableVector_IntScalableMask);
+}
+static bool is_int_scalable(BasicType bt, vmSymbols::SID sid) {
+  return is_int_scalable_vector(bt, sid) || is_int_scalable_species(bt, sid) || is_int_scalable_mask(bt, sid);
+}
 static bool is_int_vec_or_mask(BasicType bt, vmSymbols::SID sid) {
-  return is_int64(bt, sid) || is_int128(bt, sid) || is_int256(bt, sid) || is_int512(bt, sid);
+  return is_int64(bt, sid) || is_int128(bt, sid) || is_int256(bt, sid) || is_int512(bt, sid) || is_int_scalable(bt, sid);
 }
 static bool is_long64vector(BasicType bt, vmSymbols::SID sid) {
   return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_Long64Vector);
 }
 static bool is_long64species(BasicType bt, vmSymbols::SID sid) {

@@ -329,12 +365,24 @@
   return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_Long512Vector_Long512Mask);
 }
 static bool is_long512(BasicType bt, vmSymbols::SID sid) {
   return is_long512vector(bt, sid) || is_long512species(bt, sid) || is_long512mask(bt, sid);
 }
+static bool is_long_scalable_vector(BasicType bt, vmSymbols::SID sid) {
+  return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_LongScalableVector);
+}
+static bool is_long_scalable_species(BasicType bt, vmSymbols::SID sid) {
+  return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_LongScalableVector_LongScalableSpecies);
+}
+static bool is_long_scalable_mask(BasicType bt, vmSymbols::SID sid) {
+  return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_LongScalableVector_LongScalableMask);
+}
+static bool is_long_scalable(BasicType bt, vmSymbols::SID sid) {
+  return is_long_scalable_vector(bt, sid) || is_long_scalable_species(bt, sid) || is_long_scalable_mask(bt, sid);
+}
 static bool is_long_vec_or_mask(BasicType bt, vmSymbols::SID sid) {
-  return is_long64(bt, sid) || is_long128(bt, sid) || is_long256(bt, sid) || is_long512(bt, sid);
+  return is_long64(bt, sid) || is_long128(bt, sid) || is_long256(bt, sid) || is_long512(bt, sid) || is_long_scalable(bt, sid);
 }
 static bool is_byte64vector(BasicType bt, vmSymbols::SID sid) {
   return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_Byte64Vector);
 }
 static bool is_byte64species(BasicType bt, vmSymbols::SID sid) {

@@ -380,12 +428,24 @@
   return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_Byte512Vector_Byte512Mask);
 }
 static bool is_byte512(BasicType bt, vmSymbols::SID sid) {
   return is_byte512vector(bt, sid) || is_byte512species(bt, sid) || is_byte512mask(bt, sid);
 }
+static bool is_byte_scalable_vector(BasicType bt, vmSymbols::SID sid) {
+  return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_ByteScalableVector);
+}
+static bool is_byte_scalable_species(BasicType bt, vmSymbols::SID sid) {
+  return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_ByteScalableVector_ByteScalableSpecies);
+}
+static bool is_byte_scalable_mask(BasicType bt, vmSymbols::SID sid) {
+  return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_ByteScalableVector_ByteScalableMask);
+}
+static bool is_byte_scalable(BasicType bt, vmSymbols::SID sid) {
+  return is_byte_scalable_vector(bt, sid) || is_byte_scalable_species(bt, sid) || is_byte_scalable_mask(bt, sid);
+}
 static bool is_byte_vec_or_mask(BasicType bt, vmSymbols::SID sid) {
-  return is_byte64(bt, sid) || is_byte128(bt, sid) || is_byte256(bt, sid) || is_byte512(bt, sid);
+  return is_byte64(bt, sid) || is_byte128(bt, sid) || is_byte256(bt, sid) || is_byte512(bt, sid) || is_byte_scalable(bt, sid);
 }
 static bool is_short64vector(BasicType bt, vmSymbols::SID sid) {
   return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_Short64Vector);
 }
 static bool is_short64species(BasicType bt, vmSymbols::SID sid) {

@@ -431,24 +491,36 @@
   return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_Short512Vector_Short512Mask);
 }
 static bool is_short512(BasicType bt, vmSymbols::SID sid) {
   return is_short512vector(bt, sid) || is_short512species(bt, sid) || is_short512mask(bt, sid);
 }
+static bool is_short_scalable_vector(BasicType bt, vmSymbols::SID sid) {
+  return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_ShortScalableVector);
+}
+static bool is_short_scalable_species(BasicType bt, vmSymbols::SID sid) {
+  return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_ShortScalableVector_ShortScalableSpecies);
+}
+static bool is_short_scalable_mask(BasicType bt, vmSymbols::SID sid) {
+  return bt == T_OBJECT && sid == vmSymbols::VM_SYMBOL_ENUM_NAME(jdk_incubator_vector_ShortScalableVector_ShortScalableMask);
+}
+static bool is_short_scalable(BasicType bt, vmSymbols::SID sid) {
+  return is_short_scalable_vector(bt, sid) || is_short_scalable_species(bt, sid) || is_short_scalable_mask(bt, sid);
+}
 static bool is_short_vec_or_mask(BasicType bt, vmSymbols::SID sid) {
-  return is_short64(bt, sid) || is_short128(bt, sid) || is_short256(bt, sid) || is_short512(bt, sid);
+  return is_short64(bt, sid) || is_short128(bt, sid) || is_short256(bt, sid) || is_short512(bt, sid) || is_short_scalable(bt, sid);
 }
 
 #define __ basic_type(), as_klass()->name()->sid()
 
 bool ciType::is_vectormask() {
   return basic_type() == T_OBJECT &&
-      (is_float64mask(__) || is_float128mask(__) || is_float256mask(__) || is_float512mask(__) ||
-       is_double64mask(__) || is_double128mask(__) || is_double256mask(__) || is_double512mask(__) ||
-       is_int64mask(__) || is_int128mask(__) || is_int256mask(__) || is_int512mask(__) ||
-       is_long64mask(__) || is_long128mask(__) || is_long256mask(__) || is_long512mask(__) ||
-       is_byte64mask(__) || is_byte128mask(__) || is_byte256mask(__) || is_byte512mask(__) ||
-       is_short64mask(__) || is_short128mask(__) || is_short256mask(__) || is_short512mask(__));
+      (is_float64mask(__) || is_float128mask(__) || is_float256mask(__) || is_float512mask(__) || is_float_scalable_mask(__) ||
+       is_double64mask(__) || is_double128mask(__) || is_double256mask(__) || is_double512mask(__) || is_double_scalable_mask(__) ||
+       is_int64mask(__) || is_int128mask(__) || is_int256mask(__) || is_int512mask(__) || is_int_scalable_mask(__) ||
+       is_long64mask(__) || is_long128mask(__) || is_long256mask(__) || is_long512mask(__) || is_long_scalable_mask(__) ||
+       is_byte64mask(__) || is_byte128mask(__) || is_byte256mask(__) || is_byte512mask(__) || is_byte_scalable_mask(__) ||
+       is_short64mask(__) || is_short128mask(__) || is_short256mask(__) || is_short512mask(__) ||  is_short_scalable_mask(__));
 }
 
 bool ciType::is_vectorapi_vector() {
   return is_float_vec_or_mask(__) ||
       is_double_vec_or_mask(__) ||

@@ -464,10 +536,16 @@
   if ( is_short64(__) || is_int128(__) || is_float128(__) || is_long256(__) || is_double256(__) ) return 4;
   if ( is_byte64(__) || is_short128(__) || is_int256(__) || is_float256(__) || is_long512(__) || is_double512(__) ) return 8;
   if ( is_byte128(__) || is_short256(__) || is_int512(__) || is_float512(__) ) return 16;
   if ( is_byte256(__) || is_short512(__) ) return 32;
   if ( is_byte512(__) ) return 64;
+  if ( is_double_scalable(__)) return Matcher::max_vector_size(T_DOUBLE);
+  if ( is_long_scalable(__)) return Matcher::max_vector_size(T_LONG);
+  if ( is_float_scalable(__)) return Matcher::max_vector_size(T_FLOAT);
+  if ( is_int_scalable(__)) return Matcher::max_vector_size(T_INT);
+  if ( is_short_scalable(__)) return Matcher::max_vector_size(T_SHORT);
+  if ( is_byte_scalable(__)) return Matcher::max_vector_size(T_BYTE);
   return -1;
 }
 
 BasicType ciType::vectorapi_vector_bt() {
   if ( is_float_vec_or_mask(__) ) return T_FLOAT;
< prev index next >