# HG changeset patch # User Doug Simon # Date 1424117414 -3600 # Node ID 042f0a8ebce2b73402f9ec0910818196bfb38514 # Parent d4f37673849daa4c2b89dcd3133cdbd68a7c0b2f completed integration of AnnotatedInvocationPlugin diff -r d4f37673849d -r 042f0a8ebce2 graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderConfiguration.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderConfiguration.java Mon Feb 16 21:05:31 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderConfiguration.java Mon Feb 16 21:10:14 2015 +0100 @@ -26,6 +26,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.*; +import com.oracle.graal.java.GraphBuilderPlugin.AnnotatedInvocationPlugin; import com.oracle.graal.java.GraphBuilderPlugin.InlineInvokePlugin; import com.oracle.graal.java.GraphBuilderPlugin.LoadFieldPlugin; import com.oracle.graal.java.GraphBuilderPlugin.LoopExplosionPlugin; @@ -44,6 +45,7 @@ private LoadFieldPlugin loadFieldPlugin; private ParameterPlugin parameterPlugin; private InlineInvokePlugin inlineInvokePlugin; + private AnnotatedInvocationPlugin annotatedInvocationPlugin; private LoopExplosionPlugin loopExplosionPlugin; public static enum DebugInfoMode { @@ -105,12 +107,20 @@ return invocationPlugins; } + public AnnotatedInvocationPlugin getAnnotatedInvocationPlugin() { + return annotatedInvocationPlugin; + } + + public void setAnnotatedInvocationPlugin(AnnotatedInvocationPlugin plugin) { + this.annotatedInvocationPlugin = plugin; + } + public LoadFieldPlugin getLoadFieldPlugin() { return loadFieldPlugin; } - public void setLoadFieldPlugin(LoadFieldPlugin loadFieldPlugin) { - this.loadFieldPlugin = loadFieldPlugin; + public void setLoadFieldPlugin(LoadFieldPlugin plugin) { + this.loadFieldPlugin = plugin; } public ResolvedJavaType[] getSkippedExceptionTypes() { @@ -166,24 +176,24 @@ return parameterPlugin; } - public void setParameterPlugin(ParameterPlugin parameterPlugin) { - this.parameterPlugin = parameterPlugin; + public void setParameterPlugin(ParameterPlugin plugin) { + this.parameterPlugin = plugin; } public InlineInvokePlugin getInlineInvokePlugin() { return inlineInvokePlugin; } - public void setInlineInvokePlugin(InlineInvokePlugin inlineInvokePlugin) { - this.inlineInvokePlugin = inlineInvokePlugin; + public void setInlineInvokePlugin(InlineInvokePlugin plugin) { + this.inlineInvokePlugin = plugin; } public LoopExplosionPlugin getLoopExplosionPlugin() { return loopExplosionPlugin; } - public void setLoopExplosionPlugin(LoopExplosionPlugin loopExplosionPlugin) { - this.loopExplosionPlugin = loopExplosionPlugin; + public void setLoopExplosionPlugin(LoopExplosionPlugin plugin) { + this.loopExplosionPlugin = plugin; } public GraphBuilderConfiguration copyPluginsFrom(GraphBuilderConfiguration other) { @@ -192,6 +202,7 @@ this.loadFieldPlugin = other.loadFieldPlugin; this.inlineInvokePlugin = other.inlineInvokePlugin; this.loopExplosionPlugin = other.loopExplosionPlugin; + this.annotatedInvocationPlugin = other.annotatedInvocationPlugin; return this; } } diff -r d4f37673849d -r 042f0a8ebce2 graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Mon Feb 16 21:05:31 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Mon Feb 16 21:10:14 2015 +0100 @@ -47,6 +47,7 @@ import com.oracle.graal.java.BciBlockMapping.BciBlock; import com.oracle.graal.java.BciBlockMapping.ExceptionDispatchBlock; import com.oracle.graal.java.BciBlockMapping.LocalLiveness; +import com.oracle.graal.java.GraphBuilderPlugin.AnnotatedInvocationPlugin; import com.oracle.graal.java.GraphBuilderPlugin.InlineInvokePlugin; import com.oracle.graal.java.GraphBuilderPlugin.InvocationPlugin; import com.oracle.graal.java.GraphBuilderPlugin.LoopExplosionPlugin; @@ -860,11 +861,15 @@ } if (tryInvocationPlugin(args, targetMethod, resultType)) { - if (TraceInlineDuringParsing.getValue()) { - for (int i = 0; i < this.currentDepth; ++i) { - TTY.print(' '); - } - TTY.println("Used invocation plugin for " + targetMethod); + if (GraalOptions.TraceInlineDuringParsing.getValue()) { + TTY.println(format("%sUsed invocation plugin for %s", nSpaces(currentDepth), targetMethod)); + } + return; + } + + if (tryAnnotatedInvocationPlugin(args, targetMethod)) { + if (GraalOptions.TraceInlineDuringParsing.getValue()) { + TTY.println(format("%sUsed annotated invocation plugin for %s", nSpaces(currentDepth), targetMethod)); } return; } @@ -905,6 +910,11 @@ return false; } + private boolean tryAnnotatedInvocationPlugin(ValueNode[] args, ResolvedJavaMethod targetMethod) { + AnnotatedInvocationPlugin plugin = graphBuilderConfig.getAnnotatedInvocationPlugin(); + return plugin != null && plugin.apply(this, targetMethod, args); + } + private boolean containsNullCheckOf(NodeIterable nodes, Node value) { for (Node n : nodes) { if (n instanceof GuardingPiNode) {