Skip to content

Commit 0cbeed0

Browse files
authored
Merge pull request #18597 from theresa-m/split_ddrlw5
valuetypeddrtests with Valhalla lw5
2 parents d5d5c9b + 4739d64 commit 0cbeed0

File tree

7 files changed

+298
-41
lines changed

7 files changed

+298
-41
lines changed

debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/J9ObjectFieldOffsetIterator_V1.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import static com.ibm.j9ddr.vm29.j9.ObjectFieldInfo.LOCKWORD_SIZE;
2727
import static com.ibm.j9ddr.vm29.j9.ObjectFieldInfo.NO_BACKFILL_AVAILABLE;
2828
import static com.ibm.j9ddr.vm29.j9.ObjectFieldInfo.fj9object_t_SizeOf;
29+
import static com.ibm.j9ddr.vm29.structure.J9FieldFlags.J9FieldFlagIsNullRestricted;
2930
import static com.ibm.j9ddr.vm29.structure.J9FieldFlags.J9FieldFlagObject;
3031
import static com.ibm.j9ddr.vm29.structure.J9FieldFlags.J9FieldSizeDouble;
3132
import static com.ibm.j9ddr.vm29.structure.J9JavaAccessFlags.J9AccStatic;
@@ -219,7 +220,9 @@ private void fieldOffsetsFindNext() throws CorruptDataException {
219220
} else {
220221
if (walkFlags.anyBitsIn(J9VM_FIELD_OFFSET_WALK_INCLUDE_INSTANCE)) {
221222
if (modifiers.anyBitsIn(J9FieldFlagObject)) {
222-
if (valueTypeHelper.isFlattenableFieldSignature(J9ROMFieldShapeHelper.getSignature(localField))) {
223+
if (valueTypeHelper.isFlattenableFieldSignature(J9ROMFieldShapeHelper.getSignature(localField))
224+
|| modifiers.anyBitsIn(J9FieldFlagIsNullRestricted)
225+
) {
223226
J9ClassPointer fieldClass = valueTypeHelper.findJ9ClassInFlattenedClassCacheWithFieldName(instanceClass, J9ROMFieldShapeHelper.getName(localField));
224227
if (valueTypeHelper.isJ9FieldIsFlattened(fieldClass, localField)) {
225228
UDATA size = null;

debugtools/DDR_VM/src/com/ibm/j9ddr/vm29/j9/ObjectFieldInfo.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
*******************************************************************************/
2222
package com.ibm.j9ddr.vm29.j9;
2323

24+
import static com.ibm.j9ddr.vm29.structure.J9FieldFlags.J9FieldFlagIsNullRestricted;
2425
import static com.ibm.j9ddr.vm29.structure.J9FieldFlags.J9FieldFlagObject;
2526
import static com.ibm.j9ddr.vm29.structure.J9FieldFlags.J9FieldSizeDouble;
2627
import static com.ibm.j9ddr.vm29.structure.J9JavaAccessFlags.J9AccStatic;
@@ -393,7 +394,9 @@ boolean isInstanceFieldBackfillEligible() {
393394
UDATA modifiers = f.modifiers();
394395
if (!modifiers.anyBitsIn(J9AccStatic) ) {
395396
if (modifiers.anyBitsIn(J9FieldFlagObject)) {
396-
if (valueTypeHelper.isFlattenableFieldSignature(J9ROMFieldShapeHelper.getSignature(f))) {
397+
if (valueTypeHelper.isFlattenableFieldSignature(J9ROMFieldShapeHelper.getSignature(f))
398+
|| modifiers.anyBitsIn(J9FieldFlagIsNullRestricted)
399+
) {
397400
int size = 0;
398401
J9ClassPointer fieldClass = valueTypeHelper.findJ9ClassInFlattenedClassCacheWithFieldName(containerClazz, J9ROMFieldShapeHelper.getName(f));
399402
if (!valueTypeHelper.isJ9FieldIsFlattened(fieldClass, f)) {

runtime/vm/createramclass.cpp

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ extern "C" {
5252

5353
#define LOCAL_INTERFACE_ARRAY_SIZE 10
5454

55-
#define DEFAULLT_NUMBER_OF_ENTRIES_IN_FLATTENED_CLASS_CACHE 8
55+
#define DEFAULT_NUMBER_OF_ENTRIES_IN_FLATTENED_CLASS_CACHE 8
5656

5757
enum J9ClassFragments {
5858
RAM_CLASS_HEADER_FRAGMENT,
@@ -1975,8 +1975,12 @@ loadFlattenableFieldValueClasses(J9VMThread *currentThread, J9ClassLoader *class
19751975
goto done;
19761976
} else {
19771977
J9ROMClass *valueROMClass = valueClass->romClass;
1978-
1979-
if (!J9ROMCLASS_IS_PRIMITIVE_VALUE_TYPE(valueROMClass)) {
1978+
/* This restriction has been relaxed from J9ROMCLASS_IS_PRIMITIVE_VALUE_TYPE
1979+
* to prevent errors while using the J9ClassIsPrimitiveValueType flag to indicate
1980+
* flattening eligibility for nullrestricted fields. Eventually this case will be
1981+
* removed with Q types.
1982+
*/
1983+
if (!J9ROMCLASS_IS_VALUE(valueROMClass)) {
19801984
J9UTF8 *badClass = NNSRP_GET(valueROMClass->className, J9UTF8*);
19811985
setCurrentExceptionNLSWithArgs(currentThread, J9NLS_VM_ERROR_QTYPE_NOT_VALUE_TYPE, J9VMCONSTANTPOOL_JAVALANGINCOMPATIBLECLASSCHANGEERROR, J9UTF8_LENGTH(badClass), J9UTF8_DATA(badClass));
19821986
result = FALSE;
@@ -2356,8 +2360,15 @@ internalCreateRAMClassDone(J9VMThread *vmThread, J9ClassLoader *classLoader, J9C
23562360
if (J9ROMCLASS_IS_VALUE(romClass)) {
23572361
classFlags |= J9ClassIsValueType;
23582362
#if defined(J9VM_OPT_VALHALLA_FLATTENABLE_VALUE_TYPES)
2359-
if (J9ROMCLASS_IS_PRIMITIVE_VALUE_TYPE(romClass)) {
2363+
if (J9ROMCLASS_IS_PRIMITIVE_VALUE_TYPE(romClass)
2364+
|| (J9_ARE_ALL_BITS_SET(romClass->optionalFlags, J9_ROMCLASS_OPTINFO_IMPLICITCREATION_ATTRIBUTE)
2365+
&& J9_ARE_ALL_BITS_SET(getImplicitCreationFlags(romClass), J9AccImplicitCreateHasDefaultValue))
2366+
) {
23602367
UDATA instanceSize = state->ramClass->totalInstanceSize;
2368+
/* This ram class flag is not correct for the nullrestricted value class case
2369+
* since the meaning of primitive and nullrestricted don't fully overlap.
2370+
* Using it for now to enable flattening of nullrestricted fields.
2371+
*/
23612372
classFlags |= J9ClassIsPrimitiveValueType;
23622373
if ((instanceSize <= javaVM->valueFlatteningThreshold)
23632374
&& !J9ROMCLASS_IS_CONTENDED(romClass)
@@ -3550,7 +3561,7 @@ internalCreateRAMClassFromROMClass(J9VMThread *vmThread, J9ClassLoader *classLoa
35503561
UDATA romFieldCount = romClass->romFieldCount;
35513562
UDATA valueTypeFlags = 0;
35523563
UDATA flattenedClassCacheAllocSize = sizeof(J9FlattenedClassCache) + (sizeof(J9FlattenedClassCacheEntry) * romFieldCount);
3553-
U_8 flattenedClassCacheBuffer[sizeof(J9FlattenedClassCache) + (sizeof(J9FlattenedClassCacheEntry) * DEFAULLT_NUMBER_OF_ENTRIES_IN_FLATTENED_CLASS_CACHE)] = {0};
3564+
U_8 flattenedClassCacheBuffer[sizeof(J9FlattenedClassCache) + (sizeof(J9FlattenedClassCacheEntry) * DEFAULT_NUMBER_OF_ENTRIES_IN_FLATTENED_CLASS_CACHE)] = {0};
35543565
J9FlattenedClassCache *flattenedClassCache = (J9FlattenedClassCache *) flattenedClassCacheBuffer;
35553566
PORT_ACCESS_FROM_VMC(vmThread);
35563567
#endif /* defined(J9VM_OPT_VALHALLA_FLATTENABLE_VALUE_TYPES) */
@@ -3663,7 +3674,7 @@ internalCreateRAMClassFromROMClass(J9VMThread *vmThread, J9ClassLoader *classLoa
36633674
}
36643675
}
36653676
#if defined(J9VM_OPT_VALHALLA_FLATTENABLE_VALUE_TYPES)
3666-
if (romFieldCount > DEFAULLT_NUMBER_OF_ENTRIES_IN_FLATTENED_CLASS_CACHE) {
3677+
if (romFieldCount > DEFAULT_NUMBER_OF_ENTRIES_IN_FLATTENED_CLASS_CACHE) {
36673678
flattenedClassCache = (J9FlattenedClassCache *) j9mem_allocate_memory(flattenedClassCacheAllocSize, J9MEM_CATEGORY_CLASSES);
36683679
if (NULL == flattenedClassCache) {
36693680
setNativeOutOfMemoryError(vmThread, 0, 0);

test/functional/Valhalla/playlist.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,9 +301,10 @@
301301
<variation>-Xint -XX:ValueTypeFlatteningThreshold=99999 -XX:-EnableArrayFlattening</variation>
302302
<variation>-Xint -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
303303
<variation>-Xjit:count=0</variation>
304-
<variation>-Xjit:count=1,disableAsyncCompilation</variation>
304+
<!-- https://github.com/eclipse-openj9/openj9/issues/18742 -->
305+
<!--<variation>-Xjit:count=1,disableAsyncCompilation</variation>
305306
<variation>-Xjit:count=1,disableAsyncCompilation -XX:ValueTypeFlatteningThreshold=99999 -XX:-EnableArrayFlattening</variation>
306-
<variation>-Xjit:count=1,disableAsyncCompilation -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation>
307+
<variation>-Xjit:count=1,disableAsyncCompilation -XX:ValueTypeFlatteningThreshold=99999 -XX:+EnableArrayFlattening</variation> -->
307308
</variations>
308309
<command>$(JAVA_COMMAND) $(JVM_OPTIONS) \
309310
--enable-preview \

test/functional/cmdLineTests/valuetypeddrtests/flattened32bitRefBackfillTest.xml

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,9 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0-only WITH Classpath-ex
9090
<input>!j9object $flatSingleBackfillInstance$</input>
9191
<input>quit</input>
9292
</command>
93-
<output regex="no" type="success" showMatch="yes">l (offset = 4) (ValueLong)</output>
94-
<output regex="no" type="success" showMatch="yes">o (offset = 12) (ValueObject)</output>
95-
<output regex="no" type="success" showMatch="yes">i (offset = 0) (ValueInt)</output>
93+
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">l \(offset = 4\) \(.*ValueLong\)</output>
94+
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">o \(offset = 12\) \(.*ValueObject\)</output>
95+
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">i \(offset = 0\) \(.*ValueInt\)</output>
9696
<output regex="no" type="success" showMatch="yes">// FlatSingleBackfill</output>
9797
<output regex="no" type="failure">Problem running command</output>
9898
</test>
@@ -103,6 +103,7 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0-only WITH Classpath-ex
103103
<input>!flatobject $flatSingleBackfillInstance$</input>
104104
<input>quit</input>
105105
</command>
106+
<!-- TODO change to J l = 0xFAFBFCFD11223344 for lw5-->
106107
<output regex="no" type="success" showMatch="yes">J j = 0xFAFBFCFD11223344</output>
107108
<output regex="no" type="success" showMatch="yes">I i = 0x12123434</output>
108109
<output regex="no" type="success" showMatch="yes">i (offset = 0) (ValueInt)</output>
@@ -127,9 +128,9 @@ SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0-only WITH Classpath-ex
127128
<input>!j9object $objectBackfillInstance$</input>
128129
<input>quit</input>
129130
</command>
130-
<output regex="no" type="success" showMatch="yes">l (offset = 4) (ValueLong)</output>
131-
<output regex="no" type="success" showMatch="yes">o (offset = 0) (ValueObject)</output>
132-
<output regex="no" type="success" showMatch="yes">// FlatObjectBackfill</output>
131+
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">l \(offset = 4\) \(.*ValueLong\)</output>
132+
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">o \(offset = 0\) \(.*ValueObject\)</output>
133+
<output regex="yes" javaUtilPattern="yes" type="success" showMatch="yes">// .*FlatObjectBackfill</output>
133134
<output regex="no" type="failure">Problem running command</output>
134135
</test>
135136

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

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

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

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

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

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

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

0 commit comments

Comments
 (0)