Skip to content

Commit

Permalink
Merge pull request #18597 from theresa-m/split_ddrlw5
Browse files Browse the repository at this point in the history
valuetypeddrtests with Valhalla lw5
  • Loading branch information
hangshao0 authored Jan 12, 2024
2 parents d5d5c9b + 4739d64 commit 0cbeed0
Show file tree
Hide file tree
Showing 7 changed files with 298 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import static com.ibm.j9ddr.vm29.j9.ObjectFieldInfo.LOCKWORD_SIZE;
import static com.ibm.j9ddr.vm29.j9.ObjectFieldInfo.NO_BACKFILL_AVAILABLE;
import static com.ibm.j9ddr.vm29.j9.ObjectFieldInfo.fj9object_t_SizeOf;
import static com.ibm.j9ddr.vm29.structure.J9FieldFlags.J9FieldFlagIsNullRestricted;
import static com.ibm.j9ddr.vm29.structure.J9FieldFlags.J9FieldFlagObject;
import static com.ibm.j9ddr.vm29.structure.J9FieldFlags.J9FieldSizeDouble;
import static com.ibm.j9ddr.vm29.structure.J9JavaAccessFlags.J9AccStatic;
Expand Down Expand Up @@ -219,7 +220,9 @@ private void fieldOffsetsFindNext() throws CorruptDataException {
} else {
if (walkFlags.anyBitsIn(J9VM_FIELD_OFFSET_WALK_INCLUDE_INSTANCE)) {
if (modifiers.anyBitsIn(J9FieldFlagObject)) {
if (valueTypeHelper.isFlattenableFieldSignature(J9ROMFieldShapeHelper.getSignature(localField))) {
if (valueTypeHelper.isFlattenableFieldSignature(J9ROMFieldShapeHelper.getSignature(localField))
|| modifiers.anyBitsIn(J9FieldFlagIsNullRestricted)
) {
J9ClassPointer fieldClass = valueTypeHelper.findJ9ClassInFlattenedClassCacheWithFieldName(instanceClass, J9ROMFieldShapeHelper.getName(localField));
if (valueTypeHelper.isJ9FieldIsFlattened(fieldClass, localField)) {
UDATA size = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
*******************************************************************************/
package com.ibm.j9ddr.vm29.j9;

import static com.ibm.j9ddr.vm29.structure.J9FieldFlags.J9FieldFlagIsNullRestricted;
import static com.ibm.j9ddr.vm29.structure.J9FieldFlags.J9FieldFlagObject;
import static com.ibm.j9ddr.vm29.structure.J9FieldFlags.J9FieldSizeDouble;
import static com.ibm.j9ddr.vm29.structure.J9JavaAccessFlags.J9AccStatic;
Expand Down Expand Up @@ -393,7 +394,9 @@ boolean isInstanceFieldBackfillEligible() {
UDATA modifiers = f.modifiers();
if (!modifiers.anyBitsIn(J9AccStatic) ) {
if (modifiers.anyBitsIn(J9FieldFlagObject)) {
if (valueTypeHelper.isFlattenableFieldSignature(J9ROMFieldShapeHelper.getSignature(f))) {
if (valueTypeHelper.isFlattenableFieldSignature(J9ROMFieldShapeHelper.getSignature(f))
|| modifiers.anyBitsIn(J9FieldFlagIsNullRestricted)
) {
int size = 0;
J9ClassPointer fieldClass = valueTypeHelper.findJ9ClassInFlattenedClassCacheWithFieldName(containerClazz, J9ROMFieldShapeHelper.getName(f));
if (!valueTypeHelper.isJ9FieldIsFlattened(fieldClass, f)) {
Expand Down
23 changes: 17 additions & 6 deletions runtime/vm/createramclass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ extern "C" {

#define LOCAL_INTERFACE_ARRAY_SIZE 10

#define DEFAULLT_NUMBER_OF_ENTRIES_IN_FLATTENED_CLASS_CACHE 8
#define DEFAULT_NUMBER_OF_ENTRIES_IN_FLATTENED_CLASS_CACHE 8

enum J9ClassFragments {
RAM_CLASS_HEADER_FRAGMENT,
Expand Down Expand Up @@ -1975,8 +1975,12 @@ loadFlattenableFieldValueClasses(J9VMThread *currentThread, J9ClassLoader *class
goto done;
} else {
J9ROMClass *valueROMClass = valueClass->romClass;

if (!J9ROMCLASS_IS_PRIMITIVE_VALUE_TYPE(valueROMClass)) {
/* This restriction has been relaxed from J9ROMCLASS_IS_PRIMITIVE_VALUE_TYPE
* to prevent errors while using the J9ClassIsPrimitiveValueType flag to indicate
* flattening eligibility for nullrestricted fields. Eventually this case will be
* removed with Q types.
*/
if (!J9ROMCLASS_IS_VALUE(valueROMClass)) {
J9UTF8 *badClass = NNSRP_GET(valueROMClass->className, J9UTF8*);
setCurrentExceptionNLSWithArgs(currentThread, J9NLS_VM_ERROR_QTYPE_NOT_VALUE_TYPE, J9VMCONSTANTPOOL_JAVALANGINCOMPATIBLECLASSCHANGEERROR, J9UTF8_LENGTH(badClass), J9UTF8_DATA(badClass));
result = FALSE;
Expand Down Expand Up @@ -2356,8 +2360,15 @@ internalCreateRAMClassDone(J9VMThread *vmThread, J9ClassLoader *classLoader, J9C
if (J9ROMCLASS_IS_VALUE(romClass)) {
classFlags |= J9ClassIsValueType;
#if defined(J9VM_OPT_VALHALLA_FLATTENABLE_VALUE_TYPES)
if (J9ROMCLASS_IS_PRIMITIVE_VALUE_TYPE(romClass)) {
if (J9ROMCLASS_IS_PRIMITIVE_VALUE_TYPE(romClass)
|| (J9_ARE_ALL_BITS_SET(romClass->optionalFlags, J9_ROMCLASS_OPTINFO_IMPLICITCREATION_ATTRIBUTE)
&& J9_ARE_ALL_BITS_SET(getImplicitCreationFlags(romClass), J9AccImplicitCreateHasDefaultValue))
) {
UDATA instanceSize = state->ramClass->totalInstanceSize;
/* This ram class flag is not correct for the nullrestricted value class case
* since the meaning of primitive and nullrestricted don't fully overlap.
* Using it for now to enable flattening of nullrestricted fields.
*/
classFlags |= J9ClassIsPrimitiveValueType;
if ((instanceSize <= javaVM->valueFlatteningThreshold)
&& !J9ROMCLASS_IS_CONTENDED(romClass)
Expand Down Expand Up @@ -3550,7 +3561,7 @@ internalCreateRAMClassFromROMClass(J9VMThread *vmThread, J9ClassLoader *classLoa
UDATA romFieldCount = romClass->romFieldCount;
UDATA valueTypeFlags = 0;
UDATA flattenedClassCacheAllocSize = sizeof(J9FlattenedClassCache) + (sizeof(J9FlattenedClassCacheEntry) * romFieldCount);
U_8 flattenedClassCacheBuffer[sizeof(J9FlattenedClassCache) + (sizeof(J9FlattenedClassCacheEntry) * DEFAULLT_NUMBER_OF_ENTRIES_IN_FLATTENED_CLASS_CACHE)] = {0};
U_8 flattenedClassCacheBuffer[sizeof(J9FlattenedClassCache) + (sizeof(J9FlattenedClassCacheEntry) * DEFAULT_NUMBER_OF_ENTRIES_IN_FLATTENED_CLASS_CACHE)] = {0};
J9FlattenedClassCache *flattenedClassCache = (J9FlattenedClassCache *) flattenedClassCacheBuffer;
PORT_ACCESS_FROM_VMC(vmThread);
#endif /* defined(J9VM_OPT_VALHALLA_FLATTENABLE_VALUE_TYPES) */
Expand Down Expand Up @@ -3663,7 +3674,7 @@ internalCreateRAMClassFromROMClass(J9VMThread *vmThread, J9ClassLoader *classLoa
}
}
#if defined(J9VM_OPT_VALHALLA_FLATTENABLE_VALUE_TYPES)
if (romFieldCount > DEFAULLT_NUMBER_OF_ENTRIES_IN_FLATTENED_CLASS_CACHE) {
if (romFieldCount > DEFAULT_NUMBER_OF_ENTRIES_IN_FLATTENED_CLASS_CACHE) {
flattenedClassCache = (J9FlattenedClassCache *) j9mem_allocate_memory(flattenedClassCacheAllocSize, J9MEM_CATEGORY_CLASSES);
if (NULL == flattenedClassCache) {
setNativeOutOfMemoryError(vmThread, 0, 0);
Expand Down
5 changes: 3 additions & 2 deletions test/functional/Valhalla/playlist.xml
Original file line number Diff line number Diff line change
Expand Up @@ -301,9 +301,10 @@
<variation>-Xint -XX:ValueTypeFlatteningThreshold=99999 -XX:-EnableArrayFlattening</variation>
<variation>-Xint -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
<variation>-Xjit:count=0</variation>
<variation>-Xjit:count=1,disableAsyncCompilation</variation>
<!-- https://github.com/eclipse-openj9/openj9/issues/18742 -->
<!--<variation>-Xjit:count=1,disableAsyncCompilation</variation>
<variation>-Xjit:count=1,disableAsyncCompilation -XX:ValueTypeFlatteningThreshold=99999 -XX:-EnableArrayFlattening</variation>
<variation>-Xjit:count=1,disableAsyncCompilation -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
<variation>-Xjit:count=1,disableAsyncCompilation -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation> -->
</variations>
<command>$(JAVA_COMMAND) $(JVM_OPTIONS) \
--enable-preview \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,9 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0-only WITH Classpath-ex
<input>!j9object $flatSingleBackfillInstance$</input>
<input>quit</input>
</command>
<output regex="no" type="success" showMatch="yes">l (offset = 4) (ValueLong)</output>
<output regex="no" type="success" showMatch="yes">o (offset = 12) (ValueObject)</output>
<output regex="no" type="success" showMatch="yes">i (offset = 0) (ValueInt)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">l \(offset = 4\) \(.*ValueLong\)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">o \(offset = 12\) \(.*ValueObject\)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">i \(offset = 0\) \(.*ValueInt\)</output>
<output regex="no" type="success" showMatch="yes">// FlatSingleBackfill</output>
<output regex="no" type="failure">Problem running command</output>
</test>
Expand All @@ -103,6 +103,7 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0-only WITH Classpath-ex
<input>!flatobject $flatSingleBackfillInstance$</input>
<input>quit</input>
</command>
<!-- TODO change to J l = 0xFAFBFCFD11223344 for lw5-->
<output regex="no" type="success" showMatch="yes">J j = 0xFAFBFCFD11223344</output>
<output regex="no" type="success" showMatch="yes">I i = 0x12123434</output>
<output regex="no" type="success" showMatch="yes">i (offset = 0) (ValueInt)</output>
Expand All @@ -127,9 +128,9 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0-only WITH Classpath-ex
<input>!j9object $objectBackfillInstance$</input>
<input>quit</input>
</command>
<output regex="no" type="success" showMatch="yes">l (offset = 4) (ValueLong)</output>
<output regex="no" type="success" showMatch="yes">o (offset = 0) (ValueObject)</output>
<output regex="no" type="success" showMatch="yes">// FlatObjectBackfill</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">l \(offset = 4\) \(.*ValueLong\)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">o \(offset = 0\) \(.*ValueObject\)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">// .*FlatObjectBackfill</output>
<output regex="no" type="failure">Problem running command</output>
</test>

Expand All @@ -140,7 +141,7 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0-only WITH Classpath-ex
<input>quit</input>
</command>
<output regex="no" type="success" showMatch="yes">J j = 0xFAFBFCFD11223344</output>
<output regex="no" type="success" showMatch="yes">// ValueLong</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">// .*ValueLong</output>
<output regex="no" type="failure">Problem running command</output>
</test>

Expand Down Expand Up @@ -171,10 +172,10 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0-only WITH Classpath-ex
<input>!j9object $flatUnAlignedSingleBackfillInstance$</input>
<input>quit</input>
</command>
<output regex="no" type="success" showMatch="yes">l (offset = 4) (ValueLong)</output>
<output regex="no" type="success" showMatch="yes">singles (offset = 12) (FlatUnAlignedSingle)</output>
<output regex="no" type="success" showMatch="yes">o (offset = 0) (ValueObject)</output>
<output regex="no" type="success" showMatch="yes">// FlatUnAlignedSingleBackfill</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">l \(offset = 4\) \(.*ValueLong\)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">singles \(offset = 12\) \(.*FlatUnAlignedSingle\)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">o \(offset = 0\) \(.*ValueObject\)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">// .*FlatUnAlignedSingleBackfill</output>
<output regex="no" type="failure">Problem running command</output>
</test>

Expand Down Expand Up @@ -245,10 +246,10 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0-only WITH Classpath-ex
<input>!j9object $flatUnAlignedSingleBackfill2Instance$</input>
<input>quit</input>
</command>
<output regex="no" type="success" showMatch="yes">l (offset = 12) (ValueLong)</output>
<output regex="no" type="success" showMatch="yes">singles (offset = 0) (FlatUnAlignedSingle)</output>
<output regex="no" type="success" showMatch="yes">singles2 (offset = 20) (FlatUnAlignedSingle)</output>
<output regex="no" type="success" showMatch="yes">// FlatUnAlignedSingleBackfill2</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">l \(offset = 12\) /(.*ValueLong/)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">singles /(offset = 0/) /(.*FlatUnAlignedSingle/)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">singles2 /(offset = 20/) /(.*FlatUnAlignedSingle/)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">// .*FlatUnAlignedSingleBackfill2</output>
<output regex="no" type="failure">Problem running command</output>
</test>

Expand All @@ -274,10 +275,10 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0-only WITH Classpath-ex
<input>!j9object $flatUnAlignedObjectBackfillInstance$</input>
<input>quit</input>
</command>
<output regex="no" type="success" showMatch="yes">objects (offset = 0) (FlatUnAlignedObject)</output>
<output regex="no" type="success" showMatch="yes">objects2 (offset = 20) (FlatUnAlignedObject)</output>
<output regex="no" type="success" showMatch="yes">l (offset = 12) (ValueLong)</output>
<output regex="no" type="success" showMatch="yes">// FlatUnAlignedObjectBackfill</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">objects \(offset = 0\) \(.*FlatUnAlignedObject\)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">objects2 \(offset = 20\) \(.*FlatUnAlignedObject\)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">l \(offset = 12\) \(.*ValueLong\)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">// .*FlatUnAlignedObjectBackfill</output>
<output regex="no" type="failure">Problem running command</output>
</test>

Expand All @@ -301,10 +302,10 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0-only WITH Classpath-ex
<input>!j9object $flatUnAlignedObjectBackfill2Instance$</input>
<input>quit</input>
</command>
<output regex="no" type="success" showMatch="yes">o (offset = 0) (ValueObject)</output>
<output regex="no" type="success" showMatch="yes">objects (offset = 12) (FlatUnAlignedObject)</output>
<output regex="no" type="success" showMatch="yes">l (offset = 4) (ValueLong)</output>
<output regex="no" type="success" showMatch="yes">// FlatUnAlignedObjectBackfill2</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">o \(offset = 0\) \(.*ValueObject\)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">objects \(offset = 12\) \(.*FlatUnAlignedObject\)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">l \(offset = 4\) \(.*ValueLong\)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">// .*FlatUnAlignedObjectBackfill2</output>
<output regex="no" type="failure">Problem running command</output>
</test>

Expand All @@ -328,10 +329,10 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0-only WITH Classpath-ex
<input>!j9object $singleBackfillInstance$</input>
<input>quit</input>
</command>
<output regex="no" type="success" showMatch="yes">J l = 0xFAFBFCFD11223344 (offset = 4) (SingleBackfill)</output>
<output regex="no" type="success" showMatch="yes">(offset = 12) (SingleBackfill)</output>
<output regex="no" type="success" showMatch="yes">I i = 0x12123434 (offset = 0) (SingleBackfill)</output>
<output regex="no" type="success" showMatch="yes">// SingleBackfill</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">J l = 0xFAFBFCFD11223344 \(offset = 4\) \(.*SingleBackfill\)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">\(offset = 12\) \(.*SingleBackfill\)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">I i = 0x12123434 \(offset = 0\) \(.*SingleBackfill\)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">// .*SingleBackfill</output>
<output regex="no" type="failure">Problem running command</output>
</test>

Expand Down Expand Up @@ -364,8 +365,8 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0-only WITH Classpath-ex
<input>!j9object $objectBackfillInstance2$</input>
<input>quit</input>
</command>
<output regex="no" type="success" showMatch="yes">J l = 0xFAFBFCFD11223344 (offset = 4) (ObjectBackfill)</output>
<output regex="no" type="success" showMatch="yes">// ObjectBackfill</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">J l = 0xFAFBFCFD11223344 \(offset = 4\) \(.*ObjectBackfill\)</output>
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">// .*ObjectBackfill</output>
<output regex="no" type="failure">Problem running command</output>
</test>

Expand Down
Loading

0 comments on commit 0cbeed0

Please sign in to comment.