diff --git a/common.json b/common.json index 7a08d2915bc0..9b3889df1782 100644 --- a/common.json +++ b/common.json @@ -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": "25", "build_id": "jdk-25+10-1066", "platformspecific": true, "extrabundles": ["static-libs"]}, + "galahad-jdk": {"name": "jpg-jdk", "version": "25", "build_id": "jdk-25+12-1270", "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 }, @@ -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": "25", "build_id": "jdk-25+11", "platformspecific": true, "extrabundles": ["static-libs"]}, - "labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-25+11-jvmci-b01", "platformspecific": true }, - "labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-25+11-jvmci-b01-debug", "platformspecific": true }, - "labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-25+11-jvmci-b01-sulong", "platformspecific": true }, - "labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-25+11-jvmci-b01", "platformspecific": true }, - "labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-25+11-jvmci-b01-debug", "platformspecific": true }, - "labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-25+11-jvmci-b01-sulong", "platformspecific": true } + "oraclejdk-latest": {"name": "jpg-jdk", "version": "25", "build_id": "jdk-25+12", "platformspecific": true, "extrabundles": ["static-libs"]}, + "labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-25+12-jvmci-b01", "platformspecific": true }, + "labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-25+12-jvmci-b01-debug", "platformspecific": true }, + "labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-25+12-jvmci-b01-sulong", "platformspecific": true }, + "labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-25+12-jvmci-b01", "platformspecific": true }, + "labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-25+12-jvmci-b01-debug", "platformspecific": true }, + "labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-25+12-jvmci-b01-sulong", "platformspecific": true } }, "eclipse": { diff --git a/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/hotspot/test/ClassSubstitutionsTests.java b/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/hotspot/test/ClassSubstitutionsTests.java index 779bcad01c0c..cd4aec58b954 100644 --- a/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/hotspot/test/ClassSubstitutionsTests.java +++ b/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/hotspot/test/ClassSubstitutionsTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,6 +43,7 @@ import jdk.graal.compiler.nodes.graphbuilderconf.InvocationPlugins.Registration; import jdk.graal.compiler.nodes.java.LoadFieldNode; import jdk.graal.compiler.phases.tiers.HighTierContext; +import org.junit.Ignore; import org.junit.Test; import jdk.vm.ci.meta.JavaKind; @@ -117,6 +118,7 @@ public boolean fieldIsNotArray() { } @Test + @Ignore("GR-62659") public void testFieldIsNotArray() { testConstantReturn("fieldIsNotArray", 0); } @@ -192,6 +194,7 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec } @Test + @Ignore("GR-62659") public void testFieldIsArray() { testConstantReturn("fieldIsArray", 1); } diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/JVMCIVersionCheck.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/JVMCIVersionCheck.java index f7fd0d33505f..2601667ef5fd 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/JVMCIVersionCheck.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/JVMCIVersionCheck.java @@ -56,8 +56,8 @@ public final class JVMCIVersionCheck { private static final Map> JVMCI_MIN_VERSIONS = Map.of( "21", Map.of(DEFAULT_VENDOR_ENTRY, createLegacyVersion(23, 1, 33)), "25", Map.of( - "Oracle Corporation", createLabsJDKVersion("25+11", 1), - DEFAULT_VENDOR_ENTRY, createLabsJDKVersion("25+11", 1))); + "Oracle Corporation", createLabsJDKVersion("25+12", 1), + DEFAULT_VENDOR_ENTRY, createLabsJDKVersion("25+12", 1))); private static final int NA = 0; /** * Minimum Java release supported by Graal. diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java index c8d50b8aa728..40aa32a69456 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java @@ -387,33 +387,33 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec return true; } }); - } - r.register(new InvocationPlugin("isInterface", Receiver.class) { - @Override - public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) { - try (HotSpotInvocationPluginHelper helper = new HotSpotInvocationPluginHelper(b, targetMethod, config)) { - ValueNode klass = helper.readKlassFromClass(receiver.get(true)); - // Primitive Class case returns false - ValueNode klassNonNull = helper.emitNullReturnGuard(klass, ConstantNode.forBoolean(false), GraalDirectives.UNLIKELY_PROBABILITY); - ValueNode accessFlags = helper.readKlassAccessFlags(klassNonNull); - // return (Klass::_access_flags & Modifier.INTERFACE) == 0 ? false : true - LogicNode test = IntegerTestNode.create(accessFlags, ConstantNode.forInt(Modifier.INTERFACE), NodeView.DEFAULT); - helper.emitFinalReturn(JavaKind.Boolean, ConditionalNode.create(test, ConstantNode.forBoolean(false), ConstantNode.forBoolean(true), NodeView.DEFAULT)); + r.register(new InvocationPlugin("isInterface", Receiver.class) { + @Override + public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) { + try (HotSpotInvocationPluginHelper helper = new HotSpotInvocationPluginHelper(b, targetMethod, config)) { + ValueNode klass = helper.readKlassFromClass(receiver.get(true)); + // Primitive Class case returns false + ValueNode klassNonNull = helper.emitNullReturnGuard(klass, ConstantNode.forBoolean(false), GraalDirectives.UNLIKELY_PROBABILITY); + ValueNode accessFlags = helper.readKlassAccessFlags(klassNonNull); + // return (Klass::_access_flags & Modifier.INTERFACE) == 0 ? false : true + LogicNode test = IntegerTestNode.create(accessFlags, ConstantNode.forInt(Modifier.INTERFACE), NodeView.DEFAULT); + helper.emitFinalReturn(JavaKind.Boolean, ConditionalNode.create(test, ConstantNode.forBoolean(false), ConstantNode.forBoolean(true), NodeView.DEFAULT)); + } + return true; } - return true; - } - }); - r.register(new InvocationPlugin("isPrimitive", Receiver.class) { - @Override - public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) { - try (HotSpotInvocationPluginHelper helper = new HotSpotInvocationPluginHelper(b, targetMethod, config)) { - ValueNode klass = helper.readKlassFromClass(receiver.get(true)); - LogicNode isNull = b.add(IsNullNode.create(klass)); - b.addPush(JavaKind.Boolean, ConditionalNode.create(isNull, b.add(forBoolean(true)), b.add(forBoolean(false)), NodeView.DEFAULT)); + }); + r.register(new InvocationPlugin("isPrimitive", Receiver.class) { + @Override + public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) { + try (HotSpotInvocationPluginHelper helper = new HotSpotInvocationPluginHelper(b, targetMethod, config)) { + ValueNode klass = helper.readKlassFromClass(receiver.get(true)); + LogicNode isNull = b.add(IsNullNode.create(klass)); + b.addPush(JavaKind.Boolean, ConditionalNode.create(isNull, b.add(forBoolean(true)), b.add(forBoolean(false)), NodeView.DEFAULT)); + } + return true; } - return true; - } - }); + }); + } r.register(new InvocationPlugin("getSuperclass", Receiver.class) { @Override public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) { diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/replacements/HotSpotG1WriteBarrierSnippets.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/replacements/HotSpotG1WriteBarrierSnippets.java index f9f521c00655..31892b2d7df2 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/replacements/HotSpotG1WriteBarrierSnippets.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/replacements/HotSpotG1WriteBarrierSnippets.java @@ -36,6 +36,7 @@ import jdk.graal.compiler.core.common.CompressEncoding; import jdk.graal.compiler.core.common.spi.ForeignCallDescriptor; +import jdk.graal.compiler.debug.Assertions; import jdk.graal.compiler.hotspot.GraalHotSpotVMConfig; import jdk.graal.compiler.hotspot.meta.HotSpotForeignCallDescriptor; import jdk.graal.compiler.hotspot.meta.HotSpotForeignCallsProviderImpl; @@ -57,6 +58,7 @@ import jdk.graal.compiler.replacements.SnippetTemplate.AbstractTemplates; import jdk.graal.compiler.replacements.SnippetTemplate.SnippetInfo; import jdk.graal.compiler.replacements.gc.G1WriteBarrierSnippets; +import jdk.graal.compiler.serviceprovider.JavaVersionUtil; import jdk.graal.compiler.word.Word; import jdk.vm.ci.code.Register; import jdk.vm.ci.meta.JavaKind; @@ -230,16 +232,32 @@ public Templates(OptionValues options, Group.Factory factory, HotSpotProviders p SATB_QUEUE_MARKING_ACTIVE_LOCATION, SATB_QUEUE_INDEX_LOCATION, SATB_QUEUE_BUFFER_LOCATION); - g1PostWriteBarrier = snippet(providers, - G1WriteBarrierSnippets.class, - "g1PostWriteBarrier", - null, - receiver, - GC_CARD_LOCATION, - CARD_TABLE_BASE_LOCATION, - CARD_QUEUE_LOG_LOCATION, - CARD_QUEUE_INDEX_LOCATION, - CARD_QUEUE_BUFFER_LOCATION); + + if (JavaVersionUtil.JAVA_SPEC > 21 && Assertions.assertionsEnabled() && config.verifyBeforeGC) { + g1PostWriteBarrier = snippet(providers, + G1WriteBarrierSnippets.class, + "g1PostWriteBarrier", + null, + receiver, + GC_CARD_LOCATION, + CARD_TABLE_BASE_LOCATION, + CARD_QUEUE_LOG_LOCATION, + CARD_QUEUE_INDEX_LOCATION, + CARD_QUEUE_BUFFER_LOCATION, + getClassComponentTypeLocation(providers.getMetaAccess())); + } else { + g1PostWriteBarrier = snippet(providers, + G1WriteBarrierSnippets.class, + "g1PostWriteBarrier", + null, + receiver, + GC_CARD_LOCATION, + CARD_TABLE_BASE_LOCATION, + CARD_QUEUE_LOG_LOCATION, + CARD_QUEUE_INDEX_LOCATION, + CARD_QUEUE_BUFFER_LOCATION); + } + g1ArrayRangePreWriteBarrier = snippet(providers, G1WriteBarrierSnippets.class, "g1ArrayRangePreWriteBarrier", diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/replacements/HotSpotSerialWriteBarrierSnippets.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/replacements/HotSpotSerialWriteBarrierSnippets.java index d192cd0ff5d7..94a3fe6f4357 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/replacements/HotSpotSerialWriteBarrierSnippets.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/replacements/HotSpotSerialWriteBarrierSnippets.java @@ -26,6 +26,7 @@ import static jdk.graal.compiler.hotspot.GraalHotSpotVMConfig.INJECTED_VMCONFIG; +import jdk.graal.compiler.debug.Assertions; import jdk.graal.compiler.hotspot.meta.HotSpotProviders; import jdk.graal.compiler.nodes.gc.SerialArrayRangeWriteBarrierNode; import jdk.graal.compiler.nodes.gc.SerialWriteBarrierNode; @@ -36,6 +37,7 @@ import jdk.graal.compiler.replacements.SnippetTemplate.AbstractTemplates; import jdk.graal.compiler.replacements.SnippetTemplate.SnippetInfo; import jdk.graal.compiler.replacements.gc.SerialWriteBarrierSnippets; +import jdk.graal.compiler.serviceprovider.JavaVersionUtil; import jdk.graal.compiler.word.Word; public class HotSpotSerialWriteBarrierSnippets extends SerialWriteBarrierSnippets { @@ -76,12 +78,24 @@ public Templates(OptionValues options, Group.Factory factory, HotSpotProviders p this.lowerer = new SerialWriteBarrierLowerer(factory); HotSpotSerialWriteBarrierSnippets receiver = new HotSpotSerialWriteBarrierSnippets(); - serialImpreciseWriteBarrier = snippet(providers, - SerialWriteBarrierSnippets.class, - "serialImpreciseWriteBarrier", - null, - receiver, - GC_CARD_LOCATION); + + if (JavaVersionUtil.JAVA_SPEC > 21 && Assertions.assertionsEnabled()) { + serialImpreciseWriteBarrier = snippet(providers, + SerialWriteBarrierSnippets.class, + "serialImpreciseWriteBarrier", + null, + receiver, + GC_CARD_LOCATION, + getClassComponentTypeLocation(providers.getMetaAccess())); + } else { + serialImpreciseWriteBarrier = snippet(providers, + SerialWriteBarrierSnippets.class, + "serialImpreciseWriteBarrier", + null, + receiver, + GC_CARD_LOCATION); + } + serialPreciseWriteBarrier = snippet(providers, SerialWriteBarrierSnippets.class, "serialPreciseWriteBarrier", diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/StandardGraphBuilderPlugins.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/StandardGraphBuilderPlugins.java index 2bd5dc7a698e..e72faa60b2d2 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/StandardGraphBuilderPlugins.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/StandardGraphBuilderPlugins.java @@ -1391,14 +1391,16 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec return true; } }); - r.register(new InvocationPlugin("isArray", Receiver.class) { - @Override - public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) { - LogicNode isArray = b.add(ClassIsArrayNode.create(b.getConstantReflection(), receiver.get(true))); - b.addPush(JavaKind.Boolean, ConditionalNode.create(isArray, NodeView.DEFAULT)); - return true; - } - }); + if (JavaVersionUtil.JAVA_SPEC == 21) { + r.register(new InvocationPlugin("isArray", Receiver.class) { + @Override + public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) { + LogicNode isArray = b.add(ClassIsArrayNode.create(b.getConstantReflection(), receiver.get(true))); + b.addPush(JavaKind.Boolean, ConditionalNode.create(isArray, NodeView.DEFAULT)); + return true; + } + }); + } r.register(new InvocationPlugin("cast", Receiver.class, Object.class) { @Override public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode object) { diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/gc/WriteBarrierSnippets.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/gc/WriteBarrierSnippets.java index f4ef60a9268b..6ac1ee537db4 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/gc/WriteBarrierSnippets.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/gc/WriteBarrierSnippets.java @@ -30,15 +30,31 @@ import org.graalvm.word.LocationIdentity; +import jdk.graal.compiler.debug.GraalError; +import jdk.graal.compiler.nodes.FieldLocationIdentity; import jdk.graal.compiler.nodes.NamedLocationIdentity; import jdk.graal.compiler.nodes.PiNode; import jdk.graal.compiler.nodes.SnippetAnchorNode; import jdk.graal.compiler.replacements.nodes.AssertionNode; import jdk.graal.compiler.word.Word; +import jdk.vm.ci.meta.MetaAccessProvider; +import jdk.vm.ci.meta.ResolvedJavaField; public abstract class WriteBarrierSnippets { public static final LocationIdentity GC_CARD_LOCATION = NamedLocationIdentity.mutable("GC-Card"); + public static FieldLocationIdentity getClassComponentTypeLocation(MetaAccessProvider metaAccessProvider) { + ResolvedJavaField componentTypeField; + + try { + componentTypeField = metaAccessProvider.lookupJavaField(Class.class.getDeclaredField("componentType")); + } catch (NoSuchFieldException e) { + throw GraalError.shouldNotReachHere("Class.componentType is not present"); + } + + return new FieldLocationIdentity(componentTypeField); + } + protected static void verifyNotArray(Object object) { if (probability(LIKELY_PROBABILITY, object != null)) { // Manually build the null check and cast because we're in snippet that's lowered late. diff --git a/substratevm/src/com.oracle.svm.core.foreign/src/com/oracle/svm/core/foreign/ForeignFunctionsRuntime.java b/substratevm/src/com.oracle.svm.core.foreign/src/com/oracle/svm/core/foreign/ForeignFunctionsRuntime.java index ee40c357bd9d..f3caffc8a081 100644 --- a/substratevm/src/com.oracle.svm.core.foreign/src/com/oracle/svm/core/foreign/ForeignFunctionsRuntime.java +++ b/substratevm/src/com.oracle.svm.core.foreign/src/com/oracle/svm/core/foreign/ForeignFunctionsRuntime.java @@ -224,7 +224,7 @@ static boolean isWindows() { */ @Uninterruptible(reason = "Interruptions might change call state.") @SubstrateForeignCallTarget(stubCallingConvention = false, fullyUninterruptible = true) - @BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+7/src/hotspot/share/prims/downcallLinker.cpp") + @BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+12/src/hotspot/share/prims/downcallLinker.cpp") public static void captureCallState(int statesToCapture, CIntPointer captureBuffer) { assert statesToCapture != 0; assert captureBuffer.isNonNull(); diff --git a/substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/AdaptiveCollectionPolicy.java b/substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/AdaptiveCollectionPolicy.java index b2403da5783c..d53ad5a9c5ba 100644 --- a/substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/AdaptiveCollectionPolicy.java +++ b/substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/AdaptiveCollectionPolicy.java @@ -48,7 +48,7 @@ @BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+7/src/hotspot/share/gc/shared/adaptiveSizePolicy.cpp") @BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+1/src/hotspot/share/gc/parallel/psAdaptiveSizePolicy.hpp") @BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+7/src/hotspot/share/gc/parallel/psAdaptiveSizePolicy.cpp") -@BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+6/src/hotspot/share/gc/parallel/psParallelCompact.cpp#L959-L1180") +@BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+12/src/hotspot/share/gc/parallel/psParallelCompact.cpp#L963-L1180") @BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+6/src/hotspot/share/gc/parallel/psScavenge.cpp#L321-L637") @BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+1/src/hotspot/share/gc/shared/gc_globals.hpp#L308-L420") class AdaptiveCollectionPolicy extends AbstractCollectionPolicy { diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/container/ContainerLibrary.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/container/ContainerLibrary.java index 6f6a6e7a8f91..dbcbeb8fbccd 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/container/ContainerLibrary.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/container/ContainerLibrary.java @@ -67,7 +67,7 @@ @BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+7/src/hotspot/os/posix/os_posix.cpp") @BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+6/src/hotspot/os/posix/os_posix.hpp") @BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+6/src/hotspot/os/posix/os_posix.inline.hpp") -@BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+6/src/hotspot/share/memory/allocation.hpp") +@BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+12/src/hotspot/share/memory/allocation.hpp") @BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+6/src/hotspot/share/memory/allocation.inline.hpp") @BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+6/src/hotspot/share/memory/allStatic.hpp") @BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+6/src/hotspot/share/nmt/memTag.hpp") @@ -85,7 +85,7 @@ // The following annotations are for files in `src/svm`, which are completely customized for SVM @BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+6/src/hotspot/share/logging/log.hpp") @BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+7/src/hotspot/share/memory/allocation.cpp") -@BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+6/src/hotspot/share/runtime/globals.hpp") +@BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+12/src/hotspot/share/runtime/globals.hpp") @BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+7/src/hotspot/share/utilities/debug.cpp") @BasedOnJDKFile("https://github.com/openjdk/jdk/blob/jdk-25+6/src/hotspot/share/utilities/debug.hpp") public class ContainerLibrary { diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/snippets/SubstrateGraphBuilderPlugins.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/snippets/SubstrateGraphBuilderPlugins.java index 4de0ba6d0f06..8c7bef1eb279 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/snippets/SubstrateGraphBuilderPlugins.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/snippets/SubstrateGraphBuilderPlugins.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -122,9 +122,11 @@ import jdk.graal.compiler.nodes.NodeView; import jdk.graal.compiler.nodes.PiNode; import jdk.graal.compiler.nodes.ValueNode; +import jdk.graal.compiler.nodes.calc.ConditionalNode; import jdk.graal.compiler.nodes.calc.NarrowNode; import jdk.graal.compiler.nodes.calc.ZeroExtendNode; import jdk.graal.compiler.nodes.extended.BytecodeExceptionNode; +import jdk.graal.compiler.nodes.extended.ClassIsArrayNode; import jdk.graal.compiler.nodes.extended.LoadHubNode; import jdk.graal.compiler.nodes.graphbuilderconf.GraphBuilderContext; import jdk.graal.compiler.nodes.graphbuilderconf.InvocationPlugin; @@ -159,6 +161,7 @@ import jdk.graal.compiler.replacements.nodes.MacroNode.MacroParams; import jdk.graal.compiler.replacements.nodes.VectorizedHashCodeNode; import jdk.graal.compiler.replacements.nodes.VectorizedMismatchNode; +import jdk.graal.compiler.serviceprovider.JavaVersionUtil; import jdk.graal.compiler.word.WordCastNode; import jdk.vm.ci.code.Architecture; import jdk.vm.ci.meta.DeoptimizationAction; @@ -1093,6 +1096,17 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec return false; } }); + if (JavaVersionUtil.JAVA_SPEC > 21) { + // In JDK 21, the same plugin is registered in StandardGraphBuilderPlugins + r.register(new InvocationPlugin("isArray", Receiver.class) { + @Override + public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) { + LogicNode isArray = b.add(ClassIsArrayNode.create(b.getConstantReflection(), receiver.get(true))); + b.addPush(JavaKind.Boolean, ConditionalNode.create(isArray, NodeView.DEFAULT)); + return true; + } + }); + } registerClassDesiredAssertionStatusPlugin(plugins); }