changeset 22762:8523434db559

Delay HotSpotBackendFactory registration.
author Roland Schatz <roland.schatz@oracle.com>
date Tue, 06 Oct 2015 16:23:50 +0200
parents f46cada70621
children 948369884428
files graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackendFactory.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotBackendFactory.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalCompilerFactory.java
diffstat 4 files changed, 26 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java	Tue Oct 06 15:52:06 2015 +0200
+++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackendFactory.java	Tue Oct 06 16:23:50 2015 +0200
@@ -33,7 +33,6 @@
 import jdk.internal.jvmci.code.Register;
 import jdk.internal.jvmci.code.RegisterConfig;
 import jdk.internal.jvmci.code.TargetDescription;
-import jdk.internal.jvmci.compiler.StartupEventListener;
 import jdk.internal.jvmci.hotspot.HotSpotCodeCacheProvider;
 import jdk.internal.jvmci.hotspot.HotSpotConstantReflectionProvider;
 import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider;
@@ -69,11 +68,11 @@
 import com.oracle.graal.phases.util.Providers;
 import com.oracle.graal.replacements.amd64.AMD64GraphBuilderPlugins;
 
-@ServiceProvider(StartupEventListener.class)
-public class AMD64HotSpotBackendFactory implements HotSpotBackendFactory, StartupEventListener {
+@ServiceProvider(HotSpotBackendFactory.class)
+public class AMD64HotSpotBackendFactory implements HotSpotBackendFactory {
 
     @Override
-    public void beforeJVMCIStartup() {
+    public void register() {
         DefaultHotSpotGraalCompilerFactory.registerBackend(AMD64.class, this);
     }
 
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackendFactory.java	Tue Oct 06 15:52:06 2015 +0200
+++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackendFactory.java	Tue Oct 06 16:23:50 2015 +0200
@@ -30,7 +30,6 @@
 import jdk.internal.jvmci.code.Register;
 import jdk.internal.jvmci.code.RegisterConfig;
 import jdk.internal.jvmci.code.TargetDescription;
-import jdk.internal.jvmci.compiler.StartupEventListener;
 import jdk.internal.jvmci.hotspot.HotSpotCodeCacheProvider;
 import jdk.internal.jvmci.hotspot.HotSpotConstantReflectionProvider;
 import jdk.internal.jvmci.hotspot.HotSpotJVMCIRuntimeProvider;
@@ -66,11 +65,11 @@
 import com.oracle.graal.phases.util.Providers;
 import com.oracle.graal.replacements.sparc.SPARCGraphBuilderPlugins;
 
-@ServiceProvider(StartupEventListener.class)
-public class SPARCHotSpotBackendFactory implements HotSpotBackendFactory, StartupEventListener {
+@ServiceProvider(HotSpotBackendFactory.class)
+public class SPARCHotSpotBackendFactory implements HotSpotBackendFactory {
 
     @Override
-    public void beforeJVMCIStartup() {
+    public void register() {
         DefaultHotSpotGraalCompilerFactory.registerBackend(SPARC.class, this);
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotBackendFactory.java	Tue Oct 06 15:52:06 2015 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotBackendFactory.java	Tue Oct 06 16:23:50 2015 +0200
@@ -28,5 +28,7 @@
 
 public interface HotSpotBackendFactory {
 
+    void register();
+
     HotSpotBackend createBackend(HotSpotGraalRuntimeProvider runtime, CompilerConfiguration compilerConfiguration, HotSpotJVMCIRuntimeProvider jvmciRuntime, HotSpotBackend host);
 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalCompilerFactory.java	Tue Oct 06 15:52:06 2015 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalCompilerFactory.java	Tue Oct 06 16:23:50 2015 +0200
@@ -32,6 +32,7 @@
 import jdk.internal.jvmci.options.OptionType;
 import jdk.internal.jvmci.options.OptionValue;
 import jdk.internal.jvmci.runtime.JVMCIRuntime;
+import jdk.internal.jvmci.service.Services;
 
 import com.oracle.graal.phases.tiers.CompilerConfiguration;
 
@@ -46,6 +47,22 @@
 
     }
 
+    @SuppressWarnings("try")
+    private static class Lazy {
+
+        static {
+            try (InitTimer t = timer("HotSpotBackendFactory.register")) {
+                for (HotSpotBackendFactory backend : Services.load(HotSpotBackendFactory.class)) {
+                    backend.register();
+                }
+            }
+        }
+
+        static void registerBackends() {
+            // force run of static initializer
+        }
+    }
+
     protected abstract HotSpotBackendFactory getBackendFactory(Architecture arch);
 
     protected abstract CompilerConfiguration createCompilerConfiguration();
@@ -55,6 +72,7 @@
     public Compiler createCompiler(JVMCIRuntime runtime) {
         HotSpotJVMCIRuntime jvmciRuntime = (HotSpotJVMCIRuntime) runtime;
         try (InitTimer t = timer("HotSpotGraalRuntime.<init>")) {
+            Lazy.registerBackends();
             HotSpotGraalRuntime graalRuntime = new HotSpotGraalRuntime(jvmciRuntime, this);
             HotSpotGraalVMEventListener.addRuntime(graalRuntime);
             return new HotSpotGraalCompiler(jvmciRuntime, graalRuntime);