changeset 6534:feb579677b58

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.
author Christian Wimmer <christian.wimmer@oracle.com>
date Mon, 08 Oct 2012 19:34:32 -0700
parents 250babea75d5
children f938212e56ab
files graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RuntimeCall.java graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64DeoptimizationStub.java graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRuntime.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotRuntimeCall.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/BeginLockScopeNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EndLockScopeNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/MonitorEnterStubCall.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/MonitorExitStubCall.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewArrayStubCall.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewInstanceStubCall.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewMultiArrayStubCall.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VMErrorNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VerifyOopStubCall.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/SystemSnippets.java graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Call.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractStateSplit.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginStateSplitNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StateSplit.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnwindNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/RuntimeCallNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SafeWriteNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InsertStateAfterPlaceholderPhase.java graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/Log.java graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/MathSnippetsX86.java graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetTemplate.java
diffstat 35 files changed, 91 insertions(+), 107 deletions(-) [+]
line wrap: on
line diff
--- 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.
      */
--- 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;
--- 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);
--- 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),
--- 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);
     }
--- 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);
     }
 
--- 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;
     }
 
--- 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;
     }
 
--- 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());
--- 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());
--- 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);
--- 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);
--- 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);
--- 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());
--- 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());
--- 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);
--- 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);
 
 
     /**
--- 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 {
--- 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;
     }
 
--- 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;
     }
 
--- 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;
     }
 }
--- 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;
     }
 
--- 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();
 }
--- 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;
 
--- 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
--- 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;
     }
 
--- 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;
     }
 
--- 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;
     }
 
--- 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;
 
--- 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;
     }
 
--- 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;
     }
 
--- 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;
         }
 
--- 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;
--- 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);
--- 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<SnippetTemplate.Key, SnippetTemplate> 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<T extends SnippetsInterface> {
         protected final Cache cache;
-        protected final CodeCacheProvider runtime;
+        protected final MetaAccessProvider runtime;
         protected Class<T> snippetsClass;
-        public AbstractTemplates(CodeCacheProvider runtime, Class<T> snippetsClass) {
+        public AbstractTemplates(MetaAccessProvider runtime, Class<T> 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<Node, Node> instantiate(CodeCacheProvider runtime,
+    public Map<Node, Node> 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());
         }