--- old/.mx.jvmci/.pydevproject 2017-04-28 11:48:36.000000000 +0200
+++ new/.mx.jvmci/.pydevproject 2017-04-28 11:48:36.000000000 +0200
@@ -3,7 +3,7 @@
Default
python 2.7
-/.mx.jvmci
+/mx.jvmci
/mx
--- old/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/EventProvider.java 2017-04-28 11:48:37.000000000 +0200
+++ new/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/EventProvider.java 2017-04-28 11:48:36.000000000 +0200
@@ -24,7 +24,6 @@
import jdk.vm.ci.hotspot.EmptyEventProvider.EmptyCompilationEvent;
import jdk.vm.ci.hotspot.EmptyEventProvider.EmptyCompilerFailureEvent;
-import jdk.vm.ci.services.JVMCIPermission;
/**
* Service-provider class for logging compiler related events.
--- old/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCICompilerConfig.java 2017-04-28 11:48:37.000000000 +0200
+++ new/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCICompilerConfig.java 2017-04-28 11:48:37.000000000 +0200
@@ -28,9 +28,9 @@
import jdk.vm.ci.runtime.JVMCICompiler;
import jdk.vm.ci.runtime.JVMCICompilerFactory;
import jdk.vm.ci.runtime.JVMCIRuntime;
-import jdk.vm.ci.services.JVMCIServiceLocator;
import jdk.vm.ci.services.JVMCIPermission;
-import jdk.vm.ci.services.Services;
+import jdk.vm.ci.services.JVMCIServiceLocator;
+import jdk.vm.ci.services.internal.ReflectionAccessJDK;
final class HotSpotJVMCICompilerConfig {
@@ -47,7 +47,7 @@
@Override
public String getCompilerName() {
- return "";
+ return "null";
}
@Override
@@ -73,19 +73,23 @@
JVMCICompilerFactory factory = null;
String compilerName = Option.Compiler.getString();
if (compilerName != null) {
- for (JVMCICompilerFactory f : JVMCIServiceLocator.getProviders(JVMCICompilerFactory.class)) {
- if (f.getCompilerName().equals(compilerName)) {
- factory = f;
+ if (compilerName.isEmpty() || compilerName.equals("null")) {
+ factory = new DummyCompilerFactory();
+ } else {
+ for (JVMCICompilerFactory f : JVMCIServiceLocator.getProviders(JVMCICompilerFactory.class)) {
+ if (f.getCompilerName().equals(compilerName)) {
+ factory = f;
+ }
+ }
+ if (factory == null) {
+ throw new JVMCIError("JVMCI compiler '%s' not found", compilerName);
}
- }
- if (factory == null) {
- throw new JVMCIError("JVMCI compiler '%s' not found", compilerName);
}
} else {
// Auto select a single available compiler
for (JVMCICompilerFactory f : JVMCIServiceLocator.getProviders(JVMCICompilerFactory.class)) {
if (factory == null) {
- Services.exportJVMCITo(f.getClass());
+ ReflectionAccessJDK.openJVMCITo(f.getClass());
factory = f;
} else {
// Multiple factories seen - cancel auto selection
--- old/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java 2017-04-28 11:48:38.000000000 +0200
+++ new/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java 2017-04-28 11:48:38.000000000 +0200
@@ -32,6 +32,7 @@
import java.util.List;
import java.util.Map;
import java.util.Objects;
+import java.util.ServiceLoader;
import java.util.TreeMap;
import jdk.internal.misc.VM;
@@ -50,7 +51,6 @@
import jdk.vm.ci.runtime.JVMCICompiler;
import jdk.vm.ci.runtime.JVMCICompilerFactory;
import jdk.vm.ci.services.JVMCIServiceLocator;
-import jdk.vm.ci.services.Services;
/**
* HotSpot implementation of a JVMCI runtime.
@@ -88,7 +88,10 @@
*/
public enum Option {
// @formatter:off
- Compiler(String.class, null, "Selects the system compiler."),
+ Compiler(String.class, null, "Selects the system compiler. This must match the getCompilerName() value returned " +
+ "by a jdk.vm.ci.runtime.JVMCICompilerFactory provider. " +
+ "An empty string or the value \"null\" selects a compiler " +
+ "that will raise an exception upon receiving a compilation request."),
// Note: The following one is not used (see InitTimer.ENABLED). It is added here
// so that -XX:+JVMCIPrintProperties shows the option.
InitTimer(Boolean.class, false, "Specifies if initialization timing is enabled."),
@@ -208,7 +211,7 @@
}
public static HotSpotJVMCIBackendFactory findFactory(String architecture) {
- for (HotSpotJVMCIBackendFactory factory : Services.load(HotSpotJVMCIBackendFactory.class)) {
+ for (HotSpotJVMCIBackendFactory factory : ServiceLoader.load(HotSpotJVMCIBackendFactory.class, ClassLoader.getSystemClassLoader())) {
if (factory.getArchitecture().equalsIgnoreCase(architecture)) {
return factory;
}
--- old/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMemoryAccessProviderImpl.java 2017-04-28 11:48:39.000000000 +0200
+++ new/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMemoryAccessProviderImpl.java 2017-04-28 11:48:38.000000000 +0200
@@ -98,7 +98,7 @@
boolean aligned = ((displacement - headerSize) % sizeOfElement) == 0;
if (displacement < 0 || displacement > (arrayEnd - sizeOfElement) || (kind == JavaKind.Object && !aligned)) {
int index = (int) ((displacement - headerSize) / sizeOfElement);
- throw new AssertionError("Unsafe array access: reading element of kind " + kind +
+ throw new IllegalArgumentException("Unsafe array access: reading element of kind " + kind +
" at offset " + displacement + " (index ~ " + index + ") in " +
type.toJavaName() + " object of length " + length);
}
--- old/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java 2017-04-28 11:48:39.000000000 +0200
+++ new/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java 2017-04-28 11:48:39.000000000 +0200
@@ -801,8 +801,7 @@
}
if (elementType.getName().startsWith("Ljava/")) {
// Classes in a java.* package can only be defined by the
- // boot class loader. This is enforced by ClassLoader.preDefineClass()
- assert mirror().getClassLoader() == null;
+ // boot or platform class loader.
return true;
}
ClassLoader thisCl = mirror().getClassLoader();
--- old/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.services/src/jdk/vm/ci/services/JVMCIServiceLocator.java 2017-04-28 11:48:40.000000000 +0200
+++ new/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.services/src/jdk/vm/ci/services/JVMCIServiceLocator.java 2017-04-28 11:48:40.000000000 +0200
@@ -24,12 +24,15 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.ServiceLoader;
+
+import jdk.vm.ci.services.internal.ReflectionAccessJDK;
/**
* Service-provider class for the runtime to locate providers of JVMCI services where the latter are
- * not in packages exported by the JVMCI module. As part of instantiating
- * {@link JVMCIServiceLocator}, all JVMCI packages will be {@linkplain Services#exportJVMCITo(Class)
- * exported} to the module defining the class of the instantiated object.
+ * not in packages exported by the JVMCI module. As part of instantiating a
+ * {@link JVMCIServiceLocator}, all JVMCI packages will be opened to the module defining the class
+ * of the instantiated object.
*
* While the {@link #getProvider(Class)} method can be used directly, it's usually easier to use
* {@link #getProviders(Class)}.
@@ -49,30 +52,39 @@
}
/**
- * Creates a capability for accessing JVMCI. Once successfully instantiated, JVMCI exports all
- * its packages to the module defining the type of this object.
+ * Creates a capability for accessing JVMCI. Once successfully instantiated, JVMCI opens all its
+ * packages to the module defining the type of this object.
*
* @throws SecurityException if a security manager has been installed and it denies
* {@link JVMCIPermission}
*/
protected JVMCIServiceLocator() {
this(checkPermission());
- Services.exportJVMCITo(getClass());
+ Services.checkJVMCIEnabled();
+ ReflectionAccessJDK.openJVMCITo(getClass());
}
/**
* Gets the provider of the service defined by {@code service} or {@code null} if this object
* does not have a provider for {@code service}.
*/
- public abstract S getProvider(Class service);
+ protected abstract S getProvider(Class service);
/**
- * Gets the providers of the service defined by {@code service} by querying the
- * {@link JVMCIServiceLocator} providers obtained by {@link Services#load(Class)}.
+ * Gets the providers of the service defined by {@code service} by querying the available
+ * {@link JVMCIServiceLocator} providers.
+ *
+ * @throws SecurityException if a security manager is present and it denies
+ * {@link JVMCIPermission}
*/
public static List getProviders(Class service) {
+ Services.checkJVMCIEnabled();
+ SecurityManager sm = System.getSecurityManager();
+ if (sm != null) {
+ sm.checkPermission(new JVMCIPermission());
+ }
List providers = new ArrayList<>();
- for (JVMCIServiceLocator access : Services.load(JVMCIServiceLocator.class)) {
+ for (JVMCIServiceLocator access : ServiceLoader.load(JVMCIServiceLocator.class, ClassLoader.getSystemClassLoader())) {
S provider = access.getProvider(service);
if (provider != null) {
providers.add(provider);
--- old/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.services/src/jdk/vm/ci/services/Services.java 2017-04-28 11:48:41.000000000 +0200
+++ new/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.services/src/jdk/vm/ci/services/Services.java 2017-04-28 11:48:40.000000000 +0200
@@ -22,167 +22,64 @@
*/
package jdk.vm.ci.services;
-import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
-import java.util.Formatter;
-import java.util.Iterator;
-import java.util.ServiceConfigurationError;
-import java.util.ServiceLoader;
-import java.util.Set;
+import java.util.Map;
/**
- * A mechanism for accessing service providers via JVMCI.
+ * Provides utilities needed by JVMCI clients.
*/
public final class Services {
- private Services() {
- }
-
- private static int getJavaSpecificationVersion() {
- String value = System.getProperty("java.specification.version");
- if (value.startsWith("1.")) {
- value = value.substring(2);
- }
- return Integer.parseInt(value);
- }
-
- /**
- * The integer value corresponding to the value of the {@code java.specification.version} system
- * property after any leading {@code "1."} has been stripped.
- */
- public static final int JAVA_SPECIFICATION_VERSION = getJavaSpecificationVersion();
+ // This class must be compilable and executable on JDK 8 since it's used in annotation
+ // processors while building JDK 9 so use of API added in JDK 9 is made via reflection.
- // Use reflection so that this compiles on Java 8
- private static final Method getModule;
- private static final Method getPackages;
- private static final Method addUses;
- private static final Method isExported;
- private static final Method addExports;
-
- static {
- if (JAVA_SPECIFICATION_VERSION >= 9) {
- try {
- getModule = Class.class.getMethod("getModule");
- Class> moduleClass = getModule.getReturnType();
- getPackages = moduleClass.getMethod("getPackages");
- addUses = moduleClass.getMethod("addUses", Class.class);
- isExported = moduleClass.getMethod("isExported", String.class, moduleClass);
- addExports = moduleClass.getMethod("addExports", String.class, moduleClass);
- } catch (NoSuchMethodException | SecurityException e) {
- throw new InternalError(e);
- }
- } else {
- getModule = null;
- getPackages = null;
- addUses = null;
- isExported = null;
- addExports = null;
- }
+ private Services() {
}
@SuppressWarnings("unchecked")
- static T invoke(Method method, Object receiver, Object... args) {
+ private static Map initSavedProperties() throws InternalError {
try {
- return (T) method.invoke(receiver, args);
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
+ Class> vmClass = Class.forName("jdk.internal.misc.VM");
+ Method m = vmClass.getMethod("getSavedProperties");
+ return (Map) m.invoke(null);
+ } catch (Exception e) {
throw new InternalError(e);
}
}
+ static final Map SAVED_PROPERTIES = initSavedProperties();
+ static final boolean JVMCI_ENABLED = Boolean.parseBoolean(SAVED_PROPERTIES.get("jdk.internal.vm.ci.enabled"));
+
/**
- * Performs any required security checks and dynamic reconfiguration to allow the module of a
- * given class to access the classes in the JVMCI module.
- *
- * Note: This API uses {@link Class} instead of {@code Module} to provide backwards
- * compatibility for JVMCI clients compiled against a JDK release earlier than 9.
- *
- * @param requestor a class requesting access to the JVMCI module for its module
- * @throws SecurityException if a security manager is present and it denies
- * {@link JVMCIPermission}
+ * Checks that JVMCI is enabled in the VM and throws an error if it isn't.
*/
- public static void exportJVMCITo(Class> requestor) {
- SecurityManager sm = System.getSecurityManager();
- if (sm != null) {
- sm.checkPermission(new JVMCIPermission());
- }
- if (JAVA_SPECIFICATION_VERSION >= 9) {
- Object jvmci = invoke(getModule, Services.class);
- Object requestorModule = invoke(getModule, requestor);
- if (jvmci != requestorModule) {
- Set packages = invoke(getPackages, jvmci);
- for (String pkg : packages) {
- // Export all JVMCI packages dynamically instead
- // of requiring a long list of --add-exports
- // options on the JVM command line.
- boolean exported = invoke(isExported, jvmci, pkg, requestorModule);
- if (!exported) {
- invoke(addExports, jvmci, pkg, requestorModule);
- }
- }
- }
+ static void checkJVMCIEnabled() {
+ if (!JVMCI_ENABLED) {
+ throw new Error("The EnableJVMCI VM option must be true (i.e., -XX:+EnableJVMCI) to use JVMCI");
}
}
/**
- * Gets an {@link Iterable} of the JVMCI providers available for a given service.
- *
- * @throws SecurityException if a security manager is present and it denies
- * {@link JVMCIPermission}
+ * Gets an unmodifiable copy of the system properties saved when {@link System} is initialized.
*/
- public static Iterable load(Class service) {
+ public static Map getSavedProperties() {
+ checkJVMCIEnabled();
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPermission(new JVMCIPermission());
}
- if (JAVA_SPECIFICATION_VERSION >= 9) {
- Object jvmci = invoke(getModule, Services.class);
- invoke(addUses, jvmci, service);
- }
-
- // Restrict JVMCI clients to be on the class path or module path
- return ServiceLoader.load(service, ClassLoader.getSystemClassLoader());
+ return SAVED_PROPERTIES;
}
/**
- * Gets the JVMCI provider for a given service for which at most one provider must be available.
- *
- * @param service the service whose provider is being requested
- * @param required specifies if an {@link InternalError} should be thrown if no provider of
- * {@code service} is available
- * @throws SecurityException if a security manager is present and it denies
- * {@link JVMCIPermission}
+ * Causes the JVMCI subsystem to be initialized if it isn't already initialized.
*/
- public static S loadSingle(Class service, boolean required) {
- SecurityManager sm = System.getSecurityManager();
- if (sm != null) {
- sm.checkPermission(new JVMCIPermission());
- }
- if (JAVA_SPECIFICATION_VERSION >= 9) {
- Object jvmci = invoke(getModule, Services.class);
- invoke(addUses, jvmci, service);
- }
- // Restrict JVMCI clients to be on the class path or module path
- Iterable providers = ServiceLoader.load(service, ClassLoader.getSystemClassLoader());
- S singleProvider = null;
+ public static void initializeJVMCI() {
+ checkJVMCIEnabled();
try {
- for (Iterator it = providers.iterator(); it.hasNext();) {
- singleProvider = it.next();
- if (it.hasNext()) {
- throw new InternalError(String.format("Multiple %s providers found", service.getName()));
- }
- }
- } catch (ServiceConfigurationError e) {
- // If the service is required we will bail out below.
- }
- if (singleProvider == null && required) {
- String javaHome = System.getProperty("java.home");
- String vmName = System.getProperty("java.vm.name");
- Formatter errorMessage = new Formatter();
- errorMessage.format("The VM does not expose required service %s.%n", service.getName());
- errorMessage.format("Currently used Java home directory is %s.%n", javaHome);
- errorMessage.format("Currently used VM configuration is: %s", vmName);
- throw new UnsupportedOperationException(errorMessage.toString());
+ Class.forName("jdk.vm.ci.runtime.JVMCI");
+ } catch (ClassNotFoundException e) {
+ throw new InternalError(e);
}
- return singleProvider;
}
}
--- old/src/jdk.internal.vm.ci/share/classes/module-info.java 2017-04-28 11:48:41.000000000 +0200
+++ new/src/jdk.internal.vm.ci/share/classes/module-info.java 2017-04-28 11:48:41.000000000 +0200
@@ -33,37 +33,4 @@
jdk.vm.ci.hotspot.aarch64.AArch64HotSpotJVMCIBackendFactory,
jdk.vm.ci.hotspot.amd64.AMD64HotSpotJVMCIBackendFactory,
jdk.vm.ci.hotspot.sparc.SPARCHotSpotJVMCIBackendFactory;
-
- exports jdk.vm.ci.aarch64 to
- jdk.internal.vm.compiler;
- exports jdk.vm.ci.amd64 to
- jdk.aot,
- jdk.internal.vm.compiler;
- exports jdk.vm.ci.code to
- jdk.aot,
- jdk.internal.vm.compiler;
- exports jdk.vm.ci.code.site to
- jdk.aot,
- jdk.internal.vm.compiler;
- exports jdk.vm.ci.code.stack to
- jdk.internal.vm.compiler;
- exports jdk.vm.ci.common to
- jdk.internal.vm.compiler;
- exports jdk.vm.ci.hotspot to
- jdk.aot,
- jdk.internal.vm.compiler;
- exports jdk.vm.ci.hotspot.aarch64 to
- jdk.internal.vm.compiler;
- exports jdk.vm.ci.hotspot.amd64 to
- jdk.internal.vm.compiler;
- exports jdk.vm.ci.hotspot.sparc to
- jdk.internal.vm.compiler;
- exports jdk.vm.ci.meta to
- jdk.aot,
- jdk.internal.vm.compiler;
- exports jdk.vm.ci.runtime to
- jdk.aot,
- jdk.internal.vm.compiler;
- exports jdk.vm.ci.sparc to
- jdk.internal.vm.compiler;
}
--- old/src/jdk.internal.vm.compiler/.mx.graal/.pydevproject 2017-04-28 11:48:42.000000000 +0200
+++ new/src/jdk.internal.vm.compiler/.mx.graal/.pydevproject 2017-04-28 11:48:42.000000000 +0200
@@ -3,9 +3,9 @@
Default
python 2.7
-/mx.graal
-/mx.graal
-/mx.graal
+/.mx.graal
+/.mx.graal
+/.mx.graal
--- old/src/jdk.internal.vm.compiler/.mx.graal/suite.py 2017-04-28 11:48:43.000000000 +0200
+++ new/src/jdk.internal.vm.compiler/.mx.graal/suite.py 2017-04-28 11:48:43.000000000 +0200
@@ -8,6 +8,36 @@
# (e.g., macosx-x86_64-normal-server-release).
"outputRoot" : "../../../build/mx/hotspot",
+ "jdklibraries" : {
+ "JVMCI_SERVICES" : {
+ "path" : "lib/jvmci-services.jar",
+ "sourcePath" : "lib/jvmci-services.src.zip",
+ "optional" : False,
+ "jdkStandardizedSince" : "9",
+ "module" : "jdk.internal.vm.ci"
+ },
+ "JVMCI_API" : {
+ "path" : "lib/jvmci/jvmci-api.jar",
+ "sourcePath" : "lib/jvmci/jvmci-api.src.zip",
+ "dependencies" : [
+ "JVMCI_SERVICES",
+ ],
+ "optional" : False,
+ "jdkStandardizedSince" : "9",
+ "module" : "jdk.internal.vm.ci"
+ },
+ "JVMCI_HOTSPOT" : {
+ "path" : "lib/jvmci/jvmci-hotspot.jar",
+ "sourcePath" : "lib/jvmci/jvmci-hotspot.src.zip",
+ "dependencies" : [
+ "JVMCI_API",
+ ],
+ "optional" : False,
+ "jdkStandardizedSince" : "9",
+ "module" : "jdk.internal.vm.ci"
+ },
+ },
+
"libraries" : {
# ------------- Libraries -------------
@@ -17,6 +47,16 @@
"sha1" : "476d9a44cd19d6b55f81571077dfa972a4f8a083",
"bootClassPathAgent" : "true",
},
+ "ASM5" : {
+ "sha1" : "0da08b8cce7bbf903602a25a3a163ae252435795",
+ "urls" : ["https://lafo.ssw.uni-linz.ac.at/pub/graal-external-deps/asm-5.0.4.jar"],
+ },
+
+ "ASM_TREE5" : {
+ "sha1" : "396ce0c07ba2b481f25a70195c7c94922f0d1b0b",
+ "urls" : ["https://lafo.ssw.uni-linz.ac.at/pub/graal-external-deps/asm-tree-5.0.4.jar"],
+ "dependencies" : ["ASM5"],
+ },
},
"projects" : {
@@ -32,6 +72,7 @@
"org.graalvm.compiler.serviceprovider" : {
"subDir" : "share/classes",
+ "dependencies" : ["JVMCI_SERVICES"],
"sourceDirs" : ["src"],
"checkstyle" : "org.graalvm.compiler.graph",
"javaCompliance" : "1.8",
@@ -49,6 +90,7 @@
"org.graalvm.compiler.options" : {
"subDir" : "share/classes",
+ "dependencies" : ["JVMCI_SERVICES", "JVMCI_API"],
"sourceDirs" : ["src"],
"checkstyle" : "org.graalvm.compiler.graph",
"javaCompliance" : "1.8",
@@ -83,6 +125,7 @@
"sourceDirs" : ["src"],
"checkstyle" : "org.graalvm.compiler.graph",
"dependencies" : [
+ "JVMCI_API",
"org.graalvm.compiler.serviceprovider",
"org.graalvm.compiler.options"
],
@@ -137,6 +180,7 @@
"sourceDirs" : ["src"],
"checkstyle" : "org.graalvm.compiler.graph",
"dependencies" : [
+ "JVMCI_HOTSPOT",
"org.graalvm.compiler.core.test",
],
"javaCompliance" : "1.8",
@@ -146,6 +190,9 @@
"org.graalvm.compiler.api.runtime" : {
"subDir" : "share/classes",
"sourceDirs" : ["src"],
+ "dependencies" : [
+ "JVMCI_API",
+ ],
"checkstyle" : "org.graalvm.compiler.graph",
"javaCompliance" : "1.8",
"workingSets" : "API,Graal",
@@ -156,6 +203,7 @@
"sourceDirs" : ["src"],
"dependencies" : [
"mx:JUNIT",
+ "JVMCI_SERVICES",
"org.graalvm.compiler.api.runtime",
],
"checkstyle" : "org.graalvm.compiler.graph",
@@ -166,6 +214,7 @@
"org.graalvm.compiler.api.replacements" : {
"subDir" : "share/classes",
"sourceDirs" : ["src"],
+ "dependencies" : ["JVMCI_API"],
"checkstyle" : "org.graalvm.compiler.graph",
"javaCompliance" : "1.8",
"workingSets" : "API,Graal,Replacements",
@@ -175,6 +224,7 @@
"subDir" : "share/classes",
"sourceDirs" : ["src"],
"dependencies" : [
+ "JVMCI_HOTSPOT",
"org.graalvm.compiler.api.runtime",
"org.graalvm.compiler.replacements",
"org.graalvm.compiler.runtime",
@@ -261,6 +311,8 @@
"org.graalvm.compiler.hotspot",
"org.graalvm.compiler.lir.jtt",
"org.graalvm.compiler.lir.test",
+ "JVMCI_API",
+ "JVMCI_HOTSPOT",
],
"checkstyle" : "org.graalvm.compiler.graph",
"javaCompliance" : "1.8",
@@ -347,6 +399,9 @@
"org.graalvm.compiler.asm" : {
"subDir" : "share/classes",
"sourceDirs" : ["src"],
+ "dependencies" : [
+ "JVMCI_API",
+ ],
"checkstyle" : "org.graalvm.compiler.graph",
"javaCompliance" : "1.8",
"workingSets" : "Graal,Assembler",
@@ -403,6 +458,7 @@
"org.graalvm.compiler.bytecode" : {
"subDir" : "share/classes",
"sourceDirs" : ["src"],
+ "dependencies" : ["JVMCI_API"],
"checkstyle" : "org.graalvm.compiler.graph",
"javaCompliance" : "1.8",
"workingSets" : "Graal,Java",
@@ -774,6 +830,7 @@
"dependencies" : [
"org.graalvm.compiler.lir.jtt",
"org.graalvm.compiler.lir.aarch64",
+ "JVMCI_HOTSPOT"
],
"checkstyle" : "org.graalvm.compiler.graph",
"javaCompliance" : "1.8",
@@ -803,6 +860,7 @@
"dependencies" : [
"org.graalvm.compiler.lir.jtt",
"org.graalvm.compiler.lir.amd64",
+ "JVMCI_HOTSPOT"
],
"checkstyle" : "org.graalvm.compiler.graph",
"javaCompliance" : "1.8",
@@ -831,6 +889,7 @@
"sourceDirs" : ["src"],
"dependencies" : [
"org.graalvm.compiler.lir.jtt",
+ "JVMCI_HOTSPOT"
],
"checkstyle" : "org.graalvm.compiler.graph",
"javaCompliance" : "1.8",
@@ -908,6 +967,7 @@
"org.graalvm.compiler.graph.test",
"org.graalvm.compiler.printer",
"JAVA_ALLOCATION_INSTRUMENTER",
+ "ASM_TREE5",
],
"annotationProcessors" : ["GRAAL_NODEINFO_PROCESSOR"],
"checkstyle" : "org.graalvm.compiler.graph",
--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.api.test/src/org/graalvm/compiler/api/test/Graal.java 2017-04-28 11:48:44.000000000 +0200
+++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.api.test/src/org/graalvm/compiler/api/test/Graal.java 2017-04-28 11:48:44.000000000 +0200
@@ -40,7 +40,7 @@
private static final GraalRuntime runtime = initializeRuntime();
private static GraalRuntime initializeRuntime() {
- Services.exportJVMCITo(Graal.class);
+ Services.initializeJVMCI();
JVMCICompiler compiler = JVMCI.getRuntime().getCompiler();
if (compiler instanceof GraalJVMCICompiler) {
GraalJVMCICompiler graal = (GraalJVMCICompiler) compiler;
--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/util/ModuleAPI.java 2017-04-28 11:48:45.000000000 +0200
+++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/util/ModuleAPI.java 2017-04-28 11:48:45.000000000 +0200
@@ -53,11 +53,6 @@
public static final ModuleAPI getModule;
/**
- * {@code jdk.internal.module.Modules.addExports(Module, String, Module)}.
- */
- public static final ModuleAPI addExports;
-
- /**
* {@code java.lang.Module.getResourceAsStream(String)}.
*/
public static final ModuleAPI getResourceAsStream;
@@ -116,13 +111,11 @@
try {
getModule = new ModuleAPI(Class.class.getMethod("getModule"));
Class> moduleClass = getModule.method.getReturnType();
- Class> modulesClass = Class.forName("jdk.internal.module.Modules");
getResourceAsStream = new ModuleAPI(moduleClass.getMethod("getResourceAsStream", String.class));
canRead = new ModuleAPI(moduleClass.getMethod("canRead", moduleClass));
isExported = new ModuleAPI(moduleClass.getMethod("isExported", String.class));
isExportedTo = new ModuleAPI(moduleClass.getMethod("isExported", String.class, moduleClass));
- addExports = new ModuleAPI(modulesClass.getDeclaredMethod("addExports", moduleClass, String.class, moduleClass));
- } catch (NoSuchMethodException | SecurityException | ClassNotFoundException e) {
+ } catch (NoSuchMethodException | SecurityException e) {
throw new InternalError(e);
}
} else {
@@ -132,8 +125,6 @@
canRead = unavailable;
isExported = unavailable;
isExportedTo = unavailable;
- addExports = unavailable;
}
-
}
}
--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/CheckGraalInvariants.java 2017-04-28 11:48:46.000000000 +0200
+++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/CheckGraalInvariants.java 2017-04-28 11:48:45.000000000 +0200
@@ -127,7 +127,7 @@
MetaAccessProvider metaAccess = providers.getMetaAccess();
PhaseSuite graphBuilderSuite = new PhaseSuite<>();
- Plugins plugins = new Plugins(new InvocationPlugins(metaAccess));
+ Plugins plugins = new Plugins(new InvocationPlugins());
GraphBuilderConfiguration config = GraphBuilderConfiguration.getDefault(plugins).withEagerResolving(true);
graphBuilderSuite.appendPhase(new GraphBuilderPhase(config));
HighTierContext context = new HighTierContext(providers, graphBuilderSuite, OptimisticOptimizations.NONE);
--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/InterfaceMethodHandleTest.java 2017-04-28 11:48:46.000000000 +0200
+++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/InterfaceMethodHandleTest.java 2017-04-28 11:48:46.000000000 +0200
@@ -26,15 +26,14 @@
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
-import org.junit.Test;
-
import org.graalvm.compiler.code.CompilationResult;
import org.graalvm.compiler.test.ExportingClassLoader;
+import org.junit.Test;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
-import jdk.internal.org.objectweb.asm.ClassWriter;
-import jdk.internal.org.objectweb.asm.Label;
-import jdk.internal.org.objectweb.asm.MethodVisitor;
-import jdk.internal.org.objectweb.asm.Opcodes;
import jdk.vm.ci.code.InstalledCode;
import jdk.vm.ci.meta.ResolvedJavaMethod;
--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/OptionsVerifierTest.java 2017-04-28 11:48:47.000000000 +0200
+++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/OptionsVerifierTest.java 2017-04-28 11:48:47.000000000 +0200
@@ -44,19 +44,17 @@
import java.util.ServiceLoader;
import java.util.Set;
-import org.junit.Test;
-
import org.graalvm.compiler.options.OptionDescriptor;
import org.graalvm.compiler.options.OptionDescriptors;
import org.graalvm.compiler.options.OptionValue;
import org.graalvm.compiler.test.GraalTest;
-
-import jdk.internal.org.objectweb.asm.ClassReader;
-import jdk.internal.org.objectweb.asm.ClassVisitor;
-import jdk.internal.org.objectweb.asm.Label;
-import jdk.internal.org.objectweb.asm.MethodVisitor;
-import jdk.internal.org.objectweb.asm.Opcodes;
-import jdk.internal.org.objectweb.asm.Type;
+import org.junit.Test;
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.Type;
/**
* Verifies a class declaring one or more {@linkplain OptionValue options} has a class initializer
--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/StaticInterfaceFieldTest.java 2017-04-28 11:48:48.000000000 +0200
+++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/StaticInterfaceFieldTest.java 2017-04-28 11:48:48.000000000 +0200
@@ -83,7 +83,7 @@
MetaAccessProvider metaAccess = providers.getMetaAccess();
PhaseSuite graphBuilderSuite = new PhaseSuite<>();
- Plugins plugins = new Plugins(new InvocationPlugins(metaAccess));
+ Plugins plugins = new Plugins(new InvocationPlugins());
GraphBuilderConfiguration config = GraphBuilderConfiguration.getDefault(plugins).withEagerResolving(true);
graphBuilderSuite.appendPhase(new GraphBuilderPhase(config));
HighTierContext context = new HighTierContext(providers, graphBuilderSuite, OptimisticOptimizations.NONE);
--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/UnbalancedMonitorsTest.java 2017-04-28 11:48:49.000000000 +0200
+++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/UnbalancedMonitorsTest.java 2017-04-28 11:48:48.000000000 +0200
@@ -24,10 +24,10 @@
import jdk.vm.ci.code.BailoutException;
import jdk.vm.ci.meta.ResolvedJavaMethod;
-import jdk.internal.org.objectweb.asm.ClassWriter;
-import jdk.internal.org.objectweb.asm.Label;
-import jdk.internal.org.objectweb.asm.MethodVisitor;
-import jdk.internal.org.objectweb.asm.Opcodes;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
import static org.graalvm.compiler.core.common.CompilationIdentifier.INVALID_COMPILATION_ID;
@@ -86,7 +86,7 @@
ResolvedJavaMethod method = getResolvedJavaMethod(LOADER.findClass(INNER_CLASS_NAME), name);
try {
StructuredGraph graph = new StructuredGraph(method, AllowAssumptions.NO, INVALID_COMPILATION_ID);
- Plugins plugins = new Plugins(new InvocationPlugins(getMetaAccess()));
+ Plugins plugins = new Plugins(new InvocationPlugins());
GraphBuilderConfiguration graphBuilderConfig = GraphBuilderConfiguration.getDefault(plugins).withEagerResolving(true);
OptimisticOptimizations optimisticOpts = OptimisticOptimizations.NONE;
--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/VerifyBailoutUsageTest.java 2017-04-28 11:48:50.000000000 +0200
+++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/VerifyBailoutUsageTest.java 2017-04-28 11:48:49.000000000 +0200
@@ -122,7 +122,7 @@
Providers providers = rt.getHostBackend().getProviders();
MetaAccessProvider metaAccess = providers.getMetaAccess();
PhaseSuite graphBuilderSuite = new PhaseSuite<>();
- Plugins plugins = new Plugins(new InvocationPlugins(metaAccess));
+ Plugins plugins = new Plugins(new InvocationPlugins());
GraphBuilderConfiguration config = GraphBuilderConfiguration.getDefault(plugins).withEagerResolving(true);
graphBuilderSuite.appendPhase(new GraphBuilderPhase(config));
HighTierContext context = new HighTierContext(providers, graphBuilderSuite, OptimisticOptimizations.NONE);
--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/VerifyDebugUsageTest.java 2017-04-28 11:48:50.000000000 +0200
+++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/VerifyDebugUsageTest.java 2017-04-28 11:48:50.000000000 +0200
@@ -300,7 +300,7 @@
Providers providers = rt.getHostBackend().getProviders();
MetaAccessProvider metaAccess = providers.getMetaAccess();
PhaseSuite graphBuilderSuite = new PhaseSuite<>();
- Plugins plugins = new Plugins(new InvocationPlugins(metaAccess));
+ Plugins plugins = new Plugins(new InvocationPlugins());
GraphBuilderConfiguration config = GraphBuilderConfiguration.getDefault(plugins).withEagerResolving(true);
graphBuilderSuite.appendPhase(new GraphBuilderPhase(config));
HighTierContext context = new HighTierContext(providers, graphBuilderSuite, OptimisticOptimizations.NONE);
--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/VerifyVirtualizableTest.java 2017-04-28 11:48:51.000000000 +0200
+++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/VerifyVirtualizableTest.java 2017-04-28 11:48:51.000000000 +0200
@@ -267,7 +267,7 @@
Providers providers = rt.getHostBackend().getProviders();
MetaAccessProvider metaAccess = providers.getMetaAccess();
PhaseSuite graphBuilderSuite = new PhaseSuite<>();
- Plugins plugins = new Plugins(new InvocationPlugins(metaAccess));
+ Plugins plugins = new Plugins(new InvocationPlugins());
GraphBuilderConfiguration config = GraphBuilderConfiguration.getDefault(plugins).withEagerResolving(true);
graphBuilderSuite.appendPhase(new GraphBuilderPhase(config));
HighTierContext context = new HighTierContext(providers, graphBuilderSuite, OptimisticOptimizations.NONE);
--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/debug/VerifyMethodMetricsTest.java 2017-04-28 11:48:52.000000000 +0200
+++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/debug/VerifyMethodMetricsTest.java 2017-04-28 11:48:51.000000000 +0200
@@ -249,7 +249,7 @@
Providers providers = rt.getHostBackend().getProviders();
MetaAccessProvider metaAccess = providers.getMetaAccess();
PhaseSuite graphBuilderSuite = new PhaseSuite<>();
- Plugins plugins = new Plugins(new InvocationPlugins(metaAccess));
+ Plugins plugins = new Plugins(new InvocationPlugins());
GraphBuilderConfiguration config = GraphBuilderConfiguration.getDefault(plugins).withEagerResolving(true);
graphBuilderSuite.appendPhase(new GraphBuilderPhase(config));
HighTierContext context = new HighTierContext(providers, graphBuilderSuite, OptimisticOptimizations.NONE);
--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/tutorial/StaticAnalysis.java 2017-04-28 11:48:52.000000000 +0200
+++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/tutorial/StaticAnalysis.java 2017-04-28 11:48:52.000000000 +0200
@@ -253,7 +253,7 @@
* the code before static analysis, the classes would otherwise be not loaded
* yet and the bytecode parser would only create a graph.
*/
- Plugins plugins = new Plugins(new InvocationPlugins(metaAccess));
+ Plugins plugins = new Plugins(new InvocationPlugins());
GraphBuilderConfiguration graphBuilderConfig = GraphBuilderConfiguration.getDefault(plugins).withEagerResolving(true);
/*
* For simplicity, we ignore all exception handling during the static analysis.
--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/CheckGraalIntrinsics.java 2017-04-28 11:48:53.000000000 +0200
+++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/CheckGraalIntrinsics.java 2017-04-28 11:48:53.000000000 +0200
@@ -29,15 +29,12 @@
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.stream.Collectors;
-import org.junit.Test;
-
import org.graalvm.compiler.api.test.Graal;
import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider;
@@ -45,12 +42,15 @@
import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin;
import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins;
+import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins.Binding;
import org.graalvm.compiler.runtime.RuntimeProvider;
import org.graalvm.compiler.test.GraalTest;
+import org.junit.Test;
import jdk.vm.ci.hotspot.HotSpotVMConfigStore;
import jdk.vm.ci.hotspot.VMIntrinsicMethod;
import jdk.vm.ci.meta.MetaAccessProvider;
+import jdk.vm.ci.meta.MetaUtil;
import jdk.vm.ci.meta.MethodHandleAccessProvider.IntrinsicMethod;
import jdk.vm.ci.meta.ResolvedJavaMethod;
@@ -63,11 +63,10 @@
*/
public class CheckGraalIntrinsics extends GraalTest {
- public static boolean match(ResolvedJavaMethod method, VMIntrinsicMethod intrinsic) {
- if (intrinsic.name.equals(method.getName())) {
- if (intrinsic.descriptor.equals(method.getSignature().toMethodDescriptor())) {
- String declaringClass = method.getDeclaringClass().toClassName().replace('.', '/');
- if (declaringClass.equals(intrinsic.declaringClass)) {
+ public static boolean match(String type, Binding binding, VMIntrinsicMethod intrinsic) {
+ if (intrinsic.name.equals(binding.name)) {
+ if (intrinsic.descriptor.startsWith(binding.argumentsDescriptor)) {
+ if (type.equals(intrinsic.declaringClass)) {
return true;
}
}
@@ -75,16 +74,20 @@
return false;
}
- private static ResolvedJavaMethod findMethod(Set methods, VMIntrinsicMethod intrinsic) {
- for (ResolvedJavaMethod method : methods) {
- if (match(method, intrinsic)) {
- return method;
+ public static InvocationPlugin findPlugin(Map> bindings, VMIntrinsicMethod intrinsic) {
+ for (Map.Entry> e : bindings.entrySet()) {
+ // Match format of VMIntrinsicMethod.declaringClass
+ String type = MetaUtil.internalNameToJava(e.getKey(), true, false).replace('.', '/');
+ for (Binding binding : e.getValue()) {
+ if (match(type, binding, intrinsic)) {
+ return binding.plugin;
+ }
}
}
return null;
}
- private static ResolvedJavaMethod resolveIntrinsic(MetaAccessProvider metaAccess, VMIntrinsicMethod intrinsic) throws ClassNotFoundException {
+ public static ResolvedJavaMethod resolveIntrinsic(MetaAccessProvider metaAccess, VMIntrinsicMethod intrinsic) throws ClassNotFoundException {
Class> c = Class.forName(intrinsic.declaringClass.replace('/', '.'), false, CheckGraalIntrinsics.class.getClassLoader());
for (Method javaMethod : c.getDeclaredMethods()) {
if (javaMethod.getName().equals(intrinsic.name)) {
@@ -425,28 +428,20 @@
public void test() throws ClassNotFoundException {
HotSpotGraalRuntimeProvider rt = (HotSpotGraalRuntimeProvider) Graal.getRequiredCapability(RuntimeProvider.class);
HotSpotProviders providers = rt.getHostBackend().getProviders();
- Map impl = new HashMap<>();
Plugins graphBuilderPlugins = providers.getGraphBuilderPlugins();
InvocationPlugins invocationPlugins = graphBuilderPlugins.getInvocationPlugins();
- for (ResolvedJavaMethod method : invocationPlugins.getMethods()) {
- InvocationPlugin plugin = invocationPlugins.lookupInvocation(method);
- assert plugin != null;
- impl.put(method, plugin);
- }
- Set methods = invocationPlugins.getMethods();
HotSpotVMConfigStore store = rt.getVMConfig().getStore();
List intrinsics = store.getIntrinsics();
List missing = new ArrayList<>();
+ Map> bindings = invocationPlugins.getBindings(true);
for (VMIntrinsicMethod intrinsic : intrinsics) {
- ResolvedJavaMethod method = findMethod(methods, intrinsic);
- if (method == null) {
- method = resolveIntrinsic(providers.getMetaAccess(), intrinsic);
-
- IntrinsicMethod intrinsicMethod = null;
+ InvocationPlugin plugin = findPlugin(bindings, intrinsic);
+ if (plugin == null) {
+ ResolvedJavaMethod method = resolveIntrinsic(providers.getMetaAccess(), intrinsic);
if (method != null) {
- intrinsicMethod = providers.getConstantReflection().getMethodHandleAccess().lookupMethodHandleIntrinsic(method);
+ IntrinsicMethod intrinsicMethod = providers.getConstantReflection().getMethodHandleAccess().lookupMethodHandleIntrinsic(method);
if (intrinsicMethod != null) {
continue;
}
--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/ConstantPoolSubstitutionsTests.java 2017-04-28 11:48:54.000000000 +0200
+++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/ConstantPoolSubstitutionsTests.java 2017-04-28 11:48:54.000000000 +0200
@@ -39,9 +39,9 @@
import org.junit.BeforeClass;
import org.junit.Test;
-import jdk.internal.org.objectweb.asm.ClassWriter;
-import jdk.internal.org.objectweb.asm.MethodVisitor;
-import jdk.internal.org.objectweb.asm.Opcodes;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
import jdk.vm.ci.meta.ResolvedJavaMethod;
public class ConstantPoolSubstitutionsTests extends GraalCompilerTest implements Opcodes {
--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/TestIntrinsicCompiles.java 2017-04-28 11:48:54.000000000 +0200
+++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.test/src/org/graalvm/compiler/hotspot/test/TestIntrinsicCompiles.java 2017-04-28 11:48:54.000000000 +0200
@@ -22,13 +22,12 @@
*/
package org.graalvm.compiler.hotspot.test;
-import java.util.List;
-import java.util.Set;
+import static org.graalvm.compiler.core.common.CompilationIdentifier.INVALID_COMPILATION_ID;
-import org.junit.Test;
+import java.util.List;
+import java.util.Map;
import org.graalvm.compiler.api.test.Graal;
-import org.graalvm.compiler.core.common.CompilationIdentifier;
import org.graalvm.compiler.core.test.GraalCompilerTest;
import org.graalvm.compiler.hotspot.HotSpotGraalCompiler;
import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider;
@@ -37,8 +36,10 @@
import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin;
import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins;
+import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins.Binding;
import org.graalvm.compiler.nodes.graphbuilderconf.MethodSubstitutionPlugin;
import org.graalvm.compiler.runtime.RuntimeProvider;
+import org.junit.Test;
import jdk.vm.ci.hotspot.HotSpotVMConfigStore;
import jdk.vm.ci.hotspot.VMIntrinsicMethod;
@@ -50,46 +51,27 @@
*/
public class TestIntrinsicCompiles extends GraalCompilerTest {
- private static boolean match(ResolvedJavaMethod method, VMIntrinsicMethod intrinsic) {
- if (intrinsic.name.equals(method.getName())) {
- if (intrinsic.descriptor.equals(method.getSignature().toMethodDescriptor())) {
- String declaringClass = method.getDeclaringClass().toClassName().replace('.', '/');
- if (declaringClass.equals(intrinsic.declaringClass)) {
- return true;
- }
- }
- }
- return false;
- }
-
- private static ResolvedJavaMethod findMethod(Set methods, VMIntrinsicMethod intrinsic) {
- for (ResolvedJavaMethod method : methods) {
- if (match(method, intrinsic)) {
- return method;
- }
- }
- return null;
- }
-
@Test
@SuppressWarnings("try")
- public void test() {
+ public void test() throws ClassNotFoundException {
HotSpotGraalCompiler compiler = (HotSpotGraalCompiler) JVMCI.getRuntime().getCompiler();
HotSpotGraalRuntimeProvider rt = (HotSpotGraalRuntimeProvider) Graal.getRequiredCapability(RuntimeProvider.class);
HotSpotProviders providers = rt.getHostBackend().getProviders();
Plugins graphBuilderPlugins = providers.getGraphBuilderPlugins();
InvocationPlugins invocationPlugins = graphBuilderPlugins.getInvocationPlugins();
- Set pluginMethods = invocationPlugins.getMethods();
+ Map> bindings = invocationPlugins.getBindings(true);
HotSpotVMConfigStore store = rt.getVMConfig().getStore();
List intrinsics = store.getIntrinsics();
for (VMIntrinsicMethod intrinsic : intrinsics) {
- ResolvedJavaMethod method = findMethod(pluginMethods, intrinsic);
- if (method != null) {
- InvocationPlugin plugin = invocationPlugins.lookupInvocation(method);
- if (plugin instanceof MethodSubstitutionPlugin && !method.isNative()) {
- StructuredGraph graph = compiler.getIntrinsicGraph(method, providers, CompilationIdentifier.INVALID_COMPILATION_ID);
- getCode(method, graph);
+ InvocationPlugin plugin = CheckGraalIntrinsics.findPlugin(bindings, intrinsic);
+ if (plugin != null) {
+ if (plugin instanceof MethodSubstitutionPlugin) {
+ ResolvedJavaMethod method = CheckGraalIntrinsics.resolveIntrinsic(getMetaAccess(), intrinsic);
+ if (!method.isNative()) {
+ StructuredGraph graph = compiler.getIntrinsicGraph(method, providers, INVALID_COMPILATION_ID);
+ getCode(method, graph);
+ }
}
}
}
--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/CompileTheWorld.java 2017-04-28 11:48:55.000000000 +0200
+++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/CompileTheWorld.java 2017-04-28 11:48:55.000000000 +0200
@@ -102,7 +102,6 @@
import jdk.vm.ci.meta.MetaAccessProvider;
import jdk.vm.ci.runtime.JVMCI;
import jdk.vm.ci.runtime.JVMCICompiler;
-import jdk.vm.ci.services.Services;
/**
* This class implements compile-the-world functionality with JVMCI.
@@ -785,7 +784,6 @@
}
public static void main(String[] args) throws Throwable {
- Services.exportJVMCITo(CompileTheWorld.class);
HotSpotGraalCompiler compiler = (HotSpotGraalCompiler) HotSpotJVMCIRuntime.runtime().getCompiler();
compiler.compileTheWorld();
}
--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotGraalCompilerFactory.java 2017-04-28 11:48:56.000000000 +0200
+++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotGraalCompilerFactory.java 2017-04-28 11:48:56.000000000 +0200
@@ -22,21 +22,19 @@
*/
package org.graalvm.compiler.hotspot;
-import static org.graalvm.compiler.core.common.util.Util.Java8OrEarlier;
-import static org.graalvm.compiler.options.OptionValue.PROFILE_OPTIONVALUE_PROPERTY_NAME;
import static jdk.vm.ci.common.InitTimer.timer;
+import static org.graalvm.compiler.options.OptionValue.PROFILE_OPTIONVALUE_PROPERTY_NAME;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
-import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Properties;
import java.util.ServiceLoader;
-import org.graalvm.compiler.debug.GraalError;
import org.graalvm.compiler.debug.MethodFilter;
import org.graalvm.compiler.options.Option;
import org.graalvm.compiler.options.OptionDescriptors;
@@ -46,10 +44,11 @@
import org.graalvm.compiler.phases.tiers.CompilerConfiguration;
import jdk.vm.ci.common.InitTimer;
+import jdk.vm.ci.hotspot.HotSpotJVMCICompilerFactory;
import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime;
import jdk.vm.ci.hotspot.HotSpotSignature;
-import jdk.vm.ci.hotspot.HotSpotJVMCICompilerFactory;
import jdk.vm.ci.runtime.JVMCIRuntime;
+import jdk.vm.ci.services.Services;
public final class HotSpotGraalCompilerFactory extends HotSpotJVMCICompilerFactory {
@@ -135,8 +134,8 @@
if (allOptionsSettings == null) {
try (InitTimer t = timer("InitializeOptions")) {
ServiceLoader loader = ServiceLoader.load(OptionDescriptors.class, OptionDescriptors.class.getClassLoader());
- Properties savedProps = getSavedProperties(Java8OrEarlier);
- String optionsFile = savedProps.getProperty(GRAAL_OPTIONS_FILE_PROPERTY_NAME);
+ Map savedProps = Services.getSavedProperties();
+ String optionsFile = savedProps.get(GRAAL_OPTIONS_FILE_PROPERTY_NAME);
if (optionsFile != null) {
File graalOptions = new File(optionsFile);
@@ -165,15 +164,15 @@
}
Map optionSettings = new HashMap<>();
- for (Map.Entry