# HG changeset patch # User Andreas Woess # Date 1371223680 -7200 # Node ID 5b21ddb3deaa2d73b3208ea7057f13595474ca67 # Parent 215a4291e387f92d57ce766e3fe2847d9ec1caba readd optional graph to HotSpotNmethod diff -r 215a4291e387 -r 5b21ddb3deaa graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotCryptoSubstitutionTest.java --- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotCryptoSubstitutionTest.java Fri Jun 14 16:30:02 2013 +0200 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotCryptoSubstitutionTest.java Fri Jun 14 17:28:00 2013 +0200 @@ -48,7 +48,7 @@ @Override protected InstalledCode addMethod(ResolvedJavaMethod method, CompilationResult compResult) { HotSpotResolvedJavaMethod hsMethod = (HotSpotResolvedJavaMethod) method; - HotSpotNmethod installedCode = new HotSpotNmethod(hsMethod, true); + HotSpotNmethod installedCode = new HotSpotNmethod(hsMethod, true, null); HotSpotCompiledNmethod compiledNmethod = new HotSpotCompiledNmethod(hsMethod, StructuredGraph.INVOCATION_ENTRY_BCI, compResult); CodeInstallResult result = graalRuntime().getCompilerToVM().installCode(compiledNmethod, installedCode, null); Assert.assertEquals("Error installing method " + method + ": " + result, result, CodeInstallResult.OK); diff -r 215a4291e387 -r 5b21ddb3deaa graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotNmethod.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotNmethod.java Fri Jun 14 16:30:02 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotNmethod.java Fri Jun 14 17:28:00 2013 +0200 @@ -28,6 +28,7 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.graph.*; /** * Implementation of {@link InstalledCode} for code installed as an nmethod. The nmethod stores a @@ -44,16 +45,22 @@ private final HotSpotResolvedJavaMethod method; private final boolean isDefault; + private final Graph graph; - public HotSpotNmethod(HotSpotResolvedJavaMethod method, boolean isDefault) { + public HotSpotNmethod(HotSpotResolvedJavaMethod method, boolean isDefault, Graph graph) { this.method = method; this.isDefault = isDefault; + this.graph = graph; } public boolean isDefault() { return isDefault; } + public Graph getGraph() { + return graph; + } + @Override public ResolvedJavaMethod getMethod() { return method; diff -r 215a4291e387 -r 5b21ddb3deaa graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Fri Jun 14 16:30:02 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Fri Jun 14 17:28:00 2013 +0200 @@ -927,15 +927,20 @@ } public HotSpotInstalledCode installMethod(HotSpotResolvedJavaMethod method, int entryBCI, CompilationResult compResult) { - HotSpotInstalledCode installedCode = new HotSpotNmethod(method, true); + HotSpotInstalledCode installedCode = new HotSpotNmethod(method, true, null); graalRuntime.getCompilerToVM().installCode(new HotSpotCompiledNmethod(method, entryBCI, compResult), installedCode, method.getSpeculationLog()); return installedCode; } @Override public InstalledCode addMethod(ResolvedJavaMethod method, CompilationResult compResult) { + return addMethod(method, compResult, null); + } + + @Override + public InstalledCode addMethod(ResolvedJavaMethod method, CompilationResult compResult, Graph graph) { HotSpotResolvedJavaMethod hotspotMethod = (HotSpotResolvedJavaMethod) method; - HotSpotInstalledCode code = new HotSpotNmethod(hotspotMethod, false); + HotSpotInstalledCode code = new HotSpotNmethod(hotspotMethod, false, graph); CodeInstallResult result = graalRuntime.getCompilerToVM().installCode(new HotSpotCompiledNmethod(hotspotMethod, -1, compResult), code, null); if (result != CodeInstallResult.OK) { return null; diff -r 215a4291e387 -r 5b21ddb3deaa graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotNmethodExecuteNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotNmethodExecuteNode.java Fri Jun 14 16:30:02 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotNmethodExecuteNode.java Fri Jun 14 17:28:00 2013 +0200 @@ -33,6 +33,7 @@ import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; +import com.oracle.graal.phases.common.*; public class HotSpotNmethodExecuteNode extends AbstractCallNode implements Lowerable { @@ -52,7 +53,16 @@ @Override public void lower(LoweringTool tool, LoweringType loweringType) { - replaceWithInvoke(tool.getRuntime()); + if (code.isConstant() && code.asConstant().asObject() instanceof HotSpotNmethod) { + HotSpotNmethod nmethod = (HotSpotNmethod) code.asConstant().asObject(); + InvokeNode invoke = replaceWithInvoke(tool.getRuntime()); + StructuredGraph graph = (StructuredGraph) nmethod.getGraph(); + if (graph != null) { + InliningUtil.inline(invoke, graph, false); + } + } else { + replaceWithInvoke(tool.getRuntime()); + } } protected InvokeNode replaceWithInvoke(MetaAccessProvider tool) { diff -r 215a4291e387 -r 5b21ddb3deaa graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/GraalCodeCacheProvider.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/GraalCodeCacheProvider.java Fri Jun 14 16:30:02 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/GraalCodeCacheProvider.java Fri Jun 14 17:28:00 2013 +0200 @@ -37,10 +37,11 @@ * * @param method a method to which the executable code is begin added * @param compResult the compilation result to be added + * @param graph the graph that represents the method * @return a reference to the compiled and ready-to-run code or null if the code installation * failed */ - InstalledCode addMethod(ResolvedJavaMethod method, CompilationResult compResult); + InstalledCode addMethod(ResolvedJavaMethod method, CompilationResult compResult, Graph graph); void lower(Node n, LoweringTool tool); }