Skip to content

Commit 3974d87

Browse files
authored
Merge pull request eclipse-openj9#20420 from a7ehuo/valuetype-fix-null-restricted-array-type-vp
Do not trust nullable arrayclass type in VP
2 parents e577d65 + 04ce59f commit 3974d87

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

runtime/compiler/optimizer/J9ValuePropagation.cpp

+20-1
Original file line numberDiff line numberDiff line change
@@ -3782,9 +3782,28 @@ bool J9::ValuePropagation::isUnreliableSignatureType(
37823782
return false;
37833783

37843784
int32_t numDims = 0;
3785+
TR_OpaqueClassBlock *originClass = klass;
37853786
klass = comp()->fej9()->getBaseComponentClass(klass, numDims);
3787+
37863788
if (!TR::Compiler->cls.isInterfaceClass(comp(), klass))
3787-
return false;
3789+
{
3790+
// If the original class is an array class and it is not a null-restricted array,
3791+
// we can not trust its type as a nullable array because it can either be a nullable
3792+
// array class type or a null-restricted array type.
3793+
// TODO-VALUETYPE: However, if in the future Value Propagation constraints are able
3794+
// to distinguish between nullable and null-restricted arrays, this test can change.
3795+
if (TR::Compiler->om.areFlattenableValueTypesEnabled() &&
3796+
(numDims > 0) &&
3797+
TR::Compiler->cls.isValueTypeClass(klass) &&
3798+
!TR::Compiler->cls.isArrayNullRestricted(comp(), originClass))
3799+
{
3800+
// Do nothing here and will be handled next like an interface array
3801+
}
3802+
else
3803+
{
3804+
return false;
3805+
}
3806+
}
37883807

37893808
// Find the best array type that we can guarantee based on an
37903809
// array-of-interface signature.

test/functional/Valhalla/playlist.xml

+4-5
Original file line numberDiff line numberDiff line change
@@ -339,8 +339,7 @@
339339
<variation>-Xint</variation>
340340
<variation>-Xint -Xgcpolicy:optthruput -XX:ValueTypeFlatteningThreshold=99999</variation>
341341
<variation>-Xint -Xgcpolicy:optthruput -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
342-
<!-- https://github.com/eclipse-openj9/openj9/issues/19914 -->
343-
<!--<variation>-Xjit:count=0</variation>
342+
<variation>-Xjit:count=0</variation>
344343
<variation>-Xjit:count=1,disableAsyncCompilation -Xgcpolicy:optthruput</variation>
345344
<variation>-Xjit:count=1,disableAsyncCompilation -Xgcpolicy:optthruput -XX:ValueTypeFlatteningThreshold=99999 -XX:-EnableArrayFlattening</variation>
346345
<variation>-Xjit:count=1,disableAsyncCompilation -Xgcpolicy:optthruput -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
@@ -349,17 +348,17 @@
349348
<variation>-Xjit:count=1,disableAsyncCompilation -Xgcpolicy:gencon -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
350349
<variation>-Xjit:count=1,disableAsyncCompilation -Xnocompressedrefs -Xgcpolicy:optthruput -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
351350
<variation>-Xjit:count=1,disableAsyncCompilation -Xnocompressedrefs -Xgcpolicy:gencon -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
352-
<variation>-Xjit:count=1,disableAsyncCompilation -Xnocompressedrefs -Xgcpolicy:gencon</variation>-->
351+
<variation>-Xjit:count=1,disableAsyncCompilation -Xnocompressedrefs -Xgcpolicy:gencon</variation>
353352
<!-- Test the above options with initialOptLevel=warm -->
354-
<!--<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xgcpolicy:optthruput</variation>
353+
<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xgcpolicy:optthruput</variation>
355354
<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xgcpolicy:optthruput -XX:ValueTypeFlatteningThreshold=99999 -XX:-EnableArrayFlattening</variation>
356355
<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xgcpolicy:optthruput -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
357356
<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xgcpolicy:gencon -XX:ValueTypeFlatteningThreshold=12 -XX:-EnableArrayFlattening</variation>
358357
<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xgcpolicy:gencon -XX:ValueTypeFlatteningThreshold=99999 -XX:-EnableArrayFlattening</variation>
359358
<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xgcpolicy:gencon -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
360359
<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xnocompressedrefs -Xgcpolicy:optthruput -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
361360
<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xnocompressedrefs -Xgcpolicy:gencon -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
362-
<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xnocompressedrefs -Xgcpolicy:gencon</variation>-->
361+
<variation>-Xjit:count=1,disableAsyncCompilation,initialOptLevel=warm -Xnocompressedrefs -Xgcpolicy:gencon</variation>
363362
</variations>
364363
<command>$(JAVA_COMMAND) $(JVM_OPTIONS) \
365364
--enable-preview \

0 commit comments

Comments
 (0)