Skip to content

Commit b66536d

Browse files
authored
Merge pull request #22174 from gita-omr/all_intrinsics
Add missing VectorSupport intrinsics
2 parents 780b0e6 + 41c0346 commit b66536d

File tree

4 files changed

+88
-11
lines changed

4 files changed

+88
-11
lines changed

runtime/compiler/codegen/J9RecognizedMethodsEnum.hpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -516,13 +516,27 @@
516516
jdk_internal_vm_vector_VectorSupport_compare,
517517
jdk_internal_vm_vector_VectorSupport_compressExpandOp,
518518
jdk_internal_vm_vector_VectorSupport_convert,
519+
jdk_internal_vm_vector_VectorSupport_extract,
519520
jdk_internal_vm_vector_VectorSupport_fromBitsCoerced,
521+
jdk_internal_vm_vector_VectorSupport_indexPartiallyInUpperRange,
522+
jdk_internal_vm_vector_VectorSupport_indexVector,
523+
jdk_internal_vm_vector_VectorSupport_insert,
524+
jdk_internal_vm_vector_VectorSupport_loadMasked,
525+
jdk_internal_vm_vector_VectorSupport_loadWithMap,
520526
jdk_internal_vm_vector_VectorSupport_maskReductionCoerced,
527+
jdk_internal_vm_vector_VectorSupport_rearrangeOp,
521528
jdk_internal_vm_vector_VectorSupport_reductionCoerced,
529+
jdk_internal_vm_vector_VectorSupport_selectFromOp,
530+
jdk_internal_vm_vector_VectorSupport_selectFromTwoVectorOp,
531+
jdk_internal_vm_vector_VectorSupport_shuffleIota,
532+
jdk_internal_vm_vector_VectorSupport_shuffleToVector,
533+
jdk_internal_vm_vector_VectorSupport_storeMasked,
534+
jdk_internal_vm_vector_VectorSupport_storeWithMap,
522535
jdk_internal_vm_vector_VectorSupport_ternaryOp,
523536
jdk_internal_vm_vector_VectorSupport_test,
524537
jdk_internal_vm_vector_VectorSupport_unaryOp,
525-
LastVectorIntrinsicMethod = jdk_internal_vm_vector_VectorSupport_unaryOp,
538+
jdk_internal_vm_vector_VectorSupport_wrapShuffleIndexes,
539+
LastVectorIntrinsicMethod = jdk_internal_vm_vector_VectorSupport_wrapShuffleIndexes,
526540
LastVectorMethod = LastVectorIntrinsicMethod,
527541

528542
java_lang_reflect_Array_getLength,

runtime/compiler/env/j9method.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3079,12 +3079,42 @@ void TR_ResolvedJ9Method::construct()
30793079
{x(TR::jdk_internal_vm_vector_VectorSupport_compare, "compare", "(ILjava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;ILjdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$VectorMask;Ljdk/internal/vm/vector/VectorSupport$VectorCompareOp;)Ljdk/internal/vm/vector/VectorSupport$VectorMask;")},
30803080
{x(TR::jdk_internal_vm_vector_VectorSupport_compressExpandOp, "compressExpandOp", "(ILjava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;ILjdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$VectorMask;Ljdk/internal/vm/vector/VectorSupport$CompressExpandOperation;)Ljdk/internal/vm/vector/VectorSupport$VectorPayload;")},
30813081
{x(TR::jdk_internal_vm_vector_VectorSupport_convert, "convert", "(ILjava/lang/Class;Ljava/lang/Class;ILjava/lang/Class;Ljava/lang/Class;ILjdk/internal/vm/vector/VectorSupport$VectorPayload;Ljdk/internal/vm/vector/VectorSupport$VectorSpecies;Ljdk/internal/vm/vector/VectorSupport$VectorConvertOp;)Ljdk/internal/vm/vector/VectorSupport$VectorPayload;")},
3082+
3083+
{x(TR::jdk_internal_vm_vector_VectorSupport_extract, "extract", "(Ljava/lang/Class;Ljava/lang/Class;ILjdk/internal/vm/vector/VectorSupport$VectorPayload;ILjdk/internal/vm/vector/VectorSupport$VecExtractOp;)J")},
3084+
30823085
{x(TR::jdk_internal_vm_vector_VectorSupport_fromBitsCoerced, "fromBitsCoerced", "(Ljava/lang/Class;Ljava/lang/Class;IJILjdk/internal/vm/vector/VectorSupport$VectorSpecies;Ljdk/internal/vm/vector/VectorSupport$FromBitsCoercedOperation;)Ljdk/internal/vm/vector/VectorSupport$VectorPayload;")},
3086+
3087+
{x(TR::jdk_internal_vm_vector_VectorSupport_indexPartiallyInUpperRange, "indexPartiallyInUpperRange", "(Ljava/lang/Class;Ljava/lang/Class;IJJLjdk/internal/vm/vector/VectorSupport$IndexPartiallyInUpperRangeOperation;)Ljdk/internal/vm/vector/VectorSupport$VectorMask;")},
3088+
{x(TR::jdk_internal_vm_vector_VectorSupport_indexVector, "indexVector", "(Ljava/lang/Class;Ljava/lang/Class;ILjdk/internal/vm/vector/VectorSupport$Vector;ILjdk/internal/vm/vector/VectorSupport$VectorSpecies;Ljdk/internal/vm/vector/VectorSupport$IndexOperation;)Ljdk/internal/vm/vector/VectorSupport$Vector;")},
3089+
3090+
{x(TR::jdk_internal_vm_vector_VectorSupport_insert, "insert", "(Ljava/lang/Class;Ljava/lang/Class;ILjdk/internal/vm/vector/VectorSupport$Vector;IJLjdk/internal/vm/vector/VectorSupport$VecInsertOp;)Ljdk/internal/vm/vector/VectorSupport$Vector;")},
3091+
3092+
{x(TR::jdk_internal_vm_vector_VectorSupport_loadMasked, "loadMasked", "(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;ILjava/lang/Object;JZLjdk/internal/vm/vector/VectorSupport$VectorMask;ILjava/lang/Object;JLjdk/internal/vm/vector/VectorSupport$VectorSpecies;Ljdk/internal/vm/vector/VectorSupport$LoadVectorMaskedOperation;)Ljdk/internal/vm/vector/VectorSupport$Vector;")},
3093+
{x(TR::jdk_internal_vm_vector_VectorSupport_loadWithMap, "loadWithMap", "(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;ILjava/lang/Class;Ljava/lang/Object;JLjdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$VectorMask;Ljava/lang/Object;I[IILjdk/internal/vm/vector/VectorSupport$VectorSpecies;Ljdk/internal/vm/vector/VectorSupport$LoadVectorOperationWithMap;)Ljdk/internal/vm/vector/VectorSupport$Vector;")},
3094+
3095+
30833096
{x(TR::jdk_internal_vm_vector_VectorSupport_maskReductionCoerced, "maskReductionCoerced", "(ILjava/lang/Class;Ljava/lang/Class;ILjdk/internal/vm/vector/VectorSupport$VectorMask;Ljdk/internal/vm/vector/VectorSupport$VectorMaskOp;)J")},
3097+
3098+
{x(TR::jdk_internal_vm_vector_VectorSupport_rearrangeOp, "rearrangeOp", "(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;ILjdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$VectorShuffle;Ljdk/internal/vm/vector/VectorSupport$VectorMask;Ljdk/internal/vm/vector/VectorSupport$VectorRearrangeOp;)Ljdk/internal/vm/vector/VectorSupport$Vector;")},
30843099
{x(TR::jdk_internal_vm_vector_VectorSupport_reductionCoerced, "reductionCoerced", "(ILjava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;ILjdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$VectorMask;Ljdk/internal/vm/vector/VectorSupport$ReductionOperation;)J")},
3100+
3101+
3102+
{x(TR::jdk_internal_vm_vector_VectorSupport_selectFromOp, "selectFromOp", "(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;ILjdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$VectorMask;Ljdk/internal/vm/vector/VectorSupport$VectorSelectFromOp;)Ljdk/internal/vm/vector/VectorSupport$Vector;")},
3103+
{x(TR::jdk_internal_vm_vector_VectorSupport_selectFromTwoVectorOp, "selectFromTwoVectorOp", "(Ljava/lang/Class;Ljava/lang/Class;ILjdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$SelectFromTwoVector;)Ljdk/internal/vm/vector/VectorSupport$Vector;")},
3104+
3105+
3106+
{x(TR::jdk_internal_vm_vector_VectorSupport_shuffleIota, "shuffleIota", "(Ljava/lang/Class;Ljava/lang/Class;Ljdk/internal/vm/vector/VectorSupport$VectorSpecies;IIIILjdk/internal/vm/vector/VectorSupport$ShuffleIotaOperation;)Ljdk/internal/vm/vector/VectorSupport$VectorShuffle;")},
3107+
{x(TR::jdk_internal_vm_vector_VectorSupport_shuffleToVector, "shuffleToVector", "(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;Ljdk/internal/vm/vector/VectorSupport$VectorShuffle;ILjdk/internal/vm/vector/VectorSupport$ShuffleToVectorOperation;)Ljdk/internal/vm/vector/VectorSupport$Vector;")},
3108+
3109+
{x(TR::jdk_internal_vm_vector_VectorSupport_storeMasked, "storeMasked", "(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;ILjava/lang/Object;JZLjdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$VectorMask;Ljava/lang/Object;JLjdk/internal/vm/vector/VectorSupport$StoreVectorMaskedOperation;)V")},
3110+
{x(TR::jdk_internal_vm_vector_VectorSupport_storeWithMap, "storeWithMap", "(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;ILjava/lang/Class;Ljava/lang/Object;JLjdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$VectorMask;Ljava/lang/Object;I[IILjdk/internal/vm/vector/VectorSupport$StoreVectorOperationWithMap;)V")},
3111+
3112+
30853113
{x(TR::jdk_internal_vm_vector_VectorSupport_ternaryOp, "ternaryOp", "(ILjava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;ILjdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$VectorMask;Ljdk/internal/vm/vector/VectorSupport$TernaryOperation;)Ljdk/internal/vm/vector/VectorSupport$Vector;")},
30863114
{x(TR::jdk_internal_vm_vector_VectorSupport_test, "test", "(ILjava/lang/Class;Ljava/lang/Class;ILjdk/internal/vm/vector/VectorSupport$VectorMask;Ljdk/internal/vm/vector/VectorSupport$VectorMask;Ljava/util/function/BiFunction;)Z")},
30873115
{x(TR::jdk_internal_vm_vector_VectorSupport_unaryOp, "unaryOp", "(ILjava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;ILjdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$VectorMask;Ljdk/internal/vm/vector/VectorSupport$UnaryOperation;)Ljdk/internal/vm/vector/VectorSupport$Vector;")},
3116+
{x(TR::jdk_internal_vm_vector_VectorSupport_wrapShuffleIndexes, "wrapShuffleIndexes", "(Ljava/lang/Class;Ljava/lang/Class;Ljdk/internal/vm/vector/VectorSupport$VectorShuffle;ILjdk/internal/vm/vector/VectorSupport$WrapShuffleIndexesOperation;)Ljdk/internal/vm/vector/VectorSupport$VectorShuffle;")},
3117+
30883118
#if JAVA_SPEC_VERSION <= 21
30893119
{x(TR::jdk_internal_vm_vector_VectorSupport_store, "store", "(Ljava/lang/Class;Ljava/lang/Class;ILjava/lang/Object;JLjdk/internal/vm/vector/VectorSupport$VectorPayload;Ljava/lang/Object;JLjdk/internal/vm/vector/VectorSupport$StoreVectorOperation;)V")},
30903120
#else

runtime/compiler/optimizer/VectorAPIExpansion.cpp

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,19 @@ TR_VectorAPIExpansion::perform()
6767
}
6868

6969
bool
70-
TR_VectorAPIExpansion::isVectorAPIMethod(TR::MethodSymbol *methodSymbol)
70+
TR_VectorAPIExpansion::isVectorAPIMethod(TR::MethodSymbol *methodSymbol, bool reportAllMethods)
7171
{
7272
TR::RecognizedMethod index = methodSymbol->getRecognizedMethod();
7373

74-
return (index >= _firstMethod &&
75-
index <= _lastMethod);
74+
if (index >= _firstMethod && index <= _lastMethod)
75+
{
76+
return (reportAllMethods ||
77+
(methodTable[index - _firstMethod]._returnType != Invalid));
78+
}
79+
else
80+
{
81+
return false;
82+
}
7683
}
7784

7885
TR_VectorAPIExpansion::vapiObjType
@@ -1082,12 +1089,21 @@ TR_VectorAPIExpansion::findVectorMethods(TR::Compilation *comp, bool reportFound
10821089
{
10831090
TR::MethodSymbol *methodSymbol = node->getSymbolReference()->getSymbol()->castToMethodSymbol();
10841091

1085-
if (isVectorAPIMethod(methodSymbol))
1092+
if (isVectorAPIMethod(methodSymbol, reportFoundMethods))
10861093
{
10871094
if (reportFoundMethods &&
10881095
TR::Options::getVerboseOption(TR_VerboseVectorAPI))
10891096
{
1090-
TR_VerboseLog::writeLine(TR_Vlog_VECTOR_API, "Did not vectorize intrinsic in %s at %s %s",
1097+
TR::ResolvedMethodSymbol *resolvedMethodSymbol = (TR::ResolvedMethodSymbol *)methodSymbol;
1098+
1099+
const char *name = resolvedMethodSymbol->getResolvedMethod() ? resolvedMethodSymbol->getResolvedMethod()->nameChars()
1100+
: "unresolved";
1101+
1102+
uint16_t nameLen = resolvedMethodSymbol->getResolvedMethod() ? resolvedMethodSymbol->getResolvedMethod()->nameLength()
1103+
: 10; // length of "unresolved"
1104+
1105+
TR_VerboseLog::writeLine(TR_Vlog_VECTOR_API, "Did not vectorize %.*s() intrinsic in %s at %s %s",
1106+
name ? nameLen : 0, name ? name : "",
10911107
comp->signature(), comp->getHotnessName(comp->getMethodHotness()),
10921108
comp->isDLT() ? "DLT" : "");
10931109
}
@@ -3778,12 +3794,26 @@ TR_VectorAPIExpansion::methodTable[] =
37783794
{compareIntrinsicHandler, Mask, 1, 2, 3, 4, 5, 2, 7, {Unknown, Unknown, Unknown, ElementType, NumLanes, Vector, Vector, Mask}}, // jdk_internal_vm_vector_VectorSupport_compare
37793795
{compressExpandOpIntrinsicHandler, Unknown, 1, 2, 3, 4, 5, 2, -1, {Unknown, Unknown, Unknown, ElementType, NumLanes, Vector, Mask}}, // jdk_internal_vm_vector_VectorSupport_compressExpandOp
37803796
{convertIntrinsicHandler, Unknown, 1, 4, 5, 6, 7, 1, -1, {Unknown, Unknown, ElementType, NumLanes, Unknown, Unknown, Unknown, Vector}}, // jdk_internal_vm_vector_VectorSupport_convert
3797+
{unsupportedHandler, Invalid}, // jdk_internal_vm_vector_VectorSupport_extract
37813798
{fromBitsCoercedIntrinsicHandler, Unknown, 0, -1, 1, 2, -1, 0, -1, {Unknown, ElementType, NumLanes, Unknown, Unknown, Unknown}}, // jdk_internal_vm_vector_VectorSupport_fromBitsCoerced
3799+
{unsupportedHandler, Invalid}, // jdk_internal_vm_vector_VectorSupport_indexPartiallyInUpperRange
3800+
{unsupportedHandler, Invalid}, // jdk_internal_vm_vector_VectorSupport_indexVector
3801+
{unsupportedHandler, Invalid}, // jdk_internal_vm_vector_VectorSupport_insert
3802+
{unsupportedHandler, Invalid}, // jdk_internal_vm_vector_VectorSupport_loadMasked
3803+
{unsupportedHandler, Invalid}, // jdk_internal_vm_vector_VectorSupport_loadWithMap
37823804
{maskReductionCoercedIntrinsicHandler, Scalar, 1, -1, 2, 3, 4, 1, -1, {Unknown, Unknown, ElementType, NumLanes, Mask}}, // jdk_internal_vm_vector_VectorSupport_maskReductionCoerced
3805+
{unsupportedHandler, Invalid}, // jdk_internal_vm_vector_VectorSupport_rearrangeOp
37833806
{reductionCoercedIntrinsicHandler, Scalar, 1, 2, 3, 4, 5, 1, 6, {Unknown, Unknown, Unknown, ElementType, NumLanes, Vector, Mask}}, // jdk_internal_vm_vector_VectorSupport_reductionCoerced
3807+
{unsupportedHandler, Invalid}, // jdk_internal_vm_vector_VectorSupport_selectFromOp
3808+
{unsupportedHandler, Invalid}, // jdk_internal_vm_vector_VectorSupport_selectFromTwoVectorOp
3809+
{unsupportedHandler, Invalid}, // jdk_internal_vm_vector_VectorSupport_shuffleIota
3810+
{unsupportedHandler, Invalid}, // jdk_internal_vm_vector_VectorSupport_shuffleToVector
3811+
{unsupportedHandler, Invalid}, // jdk_internal_vm_vector_VectorSupport_storeMasked
3812+
{unsupportedHandler, Invalid}, // jdk_internal_vm_vector_VectorSupport_storeWithMap
37843813
{ternaryIntrinsicHandler, Vector, 1, 2, 3, 4, 5, 3, 8, {Unknown, Unknown, Unknown, ElementType, NumLanes, Vector, Vector, Vector, Mask}}, // jdk_internal_vm_vector_VectorSupport_ternaryOp
37853814
{testIntrinsicHandler, Scalar, 1, -1, 2, 3, 4, 1, 5, {Unknown, Unknown, ElementType, NumLanes, Mask, Mask, Unknown}}, // jdk_internal_vm_vector_VectorSupport_test
37863815
{unaryIntrinsicHandler, Vector, 1, 2, 3, 4, 5, 1, 6, {Unknown, Unknown, Unknown, ElementType, NumLanes, Vector, Mask}}, // jdk_internal_vm_vector_VectorSupport_unaryOp
3816+
{unsupportedHandler, Invalid}, // jdk_internal_vm_vector_VectorSupport_wrapShuffleIndexes
37873817
};
37883818

37893819

runtime/compiler/optimizer/VectorAPIExpansion.hpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -540,11 +540,14 @@ class TR_VectorAPIExpansion : public TR::Optimization
540540
* \param methodSymbol
541541
* Method symbol
542542
*
543+
* \param reportAllMethods
544+
* if true, report all vector methods, even not described in the table
545+
*
543546
* \return
544547
* \c true if \c methodSymbol is a recognized Vector API method(high level or intrinsic),
545548
* \c false otherwise
546549
*/
547-
static bool isVectorAPIMethod(TR::MethodSymbol * methodSymbol);
550+
static bool isVectorAPIMethod(TR::MethodSymbol * methodSymbol, bool reportAllMethods = false);
548551

549552

550553
/** \brief
@@ -1758,12 +1761,12 @@ class TR_VectorAPIExpansion : public TR::Optimization
17581761
{
17591762
bool twoTypes = opCode.isTwoTypeVectorOpCode();
17601763

1761-
TR_VerboseLog::writeLine(TR_Vlog_VECTOR_API, "%s%s%s%s is not implemented in %s",
1764+
TR_VerboseLog::writeLine(TR_Vlog_VECTOR_API, "%s%s%s%s is not implemented in %s at %s %S",
17621765
opCode.getName(),
17631766
twoTypes? TR::DataType::getName(opCode.getVectorSourceDataType()) : "",
17641767
twoTypes? "_" : "",
17651768
TR::DataType::getName(opCode.getVectorResultDataType()),
1766-
comp->signature());
1769+
comp->signature(), comp->getHotnessName(comp->getMethodHotness()), comp->isDLT() ? "DLT" : "");
17671770
}
17681771

17691772
return result;
@@ -1795,12 +1798,12 @@ class TR_VectorAPIExpansion : public TR::Optimization
17951798
{
17961799
if (TR::Options::getVerboseOption(TR_VerboseVectorAPI))
17971800
{
1798-
TR_VerboseLog::writeLine(TR_Vlog_VECTOR_API, "IL is missing for vectorAPIOpCode %s %d on %s %s in %s",
1801+
TR_VerboseLog::writeLine(TR_Vlog_VECTOR_API, "IL is missing for vectorAPIOpCode %s %d on %s %s in %s at %s %S",
17991802
vapiOpCodeTypeNames[opCodeType],
18001803
vectorAPIOpCode,
18011804
vapiObjTypeNames[objectType],
18021805
withMask ? "with Mask" : "",
1803-
comp->signature());
1806+
comp->signature(), comp->getHotnessName(comp->getMethodHotness()), comp->isDLT() ? "DLT" : "");
18041807
}
18051808

18061809
return TR::BadILOp;

0 commit comments

Comments
 (0)