Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
c3b4966
Automatic merge of master into galahad
OracleLabsAutomation Sep 26, 2024
f05bda5
Automatic merge of master into galahad
OracleLabsAutomation Sep 26, 2024
66917e5
Automatic merge of master into galahad
OracleLabsAutomation Sep 26, 2024
2b32e6f
Automatic merge of master into galahad
OracleLabsAutomation Sep 26, 2024
c927e42
Automatic merge of master into galahad
OracleLabsAutomation Sep 27, 2024
8f4e4fe
Automatic merge of master into galahad
OracleLabsAutomation Sep 27, 2024
e3c23ea
Automatic merge of master into galahad
OracleLabsAutomation Sep 27, 2024
80b529e
Automatic merge of master into galahad
OracleLabsAutomation Sep 27, 2024
37b72b7
Automatic merge of master into galahad
OracleLabsAutomation Sep 27, 2024
a4c19a4
Automatic merge of master into galahad
OracleLabsAutomation Sep 27, 2024
377036b
Automatic merge of master into galahad
OracleLabsAutomation Sep 27, 2024
2edbdc3
Automatic merge of master into galahad
OracleLabsAutomation Sep 27, 2024
a2a1f6d
Automatic merge of master into galahad
OracleLabsAutomation Sep 27, 2024
f3cfa15
Automatic merge of master into galahad
OracleLabsAutomation Sep 27, 2024
18b9aee
Automatic merge of master into galahad
OracleLabsAutomation Sep 28, 2024
cbd7e49
Automatic merge of master into galahad
OracleLabsAutomation Sep 28, 2024
bb649c3
Automatic merge of master into galahad
OracleLabsAutomation Sep 30, 2024
d34bdb9
Automatic merge of master into galahad
OracleLabsAutomation Sep 30, 2024
98d4bf8
Automatic merge of master into galahad
OracleLabsAutomation Sep 30, 2024
718820d
Automatic merge of master into galahad
OracleLabsAutomation Sep 30, 2024
799b221
Automatic merge of master into galahad
OracleLabsAutomation Sep 30, 2024
0dd36f8
Automatic merge of master into galahad
OracleLabsAutomation Sep 30, 2024
5d9b6f7
Automatic merge of master into galahad
OracleLabsAutomation Sep 30, 2024
b4ab9ac
Automatic merge of master into galahad
OracleLabsAutomation Oct 1, 2024
7d67ce0
Automatic merge of master into galahad
OracleLabsAutomation Oct 1, 2024
5b01055
Automatic merge of master into galahad
OracleLabsAutomation Oct 1, 2024
de43e79
Adapt JDK-8320318: ObjectMonitor Responsible thread.
mur47x111 Oct 1, 2024
02ba84e
Update galahad JDK.
mur47x111 Oct 1, 2024
79bb33d
[JDK-8341244] Adapt JDK-8320318: ObjectMonitor Responsible thread.
mur47x111 Oct 1, 2024
9ee158b
Automatic merge of master into galahad
OracleLabsAutomation Oct 1, 2024
d84baf6
Automatic merge of master into galahad
OracleLabsAutomation Oct 1, 2024
5352009
Automatic merge of master into galahad
OracleLabsAutomation Oct 2, 2024
3f62022
Automatic merge of master into galahad
OracleLabsAutomation Oct 2, 2024
15519c7
Automatic merge of master into galahad
OracleLabsAutomation Oct 2, 2024
31084d8
Automatic merge of master into galahad
OracleLabsAutomation Oct 2, 2024
b6396f2
Automatic merge of master into galahad
OracleLabsAutomation Oct 2, 2024
0d7c5e9
Automatic merge of master into galahad
OracleLabsAutomation Oct 2, 2024
b26998f
Automatic merge of master into galahad
OracleLabsAutomation Oct 2, 2024
a426f60
Automatic merge of master into galahad
OracleLabsAutomation Oct 3, 2024
3ffb313
Automatic merge of master into galahad
OracleLabsAutomation Oct 3, 2024
bd339f7
update JVMCI to 24+18-jvmci-b01
OracleLabsAutomation Oct 3, 2024
f3f7787
Merge tag 'jdk-24+18'
zapster Oct 4, 2024
60b1b4c
compiler: update JVMCIVersionCheck
zapster Oct 4, 2024
6d79249
svm: review libsvm_container changes from JDK 24+18
zapster Oct 4, 2024
caf241e
compiler: adapt UnimplementedGraalIntrinsics for JDK-8340079
gergo- Oct 4, 2024
c78febd
deploy snapshots
marwan-hallaoui Oct 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions common.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

"COMMENT.jdks": "When adding or removing JDKs keep in sync with JDKs in ci/common.jsonnet",
"jdks": {
"galahad-jdk": {"name": "jpg-jdk", "version": "24", "build_id": "jdk-24+15-1637", "platformspecific": true, "extrabundles": ["static-libs"]},
"galahad-jdk": {"name": "jpg-jdk", "version": "24", "build_id": "jdk-24+18-2013", "platformspecific": true, "extrabundles": ["static-libs"]},

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

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

"oraclejdk-latest": {"name": "jpg-jdk", "version": "24", "build_id": "jdk-24+17", "platformspecific": true, "extrabundles": ["static-libs"]},
"labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-24+17-jvmci-b01", "platformspecific": true },
"labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-24+17-jvmci-b01-debug", "platformspecific": true },
"labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-24+17-jvmci-b01-sulong", "platformspecific": true },
"labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-24+17-jvmci-b01", "platformspecific": true },
"labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-24+17-jvmci-b01-debug", "platformspecific": true },
"labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-24+17-jvmci-b01-sulong", "platformspecific": true }
"oraclejdk-latest": {"name": "jpg-jdk", "version": "24", "build_id": "jdk-24+18", "platformspecific": true, "extrabundles": ["static-libs"]},
"labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-24+18-jvmci-b01", "platformspecific": true },
"labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-24+18-jvmci-b01-debug", "platformspecific": true },
"labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-24+18-jvmci-b01-sulong", "platformspecific": true },
"labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-24+18-jvmci-b01", "platformspecific": true },
"labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-24+18-jvmci-b01-debug", "platformspecific": true },
"labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-24+18-jvmci-b01-sulong", "platformspecific": true }
},

"eclipse": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -649,6 +649,7 @@ private long getXGCAddressField(String name) {
public final int lockStackTopOffset = getFieldOffset("LockStack::_top", Integer.class, "uint32_t", -1, JDK >= 22);
public final int lockStackEndOffset = getConstant("LockStack::_end_offset", Integer.class, -1, JDK >= 22);
public final int threadOmCacheOffset = getFieldOffset("JavaThread::_om_cache", Integer.class, "OMCache", -1, JDK >= 24);
public final int threadUnlockedInflatedMonitorOffset = getFieldOffset("JavaThread::_unlocked_inflated_monitor", Integer.class, "ObjectMonitor*", -1, JDK >= 24);
public final int omCacheOopToOopDifference = getConstant("OMCache::oop_to_oop_difference", Integer.class, -1, JDK >= 24);
public final int omCacheOopToMonitorDifference = getConstant("OMCache::oop_to_monitor_difference", Integer.class, -1, JDK >= 24);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@ public final class JVMCIVersionCheck {
private static final Map<String, Map<String, Version>> JVMCI_MIN_VERSIONS = Map.of(
"21", Map.of(DEFAULT_VENDOR_ENTRY, createLegacyVersion(23, 1, 33)),
"24", Map.of(
"Oracle Corporation", createLabsJDKVersion("24+17", 1),
DEFAULT_VENDOR_ENTRY, createLabsJDKVersion("24+17", 1)));
"Oracle Corporation", createLabsJDKVersion("24+18", 1),
DEFAULT_VENDOR_ENTRY, createLabsJDKVersion("24+18", 1)));
private static final int NA = 0;
/**
* Minimum Java release supported by Graal.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,13 @@ public UnimplementedGraalIntrinsics(Architecture arch) {
// @formatter:on
);

if (jdk >= 24) {
add(toBeInvestigated, // @formatter:off
"jdk/internal/vm/vector/VectorSupport.selectFromOp(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;ILjdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$VectorMask;Ljdk/internal/vm/vector/VectorSupport$VectorSelectFromOp;)Ljdk/internal/vm/vector/VectorSupport$Vector;",
"jdk/internal/vm/vector/VectorSupport.wrapShuffleIndexes(Ljava/lang/Class;Ljava/lang/Class;Ljdk/internal/vm/vector/VectorSupport$VectorShuffle;ILjdk/internal/vm/vector/VectorSupport$WrapShuffleIndexesOperation;)Ljdk/internal/vm/vector/VectorSupport$VectorShuffle;");
// @formatter:on
}

// These are known to be implemented down stream
add(enterprise, // @formatter:off
"java/lang/Integer.toString(I)Ljava/lang/String;",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,21 +30,20 @@

import java.lang.ref.Reference;

import jdk.graal.compiler.core.common.type.Stamp;
import jdk.graal.compiler.hotspot.meta.HotSpotLoweringProvider;
import jdk.vm.ci.meta.Constant;
import org.graalvm.word.LocationIdentity;

import jdk.graal.compiler.api.replacements.Fold;
import jdk.graal.compiler.api.replacements.Fold.InjectedParameter;
import jdk.graal.compiler.core.common.SuppressFBWarnings;
import jdk.graal.compiler.core.common.spi.ForeignCallDescriptor;
import jdk.graal.compiler.core.common.type.ObjectStamp;
import jdk.graal.compiler.core.common.type.Stamp;
import jdk.graal.compiler.core.common.type.TypeReference;
import jdk.graal.compiler.debug.GraalError;
import jdk.graal.compiler.graph.Node.ConstantNodeParameter;
import jdk.graal.compiler.graph.Node.NodeIntrinsic;
import jdk.graal.compiler.hotspot.GraalHotSpotVMConfig;
import jdk.graal.compiler.hotspot.meta.HotSpotLoweringProvider;
import jdk.graal.compiler.hotspot.word.KlassPointer;
import jdk.graal.compiler.nodes.CanonicalizableLocation;
import jdk.graal.compiler.nodes.CompressionNode;
Expand All @@ -71,6 +70,7 @@
import jdk.vm.ci.hotspot.HotSpotResolvedObjectType;
import jdk.vm.ci.meta.Assumptions;
import jdk.vm.ci.meta.Assumptions.AssumptionResult;
import jdk.vm.ci.meta.Constant;
import jdk.vm.ci.meta.JavaKind;
import jdk.vm.ci.meta.MetaAccessProvider;
import jdk.vm.ci.meta.ResolvedJavaField;
Expand Down Expand Up @@ -322,6 +322,8 @@ public static Object getPendingException(Word thread) {

public static final LocationIdentity JAVA_THREAD_OM_CACHE_LOCATION = NamedLocationIdentity.mutable("JavaThread::_om_cache");

public static final LocationIdentity JAVA_THREAD_UNLOCKED_INFLATED_MONITOR_LOCATION = NamedLocationIdentity.mutable("JavaThread::_unlocked_inflated_monitor");

@Fold
public static JavaKind getWordKind() {
return runtime().getHostJVMCIBackend().getCodeCache().getTarget().wordJavaKind;
Expand Down Expand Up @@ -687,6 +689,11 @@ static int javaThreadOomCacheOffset(@InjectedParameter GraalHotSpotVMConfig conf
return config.threadOmCacheOffset;
}

@Fold
public static int javaThreadUnlockedInflatedMonitorOffset(@InjectedParameter GraalHotSpotVMConfig config) {
return config.threadUnlockedInflatedMonitorOffset;
}

@Fold
static int omCacheOopToOopDifference(@InjectedParameter GraalHotSpotVMConfig config) {
return config.omCacheOopToOopDifference;
Expand Down Expand Up @@ -1054,4 +1061,5 @@ public ValueNode canonicalizeRead(ValueNode read, ValueNode object, ValueNode of
public static final LocationIdentity METASPACE_ARRAY_LENGTH_LOCATION = NamedLocationIdentity.immutable("MetaspaceArrayLength");

public static final LocationIdentity SECONDARY_SUPERS_ELEMENT_LOCATION = NamedLocationIdentity.immutable("SecondarySupersElement");

}
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.JAVA_THREAD_LOCK_STACK_LOCATION;
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.JAVA_THREAD_LOCK_STACK_TOP_LOCATION;
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.JAVA_THREAD_OM_CACHE_LOCATION;
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.JAVA_THREAD_UNLOCKED_INFLATED_MONITOR_LOCATION;
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.KLASS_ACCESS_FLAGS_LOCATION;
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.KLASS_MISC_FLAGS_LOCATION;
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.MARK_WORD_LOCATION;
Expand All @@ -50,6 +51,7 @@
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.javaThreadLockStackEndOffset;
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.javaThreadLockStackTopOffset;
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.javaThreadOomCacheOffset;
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.javaThreadUnlockedInflatedMonitorOffset;
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.jvmAccIsValueBasedClass;
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.klassAccessFlagsOffset;
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.klassMiscFlagsOffset;
Expand Down Expand Up @@ -143,6 +145,7 @@
import jdk.graal.compiler.replacements.SnippetTemplate.SnippetInfo;
import jdk.graal.compiler.replacements.Snippets;
import jdk.graal.compiler.replacements.nodes.CStringConstant;
import jdk.graal.compiler.serviceprovider.JavaVersionUtil;
import jdk.graal.compiler.word.Word;
import jdk.vm.ci.code.BytecodeFrame;
import jdk.vm.ci.code.Register;
Expand Down Expand Up @@ -592,45 +595,71 @@ private static boolean tryExitInflated(Object object, Word thread, Word lock, bo
int recursionsOffset = objectMonitorRecursionsOffset(INJECTED_VMCONFIG);
Word recursions = monitor.readWord(recursionsOffset, OBJECT_MONITOR_RECURSION_LOCATION);
if (probability(FAST_PATH_PROBABILITY, recursions.equal(0))) {
// recursions == 0
int cxqOffset = objectMonitorCxqOffset(INJECTED_VMCONFIG);
Word cxq = monitor.readWord(cxqOffset, OBJECT_MONITOR_CXQ_LOCATION);
int entryListOffset = objectMonitorEntryListOffset(INJECTED_VMCONFIG);
Word entryList = monitor.readWord(entryListOffset, OBJECT_MONITOR_ENTRY_LIST_LOCATION);
if (probability(FREQUENT_PROBABILITY, cxq.or(entryList).equal(0))) {
// cxq == 0 && entryList == 0
// Nobody is waiting, success
// release_store
memoryBarrier(MembarNode.FenceKind.STORE_RELEASE);
monitor.writeWord(ownerOffset, zero());
traceObject(trace, "-lock{heavyweight:simple}", object, false);
counters.unlockHeavySimple.inc();
return true;
} else {
int succOffset = objectMonitorSuccOffset(INJECTED_VMCONFIG);
Word succ = monitor.readWord(succOffset, OBJECT_MONITOR_SUCC_LOCATION);
if (probability(FREQUENT_PROBABILITY, succ.isNonNull())) {
// There may be a thread spinning on this monitor. Temporarily setting
// the monitor owner to null, and hope that the other thread will grab it.
monitor.writeWordVolatile(ownerOffset, zero());
succ = monitor.readWordVolatile(succOffset, OBJECT_MONITOR_SUCC_LOCATION);
if (probability(NOT_FREQUENT_PROBABILITY, succ.isNonNull())) {
// We manage to release the monitor before the other running thread even
// notices.
traceObject(trace, "-lock{heavyweight:transfer}", object, false);
counters.unlockHeavyTransfer.inc();
return true;
} else {
// Either the monitor is grabbed by a spinning thread, or the spinning
// thread parks. Now we attempt to reset the owner of the monitor.
if (probability(FREQUENT_PROBABILITY, !monitor.logicCompareAndSwapWord(ownerOffset, zero(), thread, OBJECT_MONITOR_OWNER_LOCATION))) {
// The monitor is stolen.
if (JavaVersionUtil.JAVA_SPEC == 21) {
// recursions == 0
int cxqOffset = objectMonitorCxqOffset(INJECTED_VMCONFIG);
Word cxq = monitor.readWord(cxqOffset, OBJECT_MONITOR_CXQ_LOCATION);
int entryListOffset = objectMonitorEntryListOffset(INJECTED_VMCONFIG);
Word entryList = monitor.readWord(entryListOffset, OBJECT_MONITOR_ENTRY_LIST_LOCATION);
if (probability(FREQUENT_PROBABILITY, cxq.or(entryList).equal(0))) {
// cxq == 0 && entryList == 0
// Nobody is waiting, success
// release_store
memoryBarrier(MembarNode.FenceKind.STORE_RELEASE);
monitor.writeWord(ownerOffset, zero());
traceObject(trace, "-lock{heavyweight:simple}", object, false);
counters.unlockHeavySimple.inc();
return true;
} else {
int succOffset = objectMonitorSuccOffset(INJECTED_VMCONFIG);
Word succ = monitor.readWord(succOffset, OBJECT_MONITOR_SUCC_LOCATION);
if (probability(FREQUENT_PROBABILITY, succ.isNonNull())) {
// There may be a thread spinning on this monitor. Temporarily setting
// the monitor owner to null, and hope that the other thread will grab it.
monitor.writeWordVolatile(ownerOffset, zero());
succ = monitor.readWordVolatile(succOffset, OBJECT_MONITOR_SUCC_LOCATION);
if (probability(NOT_FREQUENT_PROBABILITY, succ.isNonNull())) {
// We manage to release the monitor before the other running thread even
// notices.
traceObject(trace, "-lock{heavyweight:transfer}", object, false);
counters.unlockHeavyTransfer.inc();
return true;
} else {
// Either the monitor is grabbed by a spinning thread, or the spinning
// thread parks. Now we attempt to reset the owner of the monitor.
if (probability(FREQUENT_PROBABILITY, !monitor.logicCompareAndSwapWord(ownerOffset, zero(), thread, OBJECT_MONITOR_OWNER_LOCATION))) {
// The monitor is stolen.
traceObject(trace, "-lock{heavyweight:transfer}", object, false);
counters.unlockHeavyTransfer.inc();
return true;
}
}
}
}
} else {
// Set owner to null.
memoryBarrier(MembarNode.FenceKind.STORE_RELEASE);
monitor.writeWord(ownerOffset, zero());
memoryBarrier(MembarNode.FenceKind.STORE_LOAD);
Word cxq = monitor.readWord(objectMonitorCxqOffset(INJECTED_VMCONFIG), OBJECT_MONITOR_CXQ_LOCATION);
Word entryList = monitor.readWord(objectMonitorEntryListOffset(INJECTED_VMCONFIG), OBJECT_MONITOR_ENTRY_LIST_LOCATION);
// Check if the entry lists are empty.
if (probability(FREQUENT_PROBABILITY, cxq.or(entryList).equal(0))) {
traceObject(trace, "-lock{heavyweight:simple}", object, false);
counters.unlockHeavySimple.inc();
return true;
}
// Check if there is a successor.
Word succ = monitor.readWord(objectMonitorSuccOffset(INJECTED_VMCONFIG), OBJECT_MONITOR_SUCC_LOCATION);
if (probability(FREQUENT_PROBABILITY, succ.isNonNull())) {
// We manage to release the monitor before the other running thread even
// notices.
traceObject(trace, "-lock{heavyweight:transfer}", object, false);
counters.unlockHeavyTransfer.inc();
return true;
} else {
thread.writeWord(javaThreadUnlockedInflatedMonitorOffset(INJECTED_VMCONFIG), monitor, JAVA_THREAD_UNLOCKED_INFLATED_MONITOR_LOCATION);
}
}
} else {
// Recursive inflated unlock
Expand Down
Loading