< 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,187 **** 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_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); } 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) { --- 176,199 ---- 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) || 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,238 **** 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_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); } 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) { --- 239,262 ---- 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) || 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,289 **** 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_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); } 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) { --- 302,325 ---- 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) || 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,340 **** 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_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); } 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) { --- 365,388 ---- 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) || 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,391 **** 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_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); } 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) { --- 428,451 ---- 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) || 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,454 **** 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_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); } #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(__)); } bool ciType::is_vectorapi_vector() { return is_float_vec_or_mask(__) || is_double_vec_or_mask(__) || --- 491,526 ---- 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) || 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_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,473 **** --- 536,551 ---- 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 >