# HG changeset patch # User Christian Wimmer # Date 1349750072 25200 # Node ID feb579677b58af44130a07d7ad4f004ecbedf0de # Parent 250babea75d5f673455144d1ae800f6347233b02 SnippetTemplate must not depend on CodeCacheProvider (only on MetaAccessProvider). This means that the hasSideEffect flag of a RuntimeCall must be already fixed in the RuntimeCall.Descriptor to avoid a lookup of the actual RuntimeCall using the CodeCacheProvider. diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RuntimeCall.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RuntimeCall.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RuntimeCall.java Mon Oct 08 19:34:32 2012 -0700 @@ -37,11 +37,13 @@ */ public static class Descriptor { private final String name; + private final boolean hasSideEffect; private final Kind resultKind; private final Kind[] argumentKinds; - public Descriptor(String name, Kind resultKind, Kind... args) { + public Descriptor(String name, boolean hasSideEffect, Kind resultKind, Kind... args) { this.name = name; + this.hasSideEffect = hasSideEffect; this.resultKind = resultKind; this.argumentKinds = args; } @@ -54,6 +56,15 @@ } /** + * Determines if this call changes state visible to other threads. + * Such calls denote boundaries across which deoptimization + * points cannot be moved. + */ + public boolean hasSideEffect() { + return hasSideEffect; + } + + /** * Gets the return kind of this runtime call. */ public Kind getResultKind() { @@ -96,13 +107,6 @@ CallingConvention getCallingConvention(); /** - * Determines if this call changes state visible to other threads. - * Such calls denote boundaries across which deoptimization - * points cannot be moved. - */ - boolean hasSideEffect(); - - /** * Returns the maximum absolute offset of PC relative call to this stub from any position in the code cache or -1 * when not applicable. Intended for determining the required size of address/offset fields. */ diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64DeoptimizationStub.java --- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64DeoptimizationStub.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64DeoptimizationStub.java Mon Oct 08 19:34:32 2012 -0700 @@ -36,8 +36,8 @@ public class AMD64DeoptimizationStub extends AMD64Code { - public static final Descriptor DEOPTIMIZE = new Descriptor("deoptimize", Kind.Void); - public static final Descriptor SET_DEOPT_INFO = new Descriptor("setDeoptInfo", Kind.Void, Kind.Object); + public static final Descriptor DEOPTIMIZE = new Descriptor("deoptimize", true, Kind.Void); + public static final Descriptor SET_DEOPT_INFO = new Descriptor("setDeoptInfo", true, Kind.Void, Kind.Object); public final Label label = new Label(); public final LIRFrameState info; diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java --- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Mon Oct 08 19:34:32 2012 -0700 @@ -78,8 +78,8 @@ */ public abstract class AMD64LIRGenerator extends LIRGenerator { - public static final Descriptor ARITHMETIC_FREM = new Descriptor("arithmeticFrem", Kind.Float, Kind.Float, Kind.Float); - public static final Descriptor ARITHMETIC_DREM = new Descriptor("arithmeticDrem", Kind.Double, Kind.Double, Kind.Double); + public static final Descriptor ARITHMETIC_FREM = new Descriptor("arithmeticFrem", false, Kind.Float, Kind.Float, Kind.Float); + public static final Descriptor ARITHMETIC_DREM = new Descriptor("arithmeticDrem", false, Kind.Double, Kind.Double, Kind.Double); private static final RegisterValue RAX_I = AMD64.rax.asValue(Kind.Int); private static final RegisterValue RAX_L = AMD64.rax.asValue(Kind.Long); diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRuntime.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRuntime.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRuntime.java Mon Oct 08 19:34:32 2012 -0700 @@ -47,73 +47,73 @@ HotSpotVMConfig c = config; Kind word = graalRuntime.getTarget().wordKind; - addRuntimeCall(DEOPTIMIZE, config.deoptimizeStub, true, + addRuntimeCall(DEOPTIMIZE, config.deoptimizeStub, /* temps */ null, /* ret */ ret(Kind.Void)); - addRuntimeCall(SET_DEOPT_INFO, config.setDeoptInfoStub, true, + addRuntimeCall(SET_DEOPT_INFO, config.setDeoptInfoStub, /* temps */ null, /* ret */ ret(Kind.Void), /* arg0: info */ scratch(Kind.Object)); - addRuntimeCall(DEBUG, config.debugStub, false, + addRuntimeCall(DEBUG, config.debugStub, /* temps */ null, /* ret */ ret(Kind.Void)); - addRuntimeCall(ARITHMETIC_FREM, config.arithmeticFremStub, false, + addRuntimeCall(ARITHMETIC_FREM, config.arithmeticFremStub, /* temps */ null, /* ret */ ret(Kind.Float), /* arg0: a */ arg(0, Kind.Float), /* arg1: b */ arg(1, Kind.Float)); - addRuntimeCall(ARITHMETIC_DREM, config.arithmeticDremStub, false, + addRuntimeCall(ARITHMETIC_DREM, config.arithmeticDremStub, /* temps */ null, /* ret */ ret(Kind.Double), /* arg0: a */ arg(0, Kind.Double), /* arg1: b */ arg(1, Kind.Double)); - addRuntimeCall(MONITORENTER, config.fastMonitorEnterStub, true, + addRuntimeCall(MONITORENTER, config.fastMonitorEnterStub, /* temps */ new Register[] {rax, rbx}, /* ret */ ret(Kind.Void), /* arg0: object */ arg(0, Kind.Object), /* arg1: lock */ arg(1, word)); - addRuntimeCall(MONITOREXIT, c.fastMonitorExitStub, true, + addRuntimeCall(MONITOREXIT, c.fastMonitorExitStub, /* temps */ new Register[] {rax, rbx}, /* ret */ ret(Kind.Void), /* arg0: object */ arg(0, Kind.Object), /* arg1: lock */ arg(1, word)); - addRuntimeCall(NEW_OBJECT_ARRAY, c.newObjectArrayStub, false, + addRuntimeCall(NEW_OBJECT_ARRAY, c.newObjectArrayStub, /* temps */ new Register[] {rcx, rdi, rsi}, /* ret */ rax.asValue(Kind.Object), /* arg0: hub */ rdx.asValue(Kind.Object), /* arg1: length */ rbx.asValue(Kind.Int)); - addRuntimeCall(NEW_TYPE_ARRAY, c.newTypeArrayStub, false, + addRuntimeCall(NEW_TYPE_ARRAY, c.newTypeArrayStub, /* temps */ new Register[] {rcx, rdi, rsi}, /* ret */ rax.asValue(Kind.Object), /* arg0: hub */ rdx.asValue(Kind.Object), /* arg1: length */ rbx.asValue(Kind.Int)); - addRuntimeCall(NEW_INSTANCE, c.newInstanceStub, false, + addRuntimeCall(NEW_INSTANCE, c.newInstanceStub, /* temps */ null, /* ret */ rax.asValue(Kind.Object), /* arg0: hub */ rdx.asValue(Kind.Object)); - addRuntimeCall(NEW_MULTI_ARRAY, c.newMultiArrayStub, false, + addRuntimeCall(NEW_MULTI_ARRAY, c.newMultiArrayStub, /* temps */ null, /* ret */ rax.asValue(Kind.Object), /* arg0: hub */ rax.asValue(Kind.Object), /* arg1: rank */ rbx.asValue(Kind.Int), /* arg2: dims */ rcx.asValue(word)); - addRuntimeCall(VERIFY_OOP, c.verifyOopStub, false, + addRuntimeCall(VERIFY_OOP, c.verifyOopStub, /* temps */ null, /* ret */ ret(Kind.Void), /* arg0: object */ r13.asValue(Kind.Object)); - addRuntimeCall(VM_ERROR, c.vmErrorStub, false, + addRuntimeCall(VM_ERROR, c.vmErrorStub, /* temps */ null, /* ret */ ret(Kind.Void), /* arg0: where */ arg(0, Kind.Object), diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotRuntimeCall.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotRuntimeCall.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotRuntimeCall.java Mon Oct 08 19:34:32 2012 -0700 @@ -45,14 +45,12 @@ */ public final CallingConvention cc; - private final boolean hasSideEffect; private final CompilerToVM vm; - public HotSpotRuntimeCall(Descriptor descriptor, long address, boolean hasSideEffect, CallingConvention cc, CompilerToVM vm) { + public HotSpotRuntimeCall(Descriptor descriptor, long address, CallingConvention cc, CompilerToVM vm) { this.address = address; this.descriptor = descriptor; this.cc = cc; - this.hasSideEffect = hasSideEffect; this.vm = vm; } @@ -65,10 +63,6 @@ return cc; } - public boolean hasSideEffect() { - return hasSideEffect; - } - public long getMaxCallTargetOffset() { return vm.getMaxCallTargetOffset(address); } diff -r 250babea75d5 -r feb579677b58 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 Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Mon Oct 08 19:34:32 2012 -0700 @@ -100,62 +100,62 @@ regConfig = createRegisterConfig(false); globalStubRegConfig = createRegisterConfig(true); - addRuntimeCall(UNWIND_EXCEPTION, config.unwindExceptionStub, true, + addRuntimeCall(UNWIND_EXCEPTION, config.unwindExceptionStub, /* temps */ null, /* ret */ ret(Kind.Void), /* arg0: exception */ arg(0, Kind.Object)); - addRuntimeCall(REGISTER_FINALIZER, config.registerFinalizerStub, true, + addRuntimeCall(REGISTER_FINALIZER, config.registerFinalizerStub, /* temps */ null, /* ret */ ret(Kind.Void), /* arg0: object */ arg(0, Kind.Object)); - addRuntimeCall(CREATE_NULL_POINTER_EXCEPTION, config.createNullPointerExceptionStub, true, + addRuntimeCall(CREATE_NULL_POINTER_EXCEPTION, config.createNullPointerExceptionStub, /* temps */ null, /* ret */ ret(Kind.Object)); - addRuntimeCall(CREATE_OUT_OF_BOUNDS_EXCEPTION, config.createOutOfBoundsExceptionStub, true, + addRuntimeCall(CREATE_OUT_OF_BOUNDS_EXCEPTION, config.createOutOfBoundsExceptionStub, /* temps */ null, /* ret */ ret(Kind.Object), /* arg0: index */ arg(0, Kind.Int)); - addRuntimeCall(JAVA_TIME_MILLIS, config.javaTimeMillisStub, false, + addRuntimeCall(JAVA_TIME_MILLIS, config.javaTimeMillisStub, /* temps */ null, /* ret */ ret(Kind.Long)); - addRuntimeCall(JAVA_TIME_NANOS, config.javaTimeNanosStub, false, + addRuntimeCall(JAVA_TIME_NANOS, config.javaTimeNanosStub, /* temps */ null, /* ret */ ret(Kind.Long)); - addRuntimeCall(ARITHMETIC_SIN, config.arithmeticSinStub, false, + addRuntimeCall(ARITHMETIC_SIN, config.arithmeticSinStub, /* temps */ null, /* ret */ ret(Kind.Double), /* arg0: index */ arg(0, Kind.Double)); - addRuntimeCall(ARITHMETIC_COS, config.arithmeticCosStub, false, + addRuntimeCall(ARITHMETIC_COS, config.arithmeticCosStub, /* temps */ null, /* ret */ ret(Kind.Double), /* arg0: index */ arg(0, Kind.Double)); - addRuntimeCall(ARITHMETIC_TAN, config.arithmeticTanStub, false, + addRuntimeCall(ARITHMETIC_TAN, config.arithmeticTanStub, /* temps */ null, /* ret */ ret(Kind.Double), /* arg0: index */ arg(0, Kind.Double)); - addRuntimeCall(LOG_PRIMITIVE, config.logPrimitiveStub, false, + addRuntimeCall(LOG_PRIMITIVE, config.logPrimitiveStub, /* temps */ null, /* ret */ ret(Kind.Void), /* arg0: typeChar */ arg(0, Kind.Int), /* arg1: value */ arg(1, Kind.Long), /* arg2: newline */ arg(2, Kind.Boolean)); - addRuntimeCall(LOG_PRINTF, config.logPrintfStub, false, + addRuntimeCall(LOG_PRINTF, config.logPrintfStub, /* temps */ null, /* ret */ ret(Kind.Void), /* arg0: format */ arg(0, Kind.Object), /* arg1: value */ arg(1, Kind.Long)); - addRuntimeCall(LOG_OBJECT, config.logObjectStub, false, + addRuntimeCall(LOG_OBJECT, config.logObjectStub, /* temps */ null, /* ret */ ret(Kind.Void), /* arg0: object */ arg(0, Kind.Object), @@ -172,7 +172,7 @@ * @param ret where the call returns its result * @param args where arguments are passed to the call */ - protected void addRuntimeCall(Descriptor descriptor, long address, boolean hasSideEffect, Register[] tempRegs, Value ret, Value... args) { + protected void addRuntimeCall(Descriptor descriptor, long address, Register[] tempRegs, Value ret, Value... args) { Value[] temps = tempRegs == null || tempRegs.length == 0 ? Value.NONE : new Value[tempRegs.length]; for (int i = 0; i < temps.length; i++) { temps[i] = tempRegs[i].asValue(); @@ -187,7 +187,7 @@ for (int i = 0; i < argKinds.length; i++) { assert argKinds[i].equals(args[i].getKind()) : descriptor + " incompatible with argument location " + i + ": " + args[i]; } - HotSpotRuntimeCall runtimeCall = new HotSpotRuntimeCall(descriptor, address, hasSideEffect, new CallingConvention(temps, 0, ret, args), graalRuntime.getCompilerToVM()); + HotSpotRuntimeCall runtimeCall = new HotSpotRuntimeCall(descriptor, address, new CallingConvention(temps, 0, ret, args), graalRuntime.getCompilerToVM()); runtimeCalls.put(descriptor, runtimeCall); } diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/BeginLockScopeNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/BeginLockScopeNode.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/BeginLockScopeNode.java Mon Oct 08 19:34:32 2012 -0700 @@ -48,7 +48,7 @@ } @Override - public boolean hasSideEffect(CodeCacheProvider runtime) { + public boolean hasSideEffect() { return false; } diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EndLockScopeNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EndLockScopeNode.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EndLockScopeNode.java Mon Oct 08 19:34:32 2012 -0700 @@ -22,7 +22,6 @@ */ package com.oracle.graal.hotspot.nodes; -import com.oracle.graal.api.code.*; import com.oracle.graal.compiler.gen.*; import com.oracle.graal.compiler.target.*; import com.oracle.graal.nodes.*; @@ -40,7 +39,7 @@ } @Override - public boolean hasSideEffect(CodeCacheProvider runtime) { + public boolean hasSideEffect() { return false; } diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/MonitorEnterStubCall.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/MonitorEnterStubCall.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/MonitorEnterStubCall.java Mon Oct 08 19:34:32 2012 -0700 @@ -40,7 +40,7 @@ @Input private final ValueNode object; @Input private final ValueNode lock; - public static final Descriptor MONITORENTER = new Descriptor("monitorenter", Kind.Void, Kind.Object, wordKind()); + public static final Descriptor MONITORENTER = new Descriptor("monitorenter", true, Kind.Void, Kind.Object, wordKind()); public MonitorEnterStubCall(ValueNode object, ValueNode lock) { super(StampFactory.forVoid()); diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/MonitorExitStubCall.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/MonitorExitStubCall.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/MonitorExitStubCall.java Mon Oct 08 19:34:32 2012 -0700 @@ -38,7 +38,7 @@ public class MonitorExitStubCall extends FixedWithNextNode implements LIRGenLowerable { @Input private final ValueNode object; - public static final Descriptor MONITOREXIT = new Descriptor("monitorexit", Kind.Void, Kind.Object, wordKind()); + public static final Descriptor MONITOREXIT = new Descriptor("monitorexit", true, Kind.Void, Kind.Object, wordKind()); public MonitorExitStubCall(ValueNode object) { super(StampFactory.forVoid()); diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewArrayStubCall.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewArrayStubCall.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewArrayStubCall.java Mon Oct 08 19:34:32 2012 -0700 @@ -43,9 +43,9 @@ @Input private final ValueNode length; private final boolean isObjectArray; - public static final Descriptor NEW_OBJECT_ARRAY = new Descriptor("new_object_array", Kind.Object, Kind.Object, Kind.Int); + public static final Descriptor NEW_OBJECT_ARRAY = new Descriptor("new_object_array", false, Kind.Object, Kind.Object, Kind.Int); - public static final Descriptor NEW_TYPE_ARRAY = new Descriptor("new_type_array", Kind.Object, Kind.Object, Kind.Int); + public static final Descriptor NEW_TYPE_ARRAY = new Descriptor("new_type_array", false, Kind.Object, Kind.Object, Kind.Int); public NewArrayStubCall(boolean isObjectArray, ValueNode hub, ValueNode length) { super(defaultStamp); diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewInstanceStubCall.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewInstanceStubCall.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewInstanceStubCall.java Mon Oct 08 19:34:32 2012 -0700 @@ -41,7 +41,7 @@ @Input private final ValueNode hub; - public static final Descriptor NEW_INSTANCE = new Descriptor("new_instance", Kind.Object, Kind.Object); + public static final Descriptor NEW_INSTANCE = new Descriptor("new_instance", false, Kind.Object, Kind.Object); public NewInstanceStubCall(ValueNode hub) { super(defaultStamp); diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewMultiArrayStubCall.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewMultiArrayStubCall.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewMultiArrayStubCall.java Mon Oct 08 19:34:32 2012 -0700 @@ -46,7 +46,7 @@ @Input private final ValueNode dims; private final int rank; - public static final Descriptor NEW_MULTI_ARRAY = new Descriptor("new_multi_array", Kind.Object, Kind.Object, Kind.Int, wordKind()); + public static final Descriptor NEW_MULTI_ARRAY = new Descriptor("new_multi_array", false, Kind.Object, Kind.Object, Kind.Int, wordKind()); public NewMultiArrayStubCall(ValueNode hub, int rank, ValueNode dims) { super(defaultStamp); diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VMErrorNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VMErrorNode.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VMErrorNode.java Mon Oct 08 19:34:32 2012 -0700 @@ -40,7 +40,7 @@ @Input private ValueNode format; @Input private ValueNode value; - public static final Descriptor VM_ERROR = new Descriptor("vm_error", Kind.Void, Kind.Object, Kind.Object, Kind.Long); + public static final Descriptor VM_ERROR = new Descriptor("vm_error", false, Kind.Void, Kind.Object, Kind.Object, Kind.Long); public VMErrorNode(ValueNode format, ValueNode value) { super(StampFactory.forVoid()); diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VerifyOopStubCall.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VerifyOopStubCall.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VerifyOopStubCall.java Mon Oct 08 19:34:32 2012 -0700 @@ -36,7 +36,7 @@ public class VerifyOopStubCall extends FixedWithNextNode implements LIRGenLowerable { @Input private final ValueNode object; - public static final Descriptor VERIFY_OOP = new Descriptor("verify_oop", Kind.Void, Kind.Object); + public static final Descriptor VERIFY_OOP = new Descriptor("verify_oop", false, Kind.Void, Kind.Object); public VerifyOopStubCall(ValueNode object) { super(StampFactory.objectNonNull()); diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/SystemSnippets.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/SystemSnippets.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/SystemSnippets.java Mon Oct 08 19:34:32 2012 -0700 @@ -35,8 +35,8 @@ @ClassSubstitution(java.lang.System.class) public class SystemSnippets implements SnippetsInterface { - public static final Descriptor JAVA_TIME_MILLIS = new Descriptor("javaTimeMillis", Kind.Long); - public static final Descriptor JAVA_TIME_NANOS = new Descriptor("javaTimeNanos", Kind.Long); + public static final Descriptor JAVA_TIME_MILLIS = new Descriptor("javaTimeMillis", false, Kind.Long); + public static final Descriptor JAVA_TIME_NANOS = new Descriptor("javaTimeNanos", false, Kind.Long); public static long currentTimeMillis() { return callLong(JAVA_TIME_MILLIS); diff -r 250babea75d5 -r feb579677b58 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 Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Mon Oct 08 19:34:32 2012 -0700 @@ -53,8 +53,8 @@ */ public final class GraphBuilderPhase extends Phase { - public static final Descriptor CREATE_NULL_POINTER_EXCEPTION = new Descriptor("createNullPointerException", Kind.Object); - public static final Descriptor CREATE_OUT_OF_BOUNDS_EXCEPTION = new Descriptor("createOutOfBoundsException", Kind.Object, Kind.Int); + public static final Descriptor CREATE_NULL_POINTER_EXCEPTION = new Descriptor("createNullPointerException", true, Kind.Object); + public static final Descriptor CREATE_OUT_OF_BOUNDS_EXCEPTION = new Descriptor("createOutOfBoundsException", true, Kind.Object, Kind.Int); /** diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Call.java --- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Call.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Call.java Mon Oct 08 19:34:32 2012 -0700 @@ -35,7 +35,7 @@ public class AMD64Call { - public static final Descriptor DEBUG = new Descriptor("debug", Kind.Void); + public static final Descriptor DEBUG = new Descriptor("debug", false, Kind.Void); @Opcode("CALL_DIRECT") public static class DirectCallOp extends AMD64LIRInstruction implements StandardOp.CallOp { diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractStateSplit.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractStateSplit.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractStateSplit.java Mon Oct 08 19:34:32 2012 -0700 @@ -22,7 +22,6 @@ */ package com.oracle.graal.nodes; -import com.oracle.graal.api.code.*; import com.oracle.graal.nodes.type.*; /** @@ -42,7 +41,7 @@ stateAfter = x; } - public boolean hasSideEffect(CodeCacheProvider runtime) { + public boolean hasSideEffect() { return true; } diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java Mon Oct 08 19:34:32 2012 -0700 @@ -26,7 +26,6 @@ import java.util.*; -import com.oracle.graal.api.code.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.iterators.*; import com.oracle.graal.nodes.spi.*; @@ -45,7 +44,7 @@ stateAfter = x; } - public boolean hasSideEffect(CodeCacheProvider runtime) { + public boolean hasSideEffect() { return false; } diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginStateSplitNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginStateSplitNode.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginStateSplitNode.java Mon Oct 08 19:34:32 2012 -0700 @@ -22,8 +22,6 @@ */ package com.oracle.graal.nodes; -import com.oracle.graal.api.code.*; - /** * Base class for {@link BeginNode}s that are associated with a frame state. * TODO (dnsimon) this not needed until {@link BeginNode} no longer implements {@link StateSplit} @@ -35,7 +33,7 @@ * A begin node has no side effect. */ @Override - public boolean hasSideEffect(CodeCacheProvider runtime) { + public boolean hasSideEffect() { return false; } } diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java Mon Oct 08 19:34:32 2012 -0700 @@ -24,13 +24,13 @@ import java.util.*; -import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.util.*; + @NodeInfo(nameTemplate = "Invoke!#{p#targetMethod/s}") public class InvokeWithExceptionNode extends ControlSplitNode implements Node.IterableNodeType, Invoke, MemoryCheckpoint, LIRLowerable { public static final int NORMAL_EDGE = 0; @@ -150,7 +150,7 @@ this.stateAfter = stateAfter; } - public boolean hasSideEffect(CodeCacheProvider runtime) { + public boolean hasSideEffect() { return true; } diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StateSplit.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StateSplit.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StateSplit.java Mon Oct 08 19:34:32 2012 -0700 @@ -22,8 +22,6 @@ */ package com.oracle.graal.nodes; -import com.oracle.graal.api.code.*; - /** * A state split is a node that may have a frame state associated with it. */ @@ -44,5 +42,5 @@ * state visible to other threads. These nodes denote boundaries across which deoptimization * points cannot be moved. */ - boolean hasSideEffect(CodeCacheProvider runtime); + boolean hasSideEffect(); } diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnwindNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnwindNode.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnwindNode.java Mon Oct 08 19:34:32 2012 -0700 @@ -34,7 +34,7 @@ */ public final class UnwindNode extends FixedNode implements LIRLowerable, Node.IterableNodeType { - public static final Descriptor UNWIND_EXCEPTION = new Descriptor("unwindException", Kind.Void, Kind.Object); + public static final Descriptor UNWIND_EXCEPTION = new Descriptor("unwindException", true, Kind.Void, Kind.Object); @Input private ValueNode exception; diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/RuntimeCallNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/RuntimeCallNode.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/RuntimeCallNode.java Mon Oct 08 19:34:32 2012 -0700 @@ -22,7 +22,6 @@ */ package com.oracle.graal.nodes.extended; -import com.oracle.graal.api.code.*; import com.oracle.graal.api.code.RuntimeCall.Descriptor; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; @@ -44,8 +43,8 @@ } @Override - public boolean hasSideEffect(CodeCacheProvider runtime) { - return runtime.getRuntimeCall(descriptor).hasSideEffect(); + public boolean hasSideEffect() { + return descriptor.hasSideEffect(); } @Override diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SafeWriteNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SafeWriteNode.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SafeWriteNode.java Mon Oct 08 19:34:32 2012 -0700 @@ -22,7 +22,6 @@ */ package com.oracle.graal.nodes.extended; -import com.oracle.graal.api.code.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; @@ -46,7 +45,7 @@ stateAfter = x; } - public boolean hasSideEffect(CodeCacheProvider runtime) { + public boolean hasSideEffect() { return true; } diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java Mon Oct 08 19:34:32 2012 -0700 @@ -22,7 +22,6 @@ */ package com.oracle.graal.nodes.extended; -import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; @@ -50,7 +49,7 @@ stateAfter = x; } - public boolean hasSideEffect(CodeCacheProvider runtime) { + public boolean hasSideEffect() { return true; } diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java Mon Oct 08 19:34:32 2012 -0700 @@ -46,7 +46,7 @@ stateAfter = x; } - public boolean hasSideEffect(CodeCacheProvider runtime) { + public boolean hasSideEffect() { return true; } diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java Mon Oct 08 19:34:32 2012 -0700 @@ -34,7 +34,7 @@ */ public final class RegisterFinalizerNode extends AbstractStateSplit implements StateSplit, Canonicalizable, LIRLowerable { - public static final Descriptor REGISTER_FINALIZER = new Descriptor("registerFinalizer", Kind.Void, Kind.Object); + public static final Descriptor REGISTER_FINALIZER = new Descriptor("registerFinalizer", true, Kind.Void, Kind.Object); @Input private ValueNode object; diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java Mon Oct 08 19:34:32 2012 -0700 @@ -22,7 +22,6 @@ */ package com.oracle.graal.nodes.java; -import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; @@ -47,7 +46,7 @@ stateAfter = x; } - public boolean hasSideEffect(CodeCacheProvider runtime) { + public boolean hasSideEffect() { return true; } diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java Mon Oct 08 19:34:32 2012 -0700 @@ -22,7 +22,6 @@ */ package com.oracle.graal.nodes.java; -import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; @@ -46,7 +45,7 @@ stateAfter = x; } - public boolean hasSideEffect(CodeCacheProvider runtime) { + public boolean hasSideEffect() { return true; } diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InsertStateAfterPlaceholderPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InsertStateAfterPlaceholderPhase.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InsertStateAfterPlaceholderPhase.java Mon Oct 08 19:34:32 2012 -0700 @@ -22,7 +22,6 @@ */ package com.oracle.graal.phases.common; -import com.oracle.graal.api.code.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; @@ -42,7 +41,7 @@ } @Override - public boolean hasSideEffect(CodeCacheProvider runtime) { + public boolean hasSideEffect() { return false; } diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/Log.java --- a/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/Log.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/Log.java Mon Oct 08 19:34:32 2012 -0700 @@ -37,9 +37,9 @@ */ public final class Log { - public static final Descriptor LOG_PRIMITIVE = new Descriptor("logPrimitive", Kind.Void, Kind.Int, Kind.Long, Kind.Boolean); - public static final Descriptor LOG_OBJECT = new Descriptor("logObject", Kind.Void, Kind.Object, Kind.Int); - public static final Descriptor LOG_PRINTF = new Descriptor("logPrintf", Kind.Void, Kind.Object, Kind.Long); + public static final Descriptor LOG_PRIMITIVE = new Descriptor("logPrimitive", false, Kind.Void, Kind.Int, Kind.Long, Kind.Boolean); + public static final Descriptor LOG_OBJECT = new Descriptor("logObject", false, Kind.Void, Kind.Object, Kind.Int); + public static final Descriptor LOG_PRINTF = new Descriptor("logPrintf", false, Kind.Void, Kind.Object, Kind.Long); // Note: Must be kept in sync with constants in c1_Runtime1.hpp private static final int LOG_OBJECT_NEWLINE = 0x01; diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/MathSnippetsX86.java --- a/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/MathSnippetsX86.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/MathSnippetsX86.java Mon Oct 08 19:34:32 2012 -0700 @@ -84,9 +84,9 @@ } } - public static final Descriptor ARITHMETIC_SIN = new Descriptor("arithmeticSin", Kind.Double, Kind.Double); - public static final Descriptor ARITHMETIC_COS = new Descriptor("arithmeticCos", Kind.Double, Kind.Double); - public static final Descriptor ARITHMETIC_TAN = new Descriptor("arithmeticTan", Kind.Double, Kind.Double); + public static final Descriptor ARITHMETIC_SIN = new Descriptor("arithmeticSin", false, Kind.Double, Kind.Double); + public static final Descriptor ARITHMETIC_COS = new Descriptor("arithmeticCos", false, Kind.Double, Kind.Double); + public static final Descriptor ARITHMETIC_TAN = new Descriptor("arithmeticTan", false, Kind.Double, Kind.Double); @NodeIntrinsic(value = RuntimeCallNode.class, setStampFromReturnType = true) public static native double callDouble(@ConstantNodeParameter Descriptor descriptor, double value); diff -r 250babea75d5 -r feb579677b58 graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetTemplate.java --- a/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetTemplate.java Mon Oct 08 17:38:24 2012 +0200 +++ b/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetTemplate.java Mon Oct 08 19:34:32 2012 -0700 @@ -27,7 +27,6 @@ import java.util.Map.Entry; 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.graph.*; @@ -153,10 +152,10 @@ public static class Cache { private final ConcurrentHashMap templates = new ConcurrentHashMap<>(); - private final CodeCacheProvider runtime; + private final MetaAccessProvider runtime; - public Cache(CodeCacheProvider runtime) { + public Cache(MetaAccessProvider runtime) { this.runtime = runtime; } @@ -181,9 +180,9 @@ public abstract static class AbstractTemplates { protected final Cache cache; - protected final CodeCacheProvider runtime; + protected final MetaAccessProvider runtime; protected Class snippetsClass; - public AbstractTemplates(CodeCacheProvider runtime, Class snippetsClass) { + public AbstractTemplates(MetaAccessProvider runtime, Class snippetsClass) { this.runtime = runtime; this.snippetsClass = snippetsClass; this.cache = new Cache(runtime); @@ -215,7 +214,7 @@ /** * Creates a snippet template. */ - public SnippetTemplate(CodeCacheProvider runtime, SnippetTemplate.Key key) { + public SnippetTemplate(MetaAccessProvider runtime, SnippetTemplate.Key key) { ResolvedJavaMethod method = key.method; assert Modifier.isStatic(method.accessFlags()) : "snippet method must be static: " + method; Signature signature = method.signature(); @@ -336,7 +335,7 @@ if (node instanceof StateSplit) { StateSplit stateSplit = (StateSplit) node; FrameState frameState = stateSplit.stateAfter(); - if (stateSplit.hasSideEffect(runtime)) { + if (stateSplit.hasSideEffect()) { assert curSideEffectNode == null : "Currently limited to one side-effecting node (but this can be converted to a List if necessary)"; curSideEffectNode = node; } @@ -520,7 +519,7 @@ * @param args the arguments to be bound to the flattened positional parameters of the snippet * @return the map of duplicated nodes (original -> duplicate) */ - public Map instantiate(CodeCacheProvider runtime, + public Map instantiate(MetaAccessProvider runtime, FixedWithNextNode replacee, SnippetTemplate.Arguments args) { // Inline the snippet nodes, replacing parameters with the given args in the process @@ -540,7 +539,7 @@ replacee.setNext(null); if (sideEffectNode != null) { - assert ((StateSplit) replacee).hasSideEffect(runtime); + assert ((StateSplit) replacee).hasSideEffect(); Node sideEffectDup = duplicates.get(sideEffectNode); ((StateSplit) sideEffectDup).setStateAfter(((StateSplit) replacee).stateAfter()); } @@ -582,7 +581,7 @@ * @param lastFixedNode the CFG of the snippet is inserted after this node * @param args the arguments to be bound to the flattened positional parameters of the snippet */ - public void instantiate(CodeCacheProvider runtime, + public void instantiate(MetaAccessProvider runtime, FloatingNode replacee, FixedWithNextNode lastFixedNode, SnippetTemplate.Arguments args) { @@ -603,7 +602,7 @@ replaceeGraph.addAfterFixed(lastFixedNode, firstCFGNodeDuplicate); if (sideEffectNode != null) { - assert ((StateSplit) replacee).hasSideEffect(runtime); + assert ((StateSplit) replacee).hasSideEffect(); Node sideEffectDup = duplicates.get(sideEffectNode); ((StateSplit) sideEffectDup).setStateAfter(((StateSplit) replacee).stateAfter()); }