Mercurial > hg > truffle
changeset 11716:bffe5758c209
Snippets processing in ArrayCopyNode and ObjectCloneNode need proper scoping
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Tue, 17 Sep 2013 17:01:39 +0200 |
parents | 100e196f8728 |
children | 8a3b59397044 |
files | graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopyNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneNode.java |
diffstat | 2 files changed, 43 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopyNode.java Tue Sep 17 16:43:26 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopyNode.java Tue Sep 17 17:01:39 2013 +0200 @@ -24,6 +24,8 @@ import static com.oracle.graal.compiler.GraalCompiler.*; +import java.util.concurrent.*; + import com.oracle.graal.api.meta.*; import com.oracle.graal.debug.*; import com.oracle.graal.loop.phases.*; @@ -62,7 +64,7 @@ return arguments.get(4); } - private StructuredGraph selectSnippet(LoweringTool tool, Replacements replacements) { + private StructuredGraph selectSnippet(LoweringTool tool, final Replacements replacements) { ResolvedJavaType srcType = ObjectStamp.typeOrNull(getSource().stamp()); ResolvedJavaType destType = ObjectStamp.typeOrNull(getDestination().stamp()); @@ -73,8 +75,15 @@ return null; } Kind componentKind = srcType.getComponentType().getKind(); - ResolvedJavaMethod snippetMethod = tool.getRuntime().lookupJavaMethod(ArrayCopySnippets.getSnippetForKind(componentKind)); - return replacements.getSnippet(snippetMethod); + final ResolvedJavaMethod snippetMethod = tool.getRuntime().lookupJavaMethod(ArrayCopySnippets.getSnippetForKind(componentKind)); + return Debug.scope("ArrayCopySnippet", snippetMethod, new Callable<StructuredGraph>() { + + @Override + public StructuredGraph call() throws Exception { + return replacements.getSnippet(snippetMethod); + } + }); + } private static void unrollFixedLengthLoop(StructuredGraph snippetGraph, int length, LoweringTool tool) { @@ -91,23 +100,37 @@ } @Override - protected StructuredGraph getSnippetGraph(LoweringTool tool) { + protected StructuredGraph getSnippetGraph(final LoweringTool tool) { if (!shouldIntrinsify(getTargetMethod())) { return null; } - Replacements replacements = tool.getReplacements(); + final Replacements replacements = tool.getReplacements(); StructuredGraph snippetGraph = selectSnippet(tool, replacements); if (snippetGraph == null) { - ResolvedJavaMethod snippetMethod = tool.getRuntime().lookupJavaMethod(ArrayCopySnippets.genericArraycopySnippet); - snippetGraph = replacements.getSnippet(snippetMethod).copy(); + final ResolvedJavaMethod snippetMethod = tool.getRuntime().lookupJavaMethod(ArrayCopySnippets.genericArraycopySnippet); + snippetGraph = Debug.scope("ArrayCopySnippet", snippetMethod, new Callable<StructuredGraph>() { + + @Override + public StructuredGraph call() throws Exception { + return replacements.getSnippet(snippetMethod).copy(); + } + }); replaceSnippetInvokes(snippetGraph); } else { assert snippetGraph != null : "ArrayCopySnippets should be installed"; if (getLength().isConstant() && getLength().asConstant().asInt() <= GraalOptions.MaximumEscapeAnalysisArrayLength.getValue()) { - snippetGraph = snippetGraph.copy(); - unrollFixedLengthLoop(snippetGraph, getLength().asConstant().asInt(), tool); + final StructuredGraph copy = snippetGraph.copy(); + snippetGraph = copy; + Debug.scope("ArrayCopySnippetSpecialization", snippetGraph.method(), new Runnable() { + + @Override + public void run() { + unrollFixedLengthLoop(copy, getLength().asConstant().asInt(), tool); + } + }); + } } return snippetGraph;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneNode.java Tue Sep 17 16:43:26 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneNode.java Tue Sep 17 17:01:39 2013 +0200 @@ -25,9 +25,11 @@ import static com.oracle.graal.compiler.GraalCompiler.*; import java.lang.reflect.*; +import java.util.concurrent.*; import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.debug.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.spi.*; @@ -69,9 +71,15 @@ } else { method = ObjectCloneSnippets.instanceCloneMethod; } - ResolvedJavaMethod snippetMethod = tool.getRuntime().lookupJavaMethod(method); - Replacements replacements = tool.getReplacements(); - StructuredGraph snippetGraph = replacements.getSnippet(snippetMethod); + final ResolvedJavaMethod snippetMethod = tool.getRuntime().lookupJavaMethod(method); + final Replacements replacements = tool.getReplacements(); + StructuredGraph snippetGraph = Debug.scope("ArrayCopySnippet", snippetMethod, new Callable<StructuredGraph>() { + + @Override + public StructuredGraph call() throws Exception { + return replacements.getSnippet(snippetMethod); + } + }); assert snippetGraph != null : "ObjectCloneSnippets should be installed"; return snippetGraph;