Skip to content

Commit 1638ce9

Browse files
OracleLabsAutomationzapster
authored andcommitted
[GR-59836] Update labsjdk to 24+24-jvmci-b01
PullRequest: graal/19324
2 parents 61ee7f0 + fdb9fbc commit 1638ce9

File tree

52 files changed

+869
-292
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+869
-292
lines changed

common.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
"COMMENT.jdks": "When adding or removing JDKs keep in sync with JDKs in ci/common.jsonnet",
1010
"jdks": {
11-
"galahad-jdk": {"name": "jpg-jdk", "version": "24", "build_id": "jdk-24+23-2783", "platformspecific": true, "extrabundles": ["static-libs"]},
11+
"galahad-jdk": {"name": "jpg-jdk", "version": "24", "build_id": "jdk-24+24-2950", "platformspecific": true, "extrabundles": ["static-libs"]},
1212

1313
"oraclejdk17": {"name": "jpg-jdk", "version": "17.0.7", "build_id": "jdk-17.0.7+8", "platformspecific": true, "extrabundles": ["static-libs"]},
1414
"labsjdk-ce-17": {"name": "labsjdk", "version": "ce-17.0.7+4-jvmci-23.1-b02", "platformspecific": true },
@@ -45,13 +45,13 @@
4545

4646
"oraclejdk23": {"name": "jpg-jdk", "version": "23", "build_id": "jdk-23+37", "platformspecific": true, "extrabundles": ["static-libs"]},
4747

48-
"oraclejdk-latest": {"name": "jpg-jdk", "version": "24", "build_id": "jdk-24+23", "platformspecific": true, "extrabundles": ["static-libs"]},
49-
"labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-24+23-jvmci-b01", "platformspecific": true },
50-
"labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-24+23-jvmci-b01-debug", "platformspecific": true },
51-
"labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-24+23-jvmci-b01-sulong", "platformspecific": true },
52-
"labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-24+23-jvmci-b01", "platformspecific": true },
53-
"labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-24+23-jvmci-b01-debug", "platformspecific": true },
54-
"labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-24+23-jvmci-b01-sulong", "platformspecific": true }
48+
"oraclejdk-latest": {"name": "jpg-jdk", "version": "24", "build_id": "jdk-24+24", "platformspecific": true, "extrabundles": ["static-libs"]},
49+
"labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-24+24-jvmci-b01", "platformspecific": true },
50+
"labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-24+24-jvmci-b01-debug", "platformspecific": true },
51+
"labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-24+24-jvmci-b01-sulong", "platformspecific": true },
52+
"labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-24+24-jvmci-b01", "platformspecific": true },
53+
"labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-24+24-jvmci-b01-debug", "platformspecific": true },
54+
"labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-24+24-jvmci-b01-sulong", "platformspecific": true }
5555
},
5656

5757
"eclipse": {

compiler/mx.compiler/mx_compiler.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -640,7 +640,7 @@ def compiler_gate_benchmark_runner(tasks, extraVMarguments=None, prefix='', task
640640
}
641641

642642
# Renaissance is missing the msvc redistributable on Windows [GR-50132]
643-
if not mx.is_windows():
643+
if not mx.is_windows() and jdk.javaCompliance <= '21':
644644
for name in renaissance_suite.benchmarkList(bmSuiteArgs):
645645
iterations = renaissance_gate_iterations.get(name, -1)
646646
with Task(prefix + 'Renaissance:' + name, tasks, tags=GraalTags.benchmarktest, report=task_report_component) as t:

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/GraalHotSpotVMConfig.java

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ public class GraalHotSpotVMConfig extends GraalHotSpotVMConfigAccess {
6666
GraalHotSpotVMConfig(HotSpotVMConfigStore store) {
6767
super(store);
6868

69-
assert narrowKlassShift <= logKlassAlignment : Assertions.errorMessageContext("narrowKlassShift", narrowKlassShift, "logKlassAlignment", logKlassAlignment);
7069
int logMinObjAlignment = logMinObjAlignment();
7170
assert narrowOopShift <= logMinObjAlignment : Assertions.errorMessageContext("narrowOopShift", narrowOopShift, "logMinObjAlignment", logMinObjAlignment);
7271
oopEncoding = new CompressEncoding(narrowOopBase, narrowOopShift);
@@ -201,6 +200,11 @@ public long gcTotalCollectionsAddress() {
201200
// Compressed Oops related values.
202201
public final boolean useCompressedOops = getFlag("UseCompressedOops", Boolean.class);
203202
public final boolean useCompressedClassPointers = getFlag("UseCompressedClassPointers", Boolean.class);
203+
// JDK-8305895 allows storing the compressed class pointer in the upper 22 bits of the mark
204+
// word. This runtime optimization is guarded by the flag UseCompactObjectHeaders. It depends
205+
// on compressed class pointers, meaning that if useCompactObjectHeaders is true,
206+
// useCompressedClassPointers is certainly true.
207+
public final boolean useCompactObjectHeaders = getFlag("UseCompactObjectHeaders", Boolean.class, false, JDK >= 24);
204208

205209
public final long narrowOopBase = getFieldValue("CompilerToVM::Data::Universe_narrow_oop_base", Long.class, "address");
206210
public final int narrowOopShift = getFieldValue("CompilerToVM::Data::Universe_narrow_oop_shift", Integer.class, "int");
@@ -213,7 +217,6 @@ public final int logMinObjAlignment() {
213217
public final int narrowKlassSize = getFieldValue("CompilerToVM::Data::sizeof_narrowKlass", Integer.class, "int");
214218
public final long narrowKlassBase = getFieldValue("CompilerToVM::Data::Universe_narrow_klass_base", Long.class, "address");
215219
public final int narrowKlassShift = getFieldValue("CompilerToVM::Data::Universe_narrow_klass_shift", Integer.class, "int");
216-
public final int logKlassAlignment = getConstant("LogKlassAlignmentInBytes", Integer.class);
217220

218221
public final int stackShadowPages = getFlag("StackShadowPages", Integer.class);
219222
public final int vmPageSize = getFieldValue("CompilerToVM::Data::vm_page_size", Integer.class, "size_t");
@@ -255,12 +258,17 @@ public final int logMinObjAlignment() {
255258

256259
public final int arrayOopDescSize = getFieldValue("CompilerToVM::Data::sizeof_arrayOopDesc", Integer.class, "int");
257260

261+
public final int arrayLengthOffsetInBytes = getFieldValue("CompilerToVM::Data::arrayOopDesc_length_offset_in_bytes", Integer.class, "int", -1, JDK >= 24);
262+
258263
/**
259264
* The offset of the array length word in an array object's header.
260265
* <p>
261266
* See {@code arrayOopDesc::length_offset_in_bytes()}.
262267
*/
263268
public final int arrayOopDescLengthOffset() {
269+
if (JDK >= 24) {
270+
return arrayLengthOffsetInBytes;
271+
}
264272
return useCompressedClassPointers ? hubOffset + narrowKlassSize : arrayOopDescSize;
265273
}
266274

@@ -294,6 +302,8 @@ public final int arrayOopDescLengthOffset() {
294302
public final int threadCarrierThreadObjectOffset = getFieldOffset("JavaThread::_threadObj", Integer.class, "OopHandle");
295303
public final int threadScopedValueCacheOffset = getFieldOffset("JavaThread::_scopedValueCache", Integer.class, "OopHandle");
296304

305+
public final int javaThreadLockIDOffset = getFieldOffset("JavaThread::_lock_id", Integer.class, "int64_t", -1, JDK > 21);
306+
297307
public final int threadIsInVTMSTransitionOffset = getFieldOffset("JavaThread::_is_in_VTMS_transition", Integer.class, "bool");
298308
public final int threadIsInTmpVTMSTransitionOffset = getFieldOffset("JavaThread::_is_in_tmp_VTMS_transition", Integer.class, "bool", -1, JDK == 21);
299309
public final int threadIsDisableSuspendOffset = getFieldOffset("JavaThread::_is_disable_suspend", Integer.class, "bool", -1, JDK >= 22);
@@ -365,37 +375,35 @@ public int threadLastJavaFpOffset() {
365375
public final int frameInterpreterFrameSenderSpOffset = getConstant("frame::interpreter_frame_sender_sp_offset", Integer.class, 0, osArch.equals("amd64"));
366376
public final int frameInterpreterFrameLastSpOffset = getConstant("frame::interpreter_frame_last_sp_offset", Integer.class, 0, osArch.equals("amd64"));
367377

368-
public final int lockMaskInPlace = getConstant("markWord::lock_mask_in_place", Integer.class);
378+
public final long markWordLockMaskInPlace = getConstant("markWord::lock_mask_in_place", Long.class);
379+
public final long markWordHashMask = getConstant("markWord::hash_mask", Long.class);
380+
381+
public final long markWordNoHashInPlace = getConstant("markWord::no_hash_in_place", Long.class);
382+
public final long markWordNoLockInPlace = getConstant("markWord::no_lock_in_place", Long.class);
383+
384+
// Mark word right shift to get identity hash code.
385+
public final int markWordHashCodeShift = getConstant("markWord::hash_shift", Integer.class);
386+
// Mark word right shift to get compressed klass pointer
387+
public final int markWordKlassShift = getConstant("markWord::klass_shift", Integer.class, 0, JDK >= 24);
388+
389+
// The following three constants are declared as 64 bits uintptr_t, but known to be 32 bits
369390
public final int unlockedValue = getConstant("markWord::unlocked_value", Integer.class);
370391
public final int monitorValue = getConstant("markWord::monitor_value", Integer.class);
392+
public final int ageMaskInPlace = getConstant("markWord::age_mask_in_place", Integer.class);
393+
public final int unusedMark = getConstant("markWord::marked_value", Integer.class, 3, JDK > 21);
394+
// Identity hash code value when uninitialized.
395+
public final int uninitializedIdentityHashCodeValue = getConstant("markWord::no_hash", Integer.class);
371396

372397
// This field has no type in vmStructs.cpp
373-
public final int objectMonitorOwner = getFieldOffset("ObjectMonitor::_owner", Integer.class, null);
398+
public final int objectMonitorOwner = getFieldOffset("ObjectMonitor::_owner", Integer.class, JDK > 21 ? "int64_t" : null);
374399
public final int objectMonitorRecursions = getFieldOffset("ObjectMonitor::_recursions", Integer.class, "intptr_t");
375400
public final int objectMonitorCxq = getFieldOffset("ObjectMonitor::_cxq", Integer.class, "ObjectWaiter*");
376401
public final int objectMonitorEntryList = getFieldOffset("ObjectMonitor::_EntryList", Integer.class, "ObjectWaiter*");
377-
public final int objectMonitorSucc = getFieldOffset("ObjectMonitor::_succ", Integer.class, "JavaThread*");
378-
379-
public final int markWordNoHashInPlace = getConstant("markWord::no_hash_in_place", Integer.class);
380-
public final int markWordNoLockInPlace = getConstant("markWord::no_lock_in_place", Integer.class);
381-
382-
public long defaultPrototypeMarkWord() {
383-
return this.markWordNoHashInPlace | this.markWordNoLockInPlace;
384-
}
385-
386-
/**
387-
* Mark word right shift to get identity hash code.
388-
*/
389-
public final int identityHashCodeShift = getConstant("markWord::hash_shift", Integer.class);
402+
public final int objectMonitorSucc = getFieldOffset("ObjectMonitor::_succ", Integer.class, JDK > 21 ? "int64_t" : "JavaThread*");
390403

391404
public final int contEntry = getFieldOffset("JavaThread::_cont_entry", Integer.class, "ContinuationEntry*", -1, JDK >= 24);
392405
public final int pinCount = getFieldOffset("ContinuationEntry::_pin_count", Integer.class, "uint32_t", -1, JDK >= 24);
393406

394-
/**
395-
* Identity hash code value when uninitialized.
396-
*/
397-
public final int uninitializedIdentityHashCodeValue = getConstant("markWord::no_hash", Integer.class);
398-
399407
public final int methodCompiledEntryOffset = getFieldOffset("Method::_from_compiled_entry", Integer.class, "address");
400408

401409
public final int compilationLevelFullOptimization = getConstant("CompLevel_full_optimization", Integer.class);

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/JVMCIVersionCheck.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ public final class JVMCIVersionCheck {
5555
private static final Map<String, Map<String, Version>> JVMCI_MIN_VERSIONS = Map.of(
5656
"21", Map.of(DEFAULT_VENDOR_ENTRY, createLegacyVersion(23, 1, 33)),
5757
"24", Map.of(
58-
"Oracle Corporation", createLabsJDKVersion("24+23", 1),
59-
DEFAULT_VENDOR_ENTRY, createLabsJDKVersion("24+23", 1)));
58+
"Oracle Corporation", createLabsJDKVersion("24+24", 1),
59+
DEFAULT_VENDOR_ENTRY, createLabsJDKVersion("24+24", 1)));
6060
private static final int NA = 0;
6161
/**
6262
* Minimum Java release supported by Graal.

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/aarch64/AArch64HotSpotBackend.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2013, 2024, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -419,15 +419,18 @@ private void emitCodePrefix(CompilationResultBuilder crb, ResolvedJavaMethod ins
419419
CallingConvention cc = regConfig.getCallingConvention(HotSpotCallingConventionType.JavaCallee, null, parameterTypes, this);
420420
Register receiver = asRegister(cc.getArgument(0));
421421
int size = config.useCompressedClassPointers ? 32 : 64;
422-
AArch64Address klassAddress = masm.makeAddress(size, receiver, config.hubOffset);
423422
if (config.icSpeculatedKlassOffset == Integer.MAX_VALUE) {
424423
crb.recordMark(HotSpotMarkId.UNVERIFIED_ENTRY);
425424
Register klass = rscratch1;
426425
if (config.useCompressedClassPointers) {
427-
masm.ldr(32, klass, klassAddress);
426+
if (config.useCompactObjectHeaders) {
427+
((AArch64HotSpotMacroAssembler) masm).loadCompactClassPointer(klass, receiver);
428+
} else {
429+
masm.ldr(size, klass, masm.makeAddress(size, receiver, config.hubOffset));
430+
}
428431
AArch64HotSpotMove.decodeKlassPointer(masm, klass, klass, config.getKlassEncoding());
429432
} else {
430-
masm.ldr(64, klass, klassAddress);
433+
masm.ldr(size, klass, masm.makeAddress(size, receiver, config.hubOffset));
431434
}
432435
// c1_LIRAssembler_aarch64.cpp: const Register IC_Klass = rscratch2;
433436
Register inlineCacheKlass = AArch64HotSpotRegisterConfig.inlineCacheRegister;
@@ -436,7 +439,6 @@ private void emitCodePrefix(CompilationResultBuilder crb, ResolvedJavaMethod ins
436439
masm.branchConditionally(AArch64Assembler.ConditionFlag.EQ, verifiedStub);
437440
AArch64Call.directJmp(crb, masm, getForeignCalls().lookupForeignCall(IC_MISS_HANDLER));
438441
} else {
439-
440442
// JDK-8322630 (removed ICStubs)
441443
Register data = AArch64HotSpotRegisterConfig.inlineCacheRegister;
442444
Register tmp1 = rscratch1;
@@ -445,16 +447,24 @@ private void emitCodePrefix(CompilationResultBuilder crb, ResolvedJavaMethod ins
445447

446448
// Size of IC check sequence checked with a guarantee below.
447449
int inlineCacheCheckSize = AArch64Call.isNearCall(icMissHandler) ? 20 : 32;
450+
if (config.useCompactObjectHeaders) {
451+
// Extra instruction for shifting
452+
inlineCacheCheckSize += 4;
453+
}
448454
masm.align(config.codeEntryAlignment, masm.position() + inlineCacheCheckSize);
449455

450456
int startICCheck = masm.position();
451457
crb.recordMark(HotSpotMarkId.UNVERIFIED_ENTRY);
452458
AArch64Address icSpeculatedKlass = masm.makeAddress(size, data, config.icSpeculatedKlassOffset);
453459

454-
masm.ldr(size, tmp1, klassAddress);
460+
if (config.useCompactObjectHeaders) {
461+
((AArch64HotSpotMacroAssembler) masm).loadCompactClassPointer(tmp1, receiver);
462+
} else {
463+
masm.ldr(size, tmp1, masm.makeAddress(size, receiver, config.hubOffset));
464+
}
465+
455466
masm.ldr(size, tmp2, icSpeculatedKlass);
456467
masm.cmp(size, tmp1, tmp2);
457-
458468
masm.branchConditionally(AArch64Assembler.ConditionFlag.EQ, verifiedStub);
459469
AArch64Call.directJmp(crb, masm, icMissHandler);
460470

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/aarch64/AArch64HotSpotMacroAssembler.java

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -29,6 +29,7 @@
2929
import jdk.graal.compiler.asm.aarch64.AArch64Assembler;
3030
import jdk.graal.compiler.asm.aarch64.AArch64MacroAssembler;
3131
import jdk.graal.compiler.core.common.CompressEncoding;
32+
import jdk.graal.compiler.debug.GraalError;
3233
import jdk.graal.compiler.hotspot.GraalHotSpotVMConfig;
3334
import jdk.graal.compiler.lir.aarch64.AArch64Move;
3435
import jdk.vm.ci.aarch64.AArch64;
@@ -81,23 +82,24 @@ public void verifyOop(Register value, Register tmp, Register tmp2, boolean compr
8182
cbz(compressed ? 32 : 64, value, ok);
8283
}
8384

84-
AArch64Address hubAddress;
85-
int hubSize = config.useCompressedClassPointers ? 32 : 64;
85+
Register object = value;
8686
if (compressed) {
8787
CompressEncoding encoding = config.getOopEncoding();
8888
mov(32, tmp, value);
8989
AArch64Move.UncompressPointerOp.emitUncompressCode(this, tmp, tmp, encoding, true, heapBaseRegister, false);
90-
hubAddress = makeAddress(hubSize, tmp, config.hubOffset);
91-
} else {
92-
hubAddress = makeAddress(hubSize, value, config.hubOffset);
90+
object = tmp;
9391
}
9492

9593
// Load the class
9694
if (config.useCompressedClassPointers) {
97-
ldr(32, tmp, hubAddress);
95+
if (config.useCompactObjectHeaders) {
96+
loadCompactClassPointer(tmp, object);
97+
} else {
98+
ldr(32, tmp, makeAddress(32, object, config.hubOffset));
99+
}
98100
AArch64HotSpotMove.decodeKlassPointer(this, tmp, tmp, config.getKlassEncoding());
99101
} else {
100-
ldr(64, tmp, hubAddress);
102+
ldr(64, tmp, makeAddress(64, object, config.hubOffset));
101103
}
102104
// Klass::_super_check_offset
103105
ldr(32, tmp2, makeAddress(32, tmp, config.superCheckOffsetOffset));
@@ -127,4 +129,9 @@ public void verifyHeapBase() {
127129
}
128130
}
129131

132+
public void loadCompactClassPointer(Register result, Register receiver) {
133+
GraalError.guarantee(config.useCompactObjectHeaders, "Load class pointer from markWord only when UseCompactObjectHeaders is on");
134+
ldr(64, result, makeAddress(64, receiver, config.markOffset));
135+
lsr(64, result, result, config.markWordKlassShift);
136+
}
130137
}

0 commit comments

Comments
 (0)