# HG changeset patch # User Doug Simon # Date 1368461983 -7200 # Node ID fe9a18fbb15ed838d33edb341f049d9dddf60611 # Parent 1ef7b26e9177d1db669b392a23c58e3dcd79de92 added subclasses for HotSpotInstalledCode: HotSpotNmethod and HotSpotRuntimeStub diff -r 1ef7b26e9177 -r fe9a18fbb15e graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotInstalledCodeTest.java --- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotInstalledCodeTest.java Mon May 13 16:09:49 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2013, 2013, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package com.oracle.graal.hotspot.test; - -import org.junit.*; - -import com.oracle.graal.api.code.*; -import com.oracle.graal.api.meta.*; -import com.oracle.graal.compiler.test.*; -import com.oracle.graal.hotspot.meta.*; -import com.oracle.graal.nodes.*; - -public class HotSpotInstalledCodeTest extends GraalCompilerTest { - - private static final int ITERATION_COUNT = 100000; - - @Test - public void testInstallCodeInvalidation() { - final ResolvedJavaMethod testJavaMethod = runtime.lookupJavaMethod(getMethod("foo")); - final StructuredGraph graph = parse("otherFoo"); - final HotSpotInstalledCode installedCode = (HotSpotInstalledCode) getCode(testJavaMethod, graph); - Assert.assertTrue(installedCode.isValid()); - Object result; - try { - result = installedCode.execute("a", "b", "c"); - assertEquals(43, result); - } catch (InvalidInstalledCodeException e) { - Assert.fail("Code was invalidated"); - } - Assert.assertTrue(installedCode.isValid()); - installedCode.invalidate(); - Assert.assertFalse(installedCode.isValid()); - try { - result = installedCode.execute(null, null, null); - Assert.fail("Code was not invalidated"); - } catch (InvalidInstalledCodeException e) { - } - Assert.assertFalse(installedCode.isValid()); - } - - @Test - public void testInstalledCodeCalledFromCompiledCode() { - final ResolvedJavaMethod testJavaMethod = runtime.lookupJavaMethod(getMethod("foo")); - final StructuredGraph graph = parse("otherFoo"); - final HotSpotInstalledCode installedCode = (HotSpotInstalledCode) getCode(testJavaMethod, graph); - Assert.assertTrue(installedCode.isValid()); - try { - for (int i = 0; i < ITERATION_COUNT; ++i) { - installedCode.execute("a", "b", "c"); - } - } catch (InvalidInstalledCodeException e) { - Assert.fail("Code was invalidated"); - } - } - - @SuppressWarnings("unused") - public static Object foo(Object a1, Object a2, Object a3) { - return 42; - } - - @SuppressWarnings("unused") - public static Object otherFoo(Object a1, Object a2, Object a3) { - return 43; - } -} diff -r 1ef7b26e9177 -r fe9a18fbb15e graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotNmethodTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/HotSpotNmethodTest.java Mon May 13 18:19:43 2013 +0200 @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2013, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.hotspot.test; + +import org.junit.*; + +import com.oracle.graal.api.code.*; +import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.test.*; +import com.oracle.graal.hotspot.meta.*; +import com.oracle.graal.nodes.*; + +public class HotSpotNmethodTest extends GraalCompilerTest { + + private static final int ITERATION_COUNT = 100000; + + @Test + public void testInstallCodeInvalidation() { + final ResolvedJavaMethod testJavaMethod = runtime.lookupJavaMethod(getMethod("foo")); + final StructuredGraph graph = parse("otherFoo"); + final HotSpotNmethod nmethod = (HotSpotNmethod) getCode(testJavaMethod, graph); + Assert.assertTrue(nmethod.isValid()); + Object result; + try { + result = nmethod.execute("a", "b", "c"); + assertEquals(43, result); + } catch (InvalidInstalledCodeException e) { + Assert.fail("Code was invalidated"); + } + Assert.assertTrue(nmethod.isValid()); + nmethod.invalidate(); + Assert.assertFalse(nmethod.isValid()); + try { + result = nmethod.execute(null, null, null); + Assert.fail("Code was not invalidated"); + } catch (InvalidInstalledCodeException e) { + } + Assert.assertFalse(nmethod.isValid()); + } + + @Test + public void testInstalledCodeCalledFromCompiledCode() { + final ResolvedJavaMethod testJavaMethod = runtime.lookupJavaMethod(getMethod("foo")); + final StructuredGraph graph = parse("otherFoo"); + final HotSpotNmethod nmethod = (HotSpotNmethod) getCode(testJavaMethod, graph); + Assert.assertTrue(nmethod.isValid()); + try { + for (int i = 0; i < ITERATION_COUNT; ++i) { + nmethod.execute("a", "b", "c"); + } + } catch (InvalidInstalledCodeException e) { + Assert.fail("Code was invalidated"); + } + } + + @SuppressWarnings("unused") + public static Object foo(Object a1, Object a2, Object a3) { + return 42; + } + + @SuppressWarnings("unused") + public static Object otherFoo(Object a1, Object a2, Object a3) { + return 43; + } +} diff -r 1ef7b26e9177 -r fe9a18fbb15e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotInstalledCode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotInstalledCode.java Mon May 13 16:09:49 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotInstalledCode.java Mon May 13 18:19:43 2013 +0200 @@ -24,123 +24,30 @@ import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; -import java.lang.reflect.*; - import com.oracle.graal.api.code.*; -import com.oracle.graal.api.meta.*; -import com.oracle.graal.graph.*; import com.oracle.graal.hotspot.*; -import com.oracle.graal.hotspot.stubs.*; /** - * Implementation of {@link InstalledCode} for HotSpot. If the code is installed as an nmethod (as - * opposed to some other subclass of CodeBlob such as RuntimeStub), then the nmethod stores a weak - * reference to an instance of this class. This is necessary to keep the nmethod from being unloaded - * while the associated {@link HotSpotInstalledCode} instance is alive. - *

- * Note that there is no (current) way for the reference from an nmethod to a - * {@link HotSpotInstalledCode} instance to be anything but weak. This is due to the fact that - * HotSpot does not treat nmethods as strong GC roots. + * Implementation of {@link InstalledCode} for HotSpot. */ -public class HotSpotInstalledCode extends CompilerObject implements InstalledCode { +public abstract class HotSpotInstalledCode extends CompilerObject implements InstalledCode { private static final long serialVersionUID = 156632908220561612L; - private final HotSpotResolvedJavaMethod method; - private final Stub stub; - private final boolean isDefault; - private final Graph graph; long codeBlob; long start; - public HotSpotInstalledCode(HotSpotResolvedJavaMethod method, Graph graph, boolean isDefault) { - this.method = method; - this.stub = null; - this.graph = graph; - this.isDefault = isDefault; - } - - public HotSpotInstalledCode(Stub stub) { - this.method = null; - this.stub = stub; - this.graph = null; - this.isDefault = false; - } - - public boolean isDefault() { - return isDefault; - } - public long getCodeBlob() { return codeBlob; } - public Graph getGraph() { - return graph; - } - @Override - public ResolvedJavaMethod getMethod() { - return method; - } - - @Override - public boolean isValid() { - return stub != null || graalRuntime().getCompilerToVM().isInstalledCodeValid(codeBlob); - } + public abstract String toString(); - @Override - public void invalidate() { - if (stub == null) { - graalRuntime().getCompilerToVM().invalidateInstalledCode(codeBlob); - } - } - - @Override - public String toString() { - if (stub != null) { - return String.format("InstalledCode[stub=%s, codeBlob=0x%x]", stub, codeBlob); - } - return String.format("InstalledCode[method=%s, codeBlob=0x%x, isDefault=%b]", method, codeBlob, isDefault); + public long getStart() { + return start; } - @Override - public Object execute(Object arg1, Object arg2, Object arg3) throws InvalidInstalledCodeException { - assert stub == null; - assert method.getSignature().getParameterCount(!Modifier.isStatic(method.getModifiers())) == 3; - assert method.getSignature().getParameterKind(0) == Kind.Object; - assert method.getSignature().getParameterKind(1) == Kind.Object; - assert !Modifier.isStatic(method.getModifiers()) || method.getSignature().getParameterKind(2) == Kind.Object; - return graalRuntime().getCompilerToVM().executeCompiledMethod(arg1, arg2, arg3, codeBlob); - } - - private boolean checkArgs(Object... args) { - JavaType[] sig = MetaUtil.signatureToTypes(method); - assert args.length == sig.length : MetaUtil.format("%H.%n(%p): expected ", method) + sig.length + " args, got " + args.length; - for (int i = 0; i < sig.length; i++) { - Object arg = args[i]; - if (arg == null) { - assert sig[i].getKind() == Kind.Object : MetaUtil.format("%H.%n(%p): expected arg ", method) + i + " to be Object, not " + sig[i]; - } else if (sig[i].getKind() != Kind.Object) { - assert sig[i].getKind().toBoxedJavaClass() == arg.getClass() : MetaUtil.format("%H.%n(%p): expected arg ", method) + i + " to be " + sig[i] + ", not " + arg.getClass(); - } - } - return true; - } - - @Override - public Object executeVarargs(Object... args) throws InvalidInstalledCodeException { - assert stub == null; - assert checkArgs(args); - return graalRuntime().getCompilerToVM().executeCompiledMethodVarargs(args, codeBlob); - } - - @Override - public long getStart() { - return isValid() ? start : 0; - } - - @Override public byte[] getCode() { return graalRuntime().getCompilerToVM().getCode(codeBlob); } diff -r 1ef7b26e9177 -r fe9a18fbb15e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotNmethod.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotNmethod.java Mon May 13 18:19:43 2013 +0200 @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.hotspot.meta; + +import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; + +import java.lang.reflect.*; + +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 + * weak reference to an instance of this class. This is necessary to keep the nmethod from being + * unloaded while the associated {@link HotSpotNmethod} instance is alive. + *

+ * Note that there is no (current) way for the reference from an nmethod to a {@link HotSpotNmethod} + * instance to be anything but weak. This is due to the fact that HotSpot does not treat nmethods as + * strong GC roots. + */ +public class HotSpotNmethod extends HotSpotInstalledCode { + + private static final long serialVersionUID = -1784683588947054103L; + + private final HotSpotResolvedJavaMethod method; + private final boolean isDefault; + private final Graph graph; + + public HotSpotNmethod(HotSpotResolvedJavaMethod method, Graph graph, boolean isDefault) { + this.method = method; + this.graph = graph; + this.isDefault = isDefault; + } + + public boolean isDefault() { + return isDefault; + } + + public Graph getGraph() { + return graph; + } + + @Override + public ResolvedJavaMethod getMethod() { + return method; + } + + @Override + public boolean isValid() { + return graalRuntime().getCompilerToVM().isInstalledCodeValid(codeBlob); + } + + @Override + public void invalidate() { + graalRuntime().getCompilerToVM().invalidateInstalledCode(codeBlob); + } + + @Override + public String toString() { + return String.format("InstalledNmethod[method=%s, codeBlob=0x%x, isDefault=%b]", method, codeBlob, isDefault); + } + + @Override + public Object execute(Object arg1, Object arg2, Object arg3) throws InvalidInstalledCodeException { + assert method.getSignature().getParameterCount(!Modifier.isStatic(method.getModifiers())) == 3; + assert method.getSignature().getParameterKind(0) == Kind.Object; + assert method.getSignature().getParameterKind(1) == Kind.Object; + assert !Modifier.isStatic(method.getModifiers()) || method.getSignature().getParameterKind(2) == Kind.Object; + return graalRuntime().getCompilerToVM().executeCompiledMethod(arg1, arg2, arg3, codeBlob); + } + + private boolean checkArgs(Object... args) { + JavaType[] sig = MetaUtil.signatureToTypes(method); + assert args.length == sig.length : MetaUtil.format("%H.%n(%p): expected ", method) + sig.length + " args, got " + args.length; + for (int i = 0; i < sig.length; i++) { + Object arg = args[i]; + if (arg == null) { + assert sig[i].getKind() == Kind.Object : MetaUtil.format("%H.%n(%p): expected arg ", method) + i + " to be Object, not " + sig[i]; + } else if (sig[i].getKind() != Kind.Object) { + assert sig[i].getKind().toBoxedJavaClass() == arg.getClass() : MetaUtil.format("%H.%n(%p): expected arg ", method) + i + " to be " + sig[i] + ", not " + arg.getClass(); + } + } + return true; + } + + @Override + public Object executeVarargs(Object... args) throws InvalidInstalledCodeException { + assert checkArgs(args); + return graalRuntime().getCompilerToVM().executeCompiledMethodVarargs(args, codeBlob); + } + + @Override + public long getStart() { + return isValid() ? start : 0; + } +} diff -r 1ef7b26e9177 -r fe9a18fbb15e 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 Mon May 13 16:09:49 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Mon May 13 18:19:43 2013 +0200 @@ -1158,7 +1158,7 @@ } public HotSpotInstalledCode installMethod(HotSpotResolvedJavaMethod method, Graph graph, int entryBCI, CompilationResult compResult) { - HotSpotInstalledCode installedCode = new HotSpotInstalledCode(method, graph, true); + HotSpotInstalledCode installedCode = new HotSpotNmethod(method, graph, true); graalRuntime.getCompilerToVM().installCode(new HotSpotCompilationResult(method, entryBCI, compResult), installedCode, method.getSpeculationLog()); return installedCode; } @@ -1171,7 +1171,7 @@ @Override public InstalledCode addMethod(ResolvedJavaMethod method, CompilationResult compResult, Graph graph) { HotSpotResolvedJavaMethod hotspotMethod = (HotSpotResolvedJavaMethod) method; - HotSpotInstalledCode code = new HotSpotInstalledCode(hotspotMethod, graph, false); + HotSpotInstalledCode code = new HotSpotNmethod(hotspotMethod, graph, false); CodeInstallResult result = graalRuntime.getCompilerToVM().installCode(new HotSpotCompilationResult(hotspotMethod, -1, compResult), code, null); if (result != CodeInstallResult.OK) { return null; diff -r 1ef7b26e9177 -r fe9a18fbb15e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntimeStub.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntimeStub.java Mon May 13 18:19:43 2013 +0200 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.hotspot.meta; + +import com.oracle.graal.api.code.*; +import com.oracle.graal.api.meta.*; +import com.oracle.graal.graph.*; +import com.oracle.graal.hotspot.stubs.*; + +/** + * Implementation of {@link InstalledCode} for code installed as a RuntimeStub. + */ +public class HotSpotRuntimeStub extends HotSpotInstalledCode { + + private static final long serialVersionUID = -6388648408298441748L; + + private final Stub stub; + + public HotSpotRuntimeStub(Stub stub) { + this.stub = stub; + } + + public ResolvedJavaMethod getMethod() { + return null; + } + + public boolean isValid() { + return true; + } + + public void invalidate() { + } + + @Override + public String toString() { + return String.format("InstalledRuntimeStub[stub=%s, codeBlob=0x%x]", stub, codeBlob); + } + + public Object execute(Object arg1, Object arg2, Object arg3) throws InvalidInstalledCodeException { + throw new GraalInternalError("Cannot call stub %s", stub); + } + + public Object executeVarargs(Object... args) throws InvalidInstalledCodeException { + throw new GraalInternalError("Cannot call stub %s", stub); + } +} diff -r 1ef7b26e9177 -r fe9a18fbb15e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotInstalledCodeExecuteNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotInstalledCodeExecuteNode.java Mon May 13 16:09:49 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,117 +0,0 @@ -/* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package com.oracle.graal.hotspot.nodes; - -import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; - -import com.oracle.graal.api.code.*; -import com.oracle.graal.api.meta.*; -import com.oracle.graal.hotspot.meta.*; -import com.oracle.graal.hotspot.replacements.*; -import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.extended.LocationNode.LocationIdentity; -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 HotSpotInstalledCodeExecuteNode extends AbstractCallNode implements Lowerable { - - @Input private final ValueNode code; - private final Class[] signature; - - public HotSpotInstalledCodeExecuteNode(Kind kind, Class[] signature, ValueNode code, ValueNode arg1, ValueNode arg2, ValueNode arg3) { - super(StampFactory.forKind(kind), new ValueNode[]{arg1, arg2, arg3}); - this.code = code; - this.signature = signature; - } - - @Override - public LocationIdentity[] getLocationIdentities() { - return new LocationIdentity[]{LocationNode.ANY_LOCATION}; - } - - @Override - public void lower(LoweringTool tool, LoweringType loweringType) { - if (code.isConstant() && code.asConstant().asObject() instanceof HotSpotInstalledCode) { - HotSpotInstalledCode hsCode = (HotSpotInstalledCode) code.asConstant().asObject(); - InvokeNode invoke = replaceWithInvoke(tool.getRuntime()); - StructuredGraph graph = (StructuredGraph) hsCode.getGraph(); - if (graph != null) { - InliningUtil.inline(invoke, (StructuredGraph) hsCode.getGraph(), false); - } - } else { - replaceWithInvoke(tool.getRuntime()); - } - } - - protected InvokeNode replaceWithInvoke(MetaAccessProvider tool) { - ResolvedJavaMethod method = null; - ResolvedJavaField methodField = null; - ResolvedJavaField metaspaceMethodField = null; - ResolvedJavaField codeBlobField = null; - try { - method = tool.lookupJavaMethod(HotSpotInstalledCodeExecuteNode.class.getMethod("placeholder", Object.class, Object.class, Object.class)); - methodField = tool.lookupJavaField(HotSpotInstalledCode.class.getDeclaredField("method")); - codeBlobField = tool.lookupJavaField(HotSpotInstalledCode.class.getDeclaredField("codeBlob")); - metaspaceMethodField = tool.lookupJavaField(HotSpotResolvedJavaMethod.class.getDeclaredField("metaspaceMethod")); - } catch (NoSuchMethodException | SecurityException | NoSuchFieldException e) { - throw new IllegalStateException(e); - } - ResolvedJavaType[] signatureTypes = new ResolvedJavaType[signature.length]; - for (int i = 0; i < signature.length; i++) { - signatureTypes[i] = tool.lookupJavaType(signature[i]); - } - final int verifiedEntryPointOffset = HotSpotReplacementsUtil.verifiedEntryPointOffset(); - - LoadFieldNode loadCodeBlob = graph().add(new LoadFieldNode(code, codeBlobField)); - UnsafeLoadNode load = graph().add(new UnsafeLoadNode(loadCodeBlob, verifiedEntryPointOffset, ConstantNode.forLong(0, graph()), graalRuntime().getTarget().wordKind)); - - LoadFieldNode loadMethod = graph().add(new LoadFieldNode(code, methodField)); - LoadFieldNode loadmetaspaceMethod = graph().add(new LoadFieldNode(loadMethod, metaspaceMethodField)); - - HotSpotIndirectCallTargetNode callTarget = graph().add( - new HotSpotIndirectCallTargetNode(loadmetaspaceMethod, load, arguments, stamp(), signatureTypes, method, CallingConvention.Type.JavaCall)); - - InvokeNode invoke = graph().add(new InvokeNode(callTarget, 0)); - - invoke.setStateAfter(stateAfter()); - graph().replaceFixedWithFixed(this, invoke); - - graph().addBeforeFixed(invoke, loadmetaspaceMethod); - graph().addBeforeFixed(loadmetaspaceMethod, loadMethod); - graph().addBeforeFixed(invoke, load); - graph().addBeforeFixed(load, loadCodeBlob); - - return invoke; - } - - public static Object placeholder(@SuppressWarnings("unused") Object a1, @SuppressWarnings("unused") Object a2, @SuppressWarnings("unused") Object a3) { - return 1; - } - - @NodeIntrinsic - public static native T call(@ConstantNodeParameter Kind kind, @ConstantNodeParameter Class[] signature, Object code, Object arg1, Object arg2, Object arg3); - -} diff -r 1ef7b26e9177 -r fe9a18fbb15e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotNmethodExecuteNode.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotNmethodExecuteNode.java Mon May 13 18:19:43 2013 +0200 @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.hotspot.nodes; + +import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; + +import com.oracle.graal.api.code.*; +import com.oracle.graal.api.meta.*; +import com.oracle.graal.hotspot.meta.*; +import com.oracle.graal.hotspot.replacements.*; +import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.extended.*; +import com.oracle.graal.nodes.extended.LocationNode.LocationIdentity; +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 { + + @Input private final ValueNode code; + private final Class[] signature; + + public HotSpotNmethodExecuteNode(Kind kind, Class[] signature, ValueNode code, ValueNode arg1, ValueNode arg2, ValueNode arg3) { + super(StampFactory.forKind(kind), new ValueNode[]{arg1, arg2, arg3}); + this.code = code; + this.signature = signature; + } + + @Override + public LocationIdentity[] getLocationIdentities() { + return new LocationIdentity[]{LocationNode.ANY_LOCATION}; + } + + @Override + public void lower(LoweringTool tool, LoweringType loweringType) { + 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, (StructuredGraph) nmethod.getGraph(), false); + } + } else { + replaceWithInvoke(tool.getRuntime()); + } + } + + protected InvokeNode replaceWithInvoke(MetaAccessProvider tool) { + ResolvedJavaMethod method = null; + ResolvedJavaField methodField = null; + ResolvedJavaField metaspaceMethodField = null; + ResolvedJavaField codeBlobField = null; + try { + method = tool.lookupJavaMethod(HotSpotNmethodExecuteNode.class.getMethod("placeholder", Object.class, Object.class, Object.class)); + methodField = tool.lookupJavaField(HotSpotNmethod.class.getDeclaredField("method")); + codeBlobField = tool.lookupJavaField(HotSpotInstalledCode.class.getDeclaredField("codeBlob")); + metaspaceMethodField = tool.lookupJavaField(HotSpotResolvedJavaMethod.class.getDeclaredField("metaspaceMethod")); + } catch (NoSuchMethodException | SecurityException | NoSuchFieldException e) { + throw new IllegalStateException(e); + } + ResolvedJavaType[] signatureTypes = new ResolvedJavaType[signature.length]; + for (int i = 0; i < signature.length; i++) { + signatureTypes[i] = tool.lookupJavaType(signature[i]); + } + final int verifiedEntryPointOffset = HotSpotReplacementsUtil.verifiedEntryPointOffset(); + + LoadFieldNode loadCodeBlob = graph().add(new LoadFieldNode(code, codeBlobField)); + UnsafeLoadNode load = graph().add(new UnsafeLoadNode(loadCodeBlob, verifiedEntryPointOffset, ConstantNode.forLong(0, graph()), graalRuntime().getTarget().wordKind)); + + LoadFieldNode loadMethod = graph().add(new LoadFieldNode(code, methodField)); + LoadFieldNode loadmetaspaceMethod = graph().add(new LoadFieldNode(loadMethod, metaspaceMethodField)); + + HotSpotIndirectCallTargetNode callTarget = graph().add( + new HotSpotIndirectCallTargetNode(loadmetaspaceMethod, load, arguments, stamp(), signatureTypes, method, CallingConvention.Type.JavaCall)); + + InvokeNode invoke = graph().add(new InvokeNode(callTarget, 0)); + + invoke.setStateAfter(stateAfter()); + graph().replaceFixedWithFixed(this, invoke); + + graph().addBeforeFixed(invoke, loadmetaspaceMethod); + graph().addBeforeFixed(loadmetaspaceMethod, loadMethod); + graph().addBeforeFixed(invoke, load); + graph().addBeforeFixed(load, loadCodeBlob); + + return invoke; + } + + public static Object placeholder(@SuppressWarnings("unused") Object a1, @SuppressWarnings("unused") Object a2, @SuppressWarnings("unused") Object a3) { + return 1; + } + + @NodeIntrinsic + public static native T call(@ConstantNodeParameter Kind kind, @ConstantNodeParameter Class[] signature, Object code, Object arg1, Object arg2, Object arg3); + +} diff -r 1ef7b26e9177 -r fe9a18fbb15e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotInstalledCodeIntrinsics.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotInstalledCodeIntrinsics.java Mon May 13 16:09:49 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package com.oracle.graal.hotspot.replacements; - -import com.oracle.graal.api.code.*; -import com.oracle.graal.api.meta.*; -import com.oracle.graal.api.runtime.*; -import com.oracle.graal.nodes.spi.*; -import com.oracle.graal.phases.*; - -@ServiceProvider(ReplacementsProvider.class) -public class HotSpotInstalledCodeIntrinsics implements ReplacementsProvider { - - @Override - public void registerReplacements(MetaAccessProvider runtime, Replacements replacements, TargetDescription target) { - if (GraalOptions.IntrinsifyInstalledCodeMethods) { - replacements.registerSubstitutions(HotSpotInstalledCodeSubstitutions.class); - } - } -} diff -r 1ef7b26e9177 -r fe9a18fbb15e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotInstalledCodeSubstitutions.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotInstalledCodeSubstitutions.java Mon May 13 16:09:49 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package com.oracle.graal.hotspot.replacements; - -import com.oracle.graal.api.meta.*; -import com.oracle.graal.api.replacements.*; -import com.oracle.graal.hotspot.meta.*; -import com.oracle.graal.hotspot.nodes.*; -import com.oracle.graal.replacements.Snippet.Fold; - -@ClassSubstitution(HotSpotInstalledCode.class) -public class HotSpotInstalledCodeSubstitutions { - - @MethodSubstitution(isStatic = false) - public static Object execute(HotSpotInstalledCode code, final Object arg1, final Object arg2, final Object arg3) { - return HotSpotInstalledCodeExecuteNode.call(Kind.Object, getSignature(), code, arg1, arg2, arg3); - } - - @Fold - private static Class[] getSignature() { - return new Class[]{Object.class, Object.class, Object.class}; - } - -} diff -r 1ef7b26e9177 -r fe9a18fbb15e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotNmethodIntrinsics.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotNmethodIntrinsics.java Mon May 13 18:19:43 2013 +0200 @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.hotspot.replacements; + +import com.oracle.graal.api.code.*; +import com.oracle.graal.api.meta.*; +import com.oracle.graal.api.runtime.*; +import com.oracle.graal.nodes.spi.*; +import com.oracle.graal.phases.*; + +@ServiceProvider(ReplacementsProvider.class) +public class HotSpotNmethodIntrinsics implements ReplacementsProvider { + + @Override + public void registerReplacements(MetaAccessProvider runtime, Replacements replacements, TargetDescription target) { + if (GraalOptions.IntrinsifyInstalledCodeMethods) { + replacements.registerSubstitutions(HotSpotNmethodSubstitutions.class); + } + } +} diff -r 1ef7b26e9177 -r fe9a18fbb15e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotNmethodSubstitutions.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotNmethodSubstitutions.java Mon May 13 18:19:43 2013 +0200 @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.hotspot.replacements; + +import com.oracle.graal.api.meta.*; +import com.oracle.graal.api.replacements.*; +import com.oracle.graal.hotspot.meta.*; +import com.oracle.graal.hotspot.nodes.*; +import com.oracle.graal.replacements.Snippet.Fold; + +@ClassSubstitution(HotSpotNmethod.class) +public class HotSpotNmethodSubstitutions { + + @MethodSubstitution(isStatic = false) + public static Object execute(HotSpotInstalledCode code, final Object arg1, final Object arg2, final Object arg3) { + return HotSpotNmethodExecuteNode.call(Kind.Object, getSignature(), code, arg1, arg2, arg3); + } + + @Fold + private static Class[] getSignature() { + return new Class[]{Object.class, Object.class, Object.class}; + } + +} diff -r 1ef7b26e9177 -r fe9a18fbb15e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java Mon May 13 16:09:49 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java Mon May 13 18:19:43 2013 +0200 @@ -164,7 +164,7 @@ @Override public InstalledCode call() { Stub stub = Stub.this; - HotSpotInstalledCode installedCode = new HotSpotInstalledCode(stub); + HotSpotRuntimeStub installedCode = new HotSpotRuntimeStub(stub); HotSpotCompilationResult hsCompResult = new HotSpotCompilationResult(stub, compResult); CodeInstallResult result = graalRuntime().getCompilerToVM().installCode(hsCompResult, installedCode, null); if (result != CodeInstallResult.OK) { diff -r 1ef7b26e9177 -r fe9a18fbb15e make/build-graal.xml --- a/make/build-graal.xml Mon May 13 16:09:49 2013 +0200 +++ b/make/build-graal.xml Mon May 13 18:19:43 2013 +0200 @@ -77,7 +77,7 @@ - + diff -r 1ef7b26e9177 -r fe9a18fbb15e src/share/vm/classfile/systemDictionary.hpp --- a/src/share/vm/classfile/systemDictionary.hpp Mon May 13 16:09:49 2013 +0200 +++ b/src/share/vm/classfile/systemDictionary.hpp Mon May 13 18:19:43 2013 +0200 @@ -189,6 +189,7 @@ do_klass(HotSpotRuntimeCallTarget_klass, com_oracle_graal_hotspot_HotSpotRuntimeCallTarget, Opt) \ do_klass(HotSpotCodeInfo_klass, com_oracle_graal_hotspot_meta_HotSpotCodeInfo, Opt) \ do_klass(HotSpotInstalledCode_klass, com_oracle_graal_hotspot_meta_HotSpotInstalledCode, Opt) \ + do_klass(HotSpotNmethod_klass, com_oracle_graal_hotspot_meta_HotSpotNmethod, Opt) \ do_klass(HotSpotJavaType_klass, com_oracle_graal_hotspot_meta_HotSpotJavaType, Opt) \ do_klass(HotSpotMethodData_klass, com_oracle_graal_hotspot_meta_HotSpotMethodData, Opt) \ do_klass(HotSpotResolvedJavaField_klass, com_oracle_graal_hotspot_meta_HotSpotResolvedJavaField, Opt) \ diff -r 1ef7b26e9177 -r fe9a18fbb15e src/share/vm/classfile/vmSymbols.hpp --- a/src/share/vm/classfile/vmSymbols.hpp Mon May 13 16:09:49 2013 +0200 +++ b/src/share/vm/classfile/vmSymbols.hpp Mon May 13 18:19:43 2013 +0200 @@ -302,6 +302,7 @@ template(com_oracle_graal_hotspot_bridge_CompilerToVMImpl, "com/oracle/graal/hotspot/bridge/CompilerToVMImpl") \ template(com_oracle_graal_hotspot_meta_HotSpotCodeInfo, "com/oracle/graal/hotspot/meta/HotSpotCodeInfo") \ template(com_oracle_graal_hotspot_meta_HotSpotInstalledCode, "com/oracle/graal/hotspot/meta/HotSpotInstalledCode") \ + template(com_oracle_graal_hotspot_meta_HotSpotNmethod, "com/oracle/graal/hotspot/meta/HotSpotNmethod") \ template(com_oracle_graal_hotspot_meta_HotSpotJavaType, "com/oracle/graal/hotspot/meta/HotSpotJavaType") \ template(com_oracle_graal_hotspot_meta_HotSpotMethodData, "com/oracle/graal/hotspot/meta/HotSpotMethodData") \ template(com_oracle_graal_hotspot_meta_HotSpotResolvedJavaField, "com/oracle/graal/hotspot/meta/HotSpotResolvedJavaField") \ diff -r 1ef7b26e9177 -r fe9a18fbb15e src/share/vm/code/nmethod.cpp --- a/src/share/vm/code/nmethod.cpp Mon May 13 16:09:49 2013 +0200 +++ b/src/share/vm/code/nmethod.cpp Mon May 13 18:19:43 2013 +0200 @@ -1401,7 +1401,7 @@ if (!is_osr_method() && !is_not_entrant()) { address stub = SharedRuntime::get_handle_wrong_method_stub(); #ifdef GRAAL - if (_graal_installed_code != NULL && !HotSpotInstalledCode::isDefault(_graal_installed_code)) { + if (_graal_installed_code != NULL && !HotSpotNmethod::isDefault(_graal_installed_code)) { // This was manually installed machine code. Patch entry with stub that throws an exception. stub = SharedRuntime::get_deoptimized_installed_code_stub(); } @@ -1698,7 +1698,7 @@ #ifdef GRAAL // Follow Graal method if (_graal_installed_code != NULL) { - if (HotSpotInstalledCode::isDefault(_graal_installed_code)) { + if (HotSpotNmethod::isDefault(_graal_installed_code)) { if (!is_alive->do_object_b(_graal_installed_code)) { _graal_installed_code = NULL; } diff -r 1ef7b26e9177 -r fe9a18fbb15e src/share/vm/graal/graalCompilerToVM.cpp --- a/src/share/vm/graal/graalCompilerToVM.cpp Mon May 13 16:09:49 2013 +0200 +++ b/src/share/vm/graal/graalCompilerToVM.cpp Mon May 13 18:19:43 2013 +0200 @@ -895,7 +895,6 @@ if (!installed_code_handle.is_null()) { assert(installed_code_handle->is_a(HotSpotInstalledCode::klass()), "wrong type"); HotSpotInstalledCode::set_codeBlob(installed_code_handle, (jlong) cb); - HotSpotInstalledCode::set_method(installed_code_handle, HotSpotCompilationResult::method(compResult)); HotSpotInstalledCode::set_start(installed_code_handle, (jlong) cb->code_begin()); nmethod* nm = cb->as_nmethod_or_null(); assert(nm == NULL || !installed_code_handle->is_scavengable() || nm->on_scavenge_root_list(), "nm should be scavengable if installed_code is scavengable"); diff -r 1ef7b26e9177 -r fe9a18fbb15e src/share/vm/graal/graalEnv.cpp --- a/src/share/vm/graal/graalEnv.cpp Mon May 13 16:09:49 2013 +0200 +++ b/src/share/vm/graal/graalEnv.cpp Mon May 13 18:19:43 2013 +0200 @@ -526,7 +526,7 @@ // (Put nm into the task handle *before* publishing to the Java heap.) if (task != NULL) task->set_code(nm); - if (HotSpotInstalledCode::isDefault(installed_code())) { + if (HotSpotNmethod::isDefault(installed_code())) { if (entry_bci == InvocationEntryBci) { if (TieredCompilation) { // If there is an old version we're done with it diff -r 1ef7b26e9177 -r fe9a18fbb15e src/share/vm/graal/graalJavaAccess.hpp --- a/src/share/vm/graal/graalJavaAccess.hpp Mon May 13 16:09:49 2013 +0200 +++ b/src/share/vm/graal/graalJavaAccess.hpp Mon May 13 18:19:43 2013 +0200 @@ -78,9 +78,10 @@ end_class \ start_class(HotSpotInstalledCode) \ long_field(HotSpotInstalledCode, codeBlob) \ - oop_field(HotSpotInstalledCode, method, "Lcom/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod;") \ long_field(HotSpotInstalledCode, start) \ - boolean_field(HotSpotInstalledCode, isDefault) \ + end_class \ + start_class(HotSpotNmethod) \ + boolean_field(HotSpotNmethod, isDefault) \ end_class \ start_class(HotSpotCompilationResult) \ oop_field(HotSpotCompilationResult, comp, "Lcom/oracle/graal/api/code/CompilationResult;") \