# HG changeset patch # User Doug Simon # Date 1407766242 -7200 # Node ID 5992012d3bca5ce8b2dfcb325ac23f4d782993a5 # Parent b60c111b43f93f9b90e200dd299be301c66dcc50 support for eliding methods in snippets (e.g., to handle instrumentation agents) diff -r b60c111b43f9 -r 5992012d3bca 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 Mon Aug 11 15:42:32 2014 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java Mon Aug 11 16:10:42 2014 +0200 @@ -36,6 +36,7 @@ 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; @@ -428,6 +429,20 @@ } /** + * 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. */ protected class GraphMaker { @@ -554,7 +569,12 @@ final StructuredGraph graph = new StructuredGraph(methodToParse); try (Scope s = Debug.scope("buildInitialGraph", graph)) { MetaAccessProvider metaAccess = providers.getMetaAccess(); - createGraphBuilder(metaAccess, GraphBuilderConfiguration.getSnippetDefault(), OptimisticOptimizations.NONE).apply(graph); + + if (MethodsElidedInSnippets != null && methodToParse.getSignature().getReturnKind() == Kind.Void && MethodFilter.matches(MethodsElidedInSnippets, methodToParse)) { + graph.addAfterFixed(graph.start(), graph.add(new ReturnNode(null))); + } else { + createGraphBuilder(metaAccess, GraphBuilderConfiguration.getSnippetDefault(), OptimisticOptimizations.NONE).apply(graph); + } new WordTypeVerificationPhase(metaAccess, snippetReflection, target.wordKind).apply(graph); new WordTypeRewriterPhase(metaAccess, snippetReflection, target.wordKind).apply(graph);