Skip to content

Commit

Permalink
Do not trust nullable arrayclass type in VP
Browse files Browse the repository at this point in the history
Update isUnreliableSignatureType to check if the class
is an array class. If the class is an array class and
its component class is value type and the array class
is not null-restricted array, the type is not reliable
because it can either be a nullable array class type
or a null-restricted array type.

Fixes: #19914
Signed-off-by: Annabelle Huo <[email protected]>
  • Loading branch information
a7ehuo committed Oct 28, 2024
1 parent c67b5f4 commit 79e5a3e
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 5 deletions.
14 changes: 14 additions & 0 deletions runtime/compiler/optimizer/J9ValuePropagation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3782,9 +3782,23 @@ bool J9::ValuePropagation::isUnreliableSignatureType(
return false;

int32_t numDims = 0;
TR_OpaqueClassBlock *originClass = klass;
klass = comp()->fej9()->getBaseComponentClass(klass, numDims);
if (!TR::Compiler->cls.isInterfaceClass(comp(), klass))
{
// If the original class is an array class and it is not a null-restricted array,
// we can not trust its type because it can be a nullable array class type or a null-restricted array type
if (TR::Compiler->om.areFlattenableValueTypesEnabled() &&
(numDims > 0) &&
TR::Compiler->cls.isValueTypeClass(klass) &&
!TR::Compiler->cls.isArrayNullRestricted(comp(), originClass))
{
erased = NULL;
return true;
}

return false;
}

// Find the best array type that we can guarantee based on an
// array-of-interface signature.
Expand Down
9 changes: 4 additions & 5 deletions test/functional/Valhalla/playlist.xml
Original file line number Diff line number Diff line change
Expand Up @@ -339,8 +339,7 @@
<variation>-Xint</variation>
<variation>-Xint -Xgcpolicy:optthruput -XX:ValueTypeFlatteningThreshold=99999</variation>
<variation>-Xint -Xgcpolicy:optthruput -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
<!-- https://github.com/eclipse-openj9/openj9/issues/19914 -->
<!--<variation>-Xjit:count=0</variation>
<variation>-Xjit:count=0</variation>
<variation>-Xjit:count=1,disableAsyncCompilation -Xgcpolicy:optthruput</variation>
<variation>-Xjit:count=1,disableAsyncCompilation -Xgcpolicy:optthruput -XX:ValueTypeFlatteningThreshold=99999 -XX:-EnableArrayFlattening</variation>
<variation>-Xjit:count=1,disableAsyncCompilation -Xgcpolicy:optthruput -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
Expand All @@ -349,17 +348,17 @@
<variation>-Xjit:count=1,disableAsyncCompilation -Xgcpolicy:gencon -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
<variation>-Xjit:count=1,disableAsyncCompilation -Xnocompressedrefs -Xgcpolicy:optthruput -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
<variation>-Xjit:count=1,disableAsyncCompilation -Xnocompressedrefs -Xgcpolicy:gencon -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
<variation>-Xjit:count=1,disableAsyncCompilation -Xnocompressedrefs -Xgcpolicy:gencon</variation>-->
<variation>-Xjit:count=1,disableAsyncCompilation -Xnocompressedrefs -Xgcpolicy:gencon</variation>
<!-- Test the above options with initialOptLevel=warm -->
<!--<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xgcpolicy:optthruput</variation>
<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xgcpolicy:optthruput</variation>
<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xgcpolicy:optthruput -XX:ValueTypeFlatteningThreshold=99999 -XX:-EnableArrayFlattening</variation>
<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xgcpolicy:optthruput -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xgcpolicy:gencon -XX:ValueTypeFlatteningThreshold=12 -XX:-EnableArrayFlattening</variation>
<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xgcpolicy:gencon -XX:ValueTypeFlatteningThreshold=99999 -XX:-EnableArrayFlattening</variation>
<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xgcpolicy:gencon -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xnocompressedrefs -Xgcpolicy:optthruput -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xnocompressedrefs -Xgcpolicy:gencon -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xnocompressedrefs -Xgcpolicy:gencon</variation>-->
<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xnocompressedrefs -Xgcpolicy:gencon</variation>
</variations>
<command>$(JAVA_COMMAND) $(JVM_OPTIONS) \
--enable-preview \
Expand Down

0 comments on commit 79e5a3e

Please sign in to comment.