changeset 12578:7315fb9b0679

separated registration of (host) intrinsics from initialization of lowerers
author Doug Simon <doug.simon@oracle.com>
date Fri, 25 Oct 2013 00:21:34 +0200
parents 32d08d88c881
children 1d369998229a
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java
diffstat 1 files changed, 20 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java	Fri Oct 25 00:12:54 2013 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java	Fri Oct 25 00:21:34 2013 +0200
@@ -192,38 +192,33 @@
                 @Override
                 public void run() {
 
-                    List<LoweringProvider> initializedLowerers = new ArrayList<>();
-
-                    for (Map.Entry<?, HotSpotBackend> e : runtime.getBackends().entrySet()) {
-                        HotSpotBackend backend = e.getValue();
-                        HotSpotProviders providers = backend.getProviders();
-
-                        HotSpotLoweringProvider lowerer = (HotSpotLoweringProvider) providers.getLowerer();
-                        if (!initializedLowerers.contains(lowerer)) {
-                            initializedLowerers.add(lowerer);
-                            initializeLowerer(providers, lowerer);
-                        }
+                    HotSpotMetaAccessProvider hostMetaAccess = hostProviders.getMetaAccess();
+                    Replacements hostReplacements = hostProviders.getReplacements();
+                    LoweringProvider hostLowerer = hostProviders.getLowerer();
+                    ServiceLoader<ReplacementsProvider> sl = ServiceLoader.loadInstalled(ReplacementsProvider.class);
+                    TargetDescription hostTarget = hostProviders.getCodeCache().getTarget();
+                    for (ReplacementsProvider replacementsProvider : sl) {
+                        replacementsProvider.registerReplacements(hostMetaAccess, hostLowerer, hostReplacements, hostTarget);
                     }
-                }
-
-                private void initializeLowerer(HotSpotProviders providers, HotSpotLoweringProvider lowerer) {
-                    final Replacements replacements = providers.getReplacements();
-                    ServiceLoader<ReplacementsProvider> sl = ServiceLoader.loadInstalled(ReplacementsProvider.class);
-                    TargetDescription target = providers.getCodeCache().getTarget();
-                    for (ReplacementsProvider replacementsProvider : sl) {
-                        replacementsProvider.registerReplacements(providers.getMetaAccess(), lowerer, replacements, target);
-                    }
-                    lowerer.initialize(providers, config);
                     if (BootstrapReplacements.getValue()) {
-                        for (ResolvedJavaMethod method : replacements.getAllReplacements()) {
-                            replacements.getMacroSubstitution(method);
-                            replacements.getMethodSubstitution(method);
-                            replacements.getSnippet(method);
+                        for (ResolvedJavaMethod method : hostReplacements.getAllReplacements()) {
+                            hostReplacements.getMacroSubstitution(method);
+                            hostReplacements.getMethodSubstitution(method);
                         }
                     }
                 }
             });
+        }
+        List<LoweringProvider> initializedLowerers = new ArrayList<>();
+        for (Map.Entry<?, HotSpotBackend> e : runtime.getBackends().entrySet()) {
+            HotSpotBackend backend = e.getValue();
+            HotSpotProviders providers = backend.getProviders();
 
+            HotSpotLoweringProvider lowerer = (HotSpotLoweringProvider) providers.getLowerer();
+            if (!initializedLowerers.contains(lowerer)) {
+                initializedLowerers.add(lowerer);
+                lowerer.initialize(providers, config);
+            }
         }
 
         // Create compilation queue.