# HG changeset patch # User Roland Schatz # Date 1366273859 -7200 # Node ID cd2600a2336efadcd9efed2be44f136da00be0e6 # Parent 84c21338d5aa08dd8c2acd8ff4ed9ef30a8b2728 Store snippet templates in Replacements object. diff -r 84c21338d5aa -r cd2600a2336e graal/com.oracle.graal.api.replacements/src/com/oracle/graal/api/replacements/SnippetTemplateCache.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.api.replacements/src/com/oracle/graal/api/replacements/SnippetTemplateCache.java Thu Apr 18 10:30:59 2013 +0200 @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2013, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.api.replacements; + +/** + * Marker interface for classes that cache snippet templates. + */ +public interface SnippetTemplateCache { +} diff -r 84c21338d5aa -r cd2600a2336e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java Thu Apr 18 10:23:23 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java Thu Apr 18 10:30:59 2013 +0200 @@ -155,7 +155,7 @@ public void run() { ServiceLoader serviceLoader = ServiceLoader.loadInstalled(ReplacementsProvider.class); for (ReplacementsProvider provider : serviceLoader) { - provider.registerReplacements(replacements); + provider.registerReplacements(runtime, replacements, runtime.getTarget()); } runtime.registerReplacements(replacements); if (GraalOptions.BootstrapReplacements) { diff -r 84c21338d5aa -r cd2600a2336e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteSubstitutions.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteSubstitutions.java Thu Apr 18 10:23:23 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteSubstitutions.java Thu Apr 18 10:30:59 2013 +0200 @@ -24,6 +24,8 @@ import java.lang.invoke.*; +import com.oracle.graal.api.code.*; +import com.oracle.graal.api.meta.*; import com.oracle.graal.api.replacements.*; import com.oracle.graal.api.runtime.*; import com.oracle.graal.nodes.spi.*; @@ -33,7 +35,7 @@ public class CallSiteSubstitutions implements ReplacementsProvider { @Override - public void registerReplacements(Replacements replacements) { + public void registerReplacements(MetaAccessProvider runtime, Replacements replacements, TargetDescription target) { if (GraalOptions.IntrinsifyCallSiteTarget) { replacements.registerSubstitutions(ConstantCallSiteSubstitutions.class); replacements.registerSubstitutions(MutableCallSiteSubstitutions.class); diff -r 84c21338d5aa -r cd2600a2336e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotInstalledCodeIntrinsics.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotInstalledCodeIntrinsics.java Thu Apr 18 10:23:23 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotInstalledCodeIntrinsics.java Thu Apr 18 10:30:59 2013 +0200 @@ -22,6 +22,8 @@ */ package com.oracle.graal.hotspot.replacements; +import com.oracle.graal.api.code.*; +import com.oracle.graal.api.meta.*; import com.oracle.graal.api.runtime.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.phases.*; @@ -30,7 +32,7 @@ public class HotSpotInstalledCodeIntrinsics implements ReplacementsProvider { @Override - public void registerReplacements(Replacements replacements) { + public void registerReplacements(MetaAccessProvider runtime, Replacements replacements, TargetDescription target) { if (GraalOptions.IntrinsifyInstalledCodeMethods) { replacements.registerSubstitutions(HotSpotInstalledCodeSubstitutions.class); } diff -r 84c21338d5aa -r cd2600a2336e graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/Replacements.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/Replacements.java Thu Apr 18 10:23:23 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/Replacements.java Thu Apr 18 10:30:59 2013 +0200 @@ -78,4 +78,15 @@ * Determines whether the replacement of this method is flagged as being inlined always. */ boolean isForcedSubstitution(ResolvedJavaMethod methodAt); + + /** + * Register snippet templates. + */ + void registerSnippetTemplateCache(SnippetTemplateCache snippetTemplates); + + /** + * Get snippet templates that were registered with + * {@link Replacements#registerSnippetTemplateCache(SnippetTemplateCache)}. + */ + T getSnippetTemplateCache(Class templatesClass); } diff -r 84c21338d5aa -r cd2600a2336e graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/ReplacementsProvider.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/ReplacementsProvider.java Thu Apr 18 10:23:23 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/ReplacementsProvider.java Thu Apr 18 10:30:59 2013 +0200 @@ -22,10 +22,13 @@ */ package com.oracle.graal.nodes.spi; +import com.oracle.graal.api.code.*; +import com.oracle.graal.api.meta.*; + /** * Interface for service providers that register replacements with the compiler. */ public interface ReplacementsProvider { - void registerReplacements(Replacements replacements); + void registerReplacements(MetaAccessProvider runtime, Replacements replacements, TargetDescription target); } diff -r 84c21338d5aa -r cd2600a2336e graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalMethodSubstitutions.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalMethodSubstitutions.java Thu Apr 18 10:23:23 2013 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraalMethodSubstitutions.java Thu Apr 18 10:30:59 2013 +0200 @@ -22,6 +22,8 @@ */ package com.oracle.graal.replacements; +import com.oracle.graal.api.code.*; +import com.oracle.graal.api.meta.*; import com.oracle.graal.api.runtime.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.phases.*; @@ -32,7 +34,7 @@ @ServiceProvider(ReplacementsProvider.class) public class GraalMethodSubstitutions implements ReplacementsProvider { - public void registerReplacements(Replacements replacements) { + public void registerReplacements(MetaAccessProvider runtime, Replacements replacements, TargetDescription target) { for (Class clazz : BoxingSubstitutions.getClasses()) { replacements.registerSubstitutions(clazz); } diff -r 84c21338d5aa -r cd2600a2336e graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java Thu Apr 18 10:23:23 2013 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java Thu Apr 18 10:30:59 2013 +0200 @@ -62,6 +62,7 @@ private final Map registeredMethodSubstitutions; private final Map> registerMacroSubstitutions; private final Set forcedSubstitutions; + private final Map, SnippetTemplateCache> snippetTemplateCache; public ReplacementsImpl(MetaAccessProvider runtime, Assumptions assumptions, TargetDescription target) { this.runtime = runtime; @@ -71,6 +72,7 @@ this.registeredMethodSubstitutions = new HashMap<>(); this.registerMacroSubstitutions = new HashMap<>(); this.forcedSubstitutions = new HashSet<>(); + this.snippetTemplateCache = new HashMap<>(); } public StructuredGraph getSnippet(ResolvedJavaMethod method) { @@ -479,4 +481,16 @@ public boolean isForcedSubstitution(ResolvedJavaMethod method) { return forcedSubstitutions.contains(method); } + + @Override + public void registerSnippetTemplateCache(SnippetTemplateCache templates) { + assert snippetTemplateCache.get(templates.getClass()) == null; + snippetTemplateCache.put(templates.getClass(), templates); + } + + @Override + public T getSnippetTemplateCache(Class templatesClass) { + SnippetTemplateCache ret = snippetTemplateCache.get(templatesClass); + return templatesClass.cast(ret); + } } diff -r 84c21338d5aa -r cd2600a2336e graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Thu Apr 18 10:23:23 2013 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Thu Apr 18 10:30:59 2013 +0200 @@ -28,6 +28,7 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.api.replacements.*; import com.oracle.graal.debug.*; import com.oracle.graal.graph.*; import com.oracle.graal.loop.*; @@ -268,7 +269,7 @@ /** * Base class for snippet classes. It provides a cache for {@link SnippetTemplate}s. */ - public abstract static class AbstractTemplates { + public abstract static class AbstractTemplates implements SnippetTemplateCache { protected final MetaAccessProvider runtime; protected final Replacements replacements;