# HG changeset patch # User Doug Simon # Date 1429301724 -7200 # Node ID 0fe8b02e5cb6afb1ec5027b04a4abac15f180623 # Parent 76e3f83aa4accff7cf18fb5f3f977d3d9cf35c40 moved MethodsElidedInSnippets mechanism diff -r 76e3f83aa4ac -r 0fe8b02e5cb6 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultGenericInvocationPlugin.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultGenericInvocationPlugin.java Fri Apr 17 18:24:59 2015 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultGenericInvocationPlugin.java Fri Apr 17 22:15:24 2015 +0200 @@ -29,6 +29,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.api.replacements.*; +import com.oracle.graal.compiler.*; import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.Node.NodeIntrinsic; @@ -56,6 +57,21 @@ this.structuralInputType = metaAccess.lookupJavaType(StructuralInput.class); } + /** + * Calls in replacements to methods matching one of these filters are elided. Only void methods + * are considered for elision. The use of "snippets" in name of the variable and system property + * is purely for legacy reasons. + */ + private static final MethodFilter[] MethodsElidedInSnippets = getMethodsElidedInSnippets(); + + private static MethodFilter[] getMethodsElidedInSnippets() { + String commaSeparatedPatterns = System.getProperty("graal.MethodsElidedInSnippets"); + if (commaSeparatedPatterns != null) { + return MethodFilter.parse(commaSeparatedPatterns); + } + return null; + } + public boolean apply(GraphBuilderContext b, ResolvedJavaMethod method, ValueNode[] args) { if (b.parsingReplacement() && wordOperationPlugin.apply(b, method, args)) { return true; @@ -93,6 +109,13 @@ } return true; } + } else if (MethodsElidedInSnippets != null) { + if (MethodFilter.matches(MethodsElidedInSnippets, method)) { + if (method.getSignature().getReturnKind() != Kind.Void) { + throw new GraalInternalError("Cannot elide non-void method " + method.format("%H.%n(%p)")); + } + return true; + } } } return false; diff -r 76e3f83aa4ac -r 0fe8b02e5cb6 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 Fri Apr 17 18:24:59 2015 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java Fri Apr 17 22:15:24 2015 +0200 @@ -38,7 +38,6 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.api.replacements.*; -import com.oracle.graal.compiler.*; import com.oracle.graal.compiler.common.*; import com.oracle.graal.debug.*; import com.oracle.graal.debug.Debug.Scope; @@ -475,20 +474,6 @@ } /** - * Calls in snippets to methods matching one of these filters are elided. Only void methods are - * considered for elision. - */ - private static final MethodFilter[] MethodsElidedInSnippets = getMethodsElidedInSnippets(); - - private static MethodFilter[] getMethodsElidedInSnippets() { - String commaSeparatedPatterns = System.getProperty("graal.MethodsElidedInSnippets"); - if (commaSeparatedPatterns != null) { - return MethodFilter.parse(commaSeparatedPatterns); - } - return null; - } - - /** * Creates and preprocesses a graph for a replacement. */ public static class GraphMaker { @@ -620,17 +605,12 @@ try (Scope s = Debug.scope("buildInitialGraph", graph)) { MetaAccessProvider metaAccess = replacements.providers.getMetaAccess(); - if (MethodsElidedInSnippets != null && methodToParse.getSignature().getReturnKind() == Kind.Void && MethodFilter.matches(MethodsElidedInSnippets, methodToParse)) { - graph.addAfterFixed(graph.start(), graph.add(new ReturnNode(null))); - } else { - Plugins plugins = new Plugins(replacements.graphBuilderPlugins); - GraphBuilderConfiguration config = GraphBuilderConfiguration.getSnippetDefault(plugins); - if (args != null) { - plugins.setParameterPlugin(new ConstantBindingParameterPlugin(args, plugins.getParameterPlugin(), metaAccess, replacements.snippetReflection)); - } - createGraphBuilder(metaAccess, replacements.providers.getStampProvider(), replacements.providers.getConstantReflection(), config, OptimisticOptimizations.NONE).apply(graph); + Plugins plugins = new Plugins(replacements.graphBuilderPlugins); + GraphBuilderConfiguration config = GraphBuilderConfiguration.getSnippetDefault(plugins); + if (args != null) { + plugins.setParameterPlugin(new ConstantBindingParameterPlugin(args, plugins.getParameterPlugin(), metaAccess, replacements.snippetReflection)); } - afterParsing(graph); + createGraphBuilder(metaAccess, replacements.providers.getStampProvider(), replacements.providers.getConstantReflection(), config, OptimisticOptimizations.NONE).apply(graph); if (OptCanonicalizer.getValue()) { new CanonicalizerPhase().apply(graph, new PhaseContext(replacements.providers)); @@ -654,16 +634,6 @@ } return new GraphBuilderPhase.Instance(metaAccess, stampProvider, constantReflection, graphBuilderConfig, optimisticOpts, initialReplacementContext); } - - /** - * @param graph - */ - protected void afterParsing(StructuredGraph graph) { - } - - protected Object beforeInline(@SuppressWarnings("unused") MethodCallTargetNode callTarget, @SuppressWarnings("unused") StructuredGraph callee) { - return null; - } } private static String originalName(Method substituteMethod, String methodSubstitution) {