# HG changeset patch # User Gilles Duboscq # Date 1305039448 -7200 # Node ID 8741e469f67433571916020636aa53d6a00fb62a # Parent 569228710be8513c717cb5ef9aff612b87595af0# Parent 6d843cdd0bed716fd39fcf9a0f01862b242abbca Merge diff -r 6d843cdd0bed -r 8741e469f674 graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java --- a/graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java Tue May 10 16:31:28 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java Tue May 10 16:57:28 2011 +0200 @@ -27,7 +27,6 @@ import static com.sun.cri.ci.CiCallingConvention.Type.*; import static com.sun.cri.ci.CiValue.*; -import java.lang.reflect.*; import java.util.*; import com.sun.c1x.*; @@ -43,7 +42,6 @@ import com.sun.c1x.util.*; import com.sun.c1x.value.*; import com.sun.c1x.value.FrameState.PhiProcedure; -import com.sun.cri.bytecode.*; import com.sun.cri.bytecode.Bytecodes.MemoryBarriers; import com.sun.cri.ci.*; import com.sun.cri.ri.*; @@ -447,29 +445,25 @@ lir.cmove(i.condition(), tVal, fVal, reg); } - /*protected FrameState stateBeforeInvoke(Invoke invoke) { + protected FrameState stateBeforeInvoke(Invoke invoke) { FrameState stateAfter = invoke.stateAfter(); FrameStateBuilder builder = new FrameStateBuilder(compilation.method, invoke.graph()); - System.out.println("stateBeforeInvoke(" + invoke + "); maxStack=" + compilation.method.maxStackSize()); - System.out.println("stateAfter=" + stateAfter); builder.initializeFrom(stateAfter); if (invoke.kind != CiKind.Void) { - Value pop = builder.pop(invoke.kind); - System.out.println("pop " + pop); + builder.pop(invoke.kind); } int argumentCount = invoke.argumentCount(); // invoke.arguments() iterable? for (int i = 0; i < argumentCount; i++) { Value arg = invoke.argument(i); - System.out.println("push " + arg); builder.push(arg.kind, arg); } return builder.create(invoke.bci()); - }*/ + } @Override public void visitInvoke(Invoke x) { RiMethod target = x.target(); - LIRDebugInfo info = stateFor(x); + LIRDebugInfo info = stateFor(x, stateBeforeInvoke(x)); XirSnippet snippet = null; @@ -1005,14 +999,18 @@ return operand; } + private FrameState stateBeforeRegisterFinalizer(RegisterFinalizer rf) { + Value object = rf.object(); + FrameStateBuilder builder = new FrameStateBuilder(compilation.method, rf.graph()); + builder.initializeFrom(rf.stateAfter()); + builder.push(object.kind, object); + return builder.create(rf.bci()); + } + @Override public void visitRegisterFinalizer(RegisterFinalizer x) { - Value object = x.object(); - CiValue receiver = load(object); - FrameStateBuilder builder = new FrameStateBuilder(compilation.method, x.graph()); - builder.initializeFrom(x.stateAfter()); - builder.push(object.kind, object); - LIRDebugInfo info = stateFor(x, builder.create(x.bci())); + CiValue receiver = load(x.object()); + LIRDebugInfo info = stateFor(x, stateBeforeRegisterFinalizer(x)); callRuntime(CiRuntimeCall.RegisterFinalizer, info, receiver); setNoResult(x); } @@ -1467,10 +1465,10 @@ } protected LIRDebugInfo maybeStateFor(Instruction x) { - if (lastState == null) { + if (x.stateAfter() == null) { return null; } - return stateFor(x, lastState); + return stateFor(x, x.stateAfter()); } protected LIRDebugInfo stateFor(Instruction x) { @@ -1651,11 +1649,4 @@ } } - - private CiValue emitInvokeKnown(RiMethod method, FrameState stateBefore, Value... args) { - boolean isStatic = Modifier.isStatic(method.accessFlags()); - Invoke invoke = new Invoke(isStatic ? Bytecodes.INVOKESTATIC : Bytecodes.INVOKESPECIAL, method.signature().returnKind(), args, method, null, stateBefore, null); - visitInvoke(invoke); - return invoke.operand(); - } } diff -r 6d843cdd0bed -r 8741e469f674 graal/GraalCompiler/src/com/sun/c1x/graph/GraphBuilder.java --- a/graal/GraalCompiler/src/com/sun/c1x/graph/GraphBuilder.java Tue May 10 16:31:28 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/graph/GraphBuilder.java Tue May 10 16:57:28 2011 +0200 @@ -344,7 +344,7 @@ // this is a load of class constant which might be unresolved RiType riType = (RiType) con; if (!riType.isResolved() || C1XOptions.TestPatching) { - frameState.push(CiKind.Object, append(new ResolveClass(riType, RiType.Representation.JavaClass, null, graph))); + frameState.push(CiKind.Object, append(new ResolveClass(riType, RiType.Representation.JavaClass, graph))); } else { frameState.push(CiKind.Object, append(new Constant(riType.getEncoding(Representation.JavaClass), graph))); } @@ -357,27 +357,25 @@ } void genLoadIndexed(CiKind kind) { - FrameState stateBefore = frameState.create(bci()); Value index = frameState.ipop(); Value array = frameState.apop(); Value length = null; if (cseArrayLength(array)) { - length = append(new ArrayLength(array, stateBefore, graph)); + length = append(new ArrayLength(array, graph)); } - Value v = append(new LoadIndexed(array, index, length, kind, stateBefore, graph)); + Value v = append(new LoadIndexed(array, index, length, kind, graph)); frameState.push(kind.stackKind(), v); } void genStoreIndexed(CiKind kind) { - FrameState stateBefore = frameState.create(bci()); Value value = frameState.pop(kind.stackKind()); Value index = frameState.ipop(); Value array = frameState.apop(); Value length = null; if (cseArrayLength(array)) { - length = append(new ArrayLength(array, stateBefore, graph)); + length = append(new ArrayLength(array, graph)); } - StoreIndexed result = new StoreIndexed(array, index, length, kind, value, stateBefore, graph); + StoreIndexed result = new StoreIndexed(array, index, length, kind, value, graph); append(result); if (memoryMap != null) { memoryMap.storeValue(value); @@ -619,16 +617,14 @@ void genGetField(int cpi, RiField field) { // Must copy the state here, because the field holder must still be on the stack. - FrameState stateBefore = frameState.create(bci()); - LoadField load = new LoadField(frameState.apop(), field, stateBefore, graph); + LoadField load = new LoadField(frameState.apop(), field, graph); appendOptimizedLoadField(field.kind(), load); } void genPutField(int cpi, RiField field) { // Must copy the state here, because the field holder must still be on the stack. - FrameState stateBefore = frameState.create(bci()); Value value = frameState.pop(field.kind().stackKind()); - appendOptimizedStoreField(new StoreField(frameState.apop(), field, value, stateBefore, graph)); + appendOptimizedStoreField(new StoreField(frameState.apop(), field, value, graph)); } void genGetStatic(int cpi, RiField field) { @@ -642,7 +638,7 @@ frameState.push(constantValue.kind.stackKind(), appendConstant(constantValue)); } else { Value container = genResolveClass(RiType.Representation.StaticFields, holder, field.isResolved(), cpi); - LoadField load = new LoadField(container, field, null, graph); + LoadField load = new LoadField(container, field, graph); appendOptimizedLoadField(field.kind(), load); } } @@ -651,7 +647,7 @@ RiType holder = field.holder(); Value container = genResolveClass(RiType.Representation.StaticFields, holder, field.isResolved(), cpi); Value value = frameState.pop(field.kind().stackKind()); - StoreField store = new StoreField(container, field, value, null, graph); + StoreField store = new StoreField(container, field, value, graph); appendOptimizedStoreField(store); } @@ -660,7 +656,7 @@ if (initialized) { holderInstr = appendConstant(holder.getEncoding(representation)); } else { - holderInstr = append(new ResolveClass(holder, representation, null, graph)); + holderInstr = append(new ResolveClass(holder, representation, graph)); } return holderInstr; } @@ -703,30 +699,25 @@ // of initialization is required), it can be commoned with static field accesses. genResolveClass(RiType.Representation.StaticFields, holder, isInitialized, cpi); } - - FrameState stateBefore = frameState.create(bci()); Value[] args = frameState.popArguments(target.signature().argumentSlots(false)); - appendInvoke(INVOKESTATIC, target, args, cpi, constantPool, stateBefore); + appendInvoke(INVOKESTATIC, target, args, cpi, constantPool); } void genInvokeInterface(RiMethod target, int cpi, RiConstantPool constantPool) { - FrameState stateBefore = frameState.create(bci()); Value[] args = frameState.popArguments(target.signature().argumentSlots(true)); - genInvokeIndirect(INVOKEINTERFACE, target, args, cpi, constantPool, stateBefore); + genInvokeIndirect(INVOKEINTERFACE, target, args, cpi, constantPool); } void genInvokeVirtual(RiMethod target, int cpi, RiConstantPool constantPool) { - FrameState stateBefore = frameState.create(bci()); Value[] args = frameState.popArguments(target.signature().argumentSlots(true)); - genInvokeIndirect(INVOKEVIRTUAL, target, args, cpi, constantPool, stateBefore); + genInvokeIndirect(INVOKEVIRTUAL, target, args, cpi, constantPool); } void genInvokeSpecial(RiMethod target, RiType knownHolder, int cpi, RiConstantPool constantPool) { - FrameState stateBefore = frameState.create(bci()); Value[] args = frameState.popArguments(target.signature().argumentSlots(true)); - invokeDirect(target, args, knownHolder, cpi, constantPool, stateBefore); + invokeDirect(target, args, knownHolder, cpi, constantPool); } @@ -762,7 +753,7 @@ return target; } - private void genInvokeIndirect(int opcode, RiMethod target, Value[] args, int cpi, RiConstantPool constantPool, FrameState stateBefore) { + private void genInvokeIndirect(int opcode, RiMethod target, Value[] args, int cpi, RiConstantPool constantPool) { Value receiver = args[0]; // attempt to devirtualize the call if (target.isResolved()) { @@ -771,14 +762,14 @@ // 0. check for trivial cases if (target.canBeStaticallyBound() && !isAbstract(target.accessFlags())) { // check for trivial cases (e.g. final methods, nonvirtual methods) - invokeDirect(target, args, target.holder(), cpi, constantPool, stateBefore); + invokeDirect(target, args, target.holder(), cpi, constantPool); return; } // 1. check if the exact type of the receiver can be determined RiType exact = getExactType(klass, receiver); if (exact != null && exact.isResolved()) { // either the holder class is exact, or the receiver object has an exact type - invokeDirect(exact.resolveMethodImpl(target), args, exact, cpi, constantPool, stateBefore); + invokeDirect(exact.resolveMethodImpl(target), args, exact, cpi, constantPool); return; } // 2. check if an assumed leaf method can be found @@ -787,7 +778,7 @@ if (C1XOptions.PrintAssumptions) { TTY.println("Optimistic invoke direct because of leaf method to " + leaf); } - invokeDirect(leaf, args, null, cpi, constantPool, stateBefore); + invokeDirect(leaf, args, null, cpi, constantPool); return; } else if (C1XOptions.PrintAssumptions) { TTY.println("Could not make leaf method assumption for target=" + target + " leaf=" + leaf + " receiver.declaredType=" + receiver.declaredType()); @@ -800,27 +791,27 @@ TTY.println("Optimistic invoke direct because of leaf type to " + targetMethod); } // either the holder class is exact, or the receiver object has an exact type - invokeDirect(targetMethod, args, exact, cpi, constantPool, stateBefore); + invokeDirect(targetMethod, args, exact, cpi, constantPool); return; } else if (C1XOptions.PrintAssumptions) { TTY.println("Could not make leaf type assumption for type " + klass); } } // devirtualization failed, produce an actual invokevirtual - appendInvoke(opcode, target, args, cpi, constantPool, stateBefore); + appendInvoke(opcode, target, args, cpi, constantPool); } private CiKind returnKind(RiMethod target) { return target.signature().returnKind(); } - private void invokeDirect(RiMethod target, Value[] args, RiType knownHolder, int cpi, RiConstantPool constantPool, FrameState stateBefore) { - appendInvoke(INVOKESPECIAL, target, args, cpi, constantPool, stateBefore); + private void invokeDirect(RiMethod target, Value[] args, RiType knownHolder, int cpi, RiConstantPool constantPool) { + appendInvoke(INVOKESPECIAL, target, args, cpi, constantPool); } - private void appendInvoke(int opcode, RiMethod target, Value[] args, int cpi, RiConstantPool constantPool, FrameState stateBefore) { + private void appendInvoke(int opcode, RiMethod target, Value[] args, int cpi, RiConstantPool constantPool) { CiKind resultType = returnKind(target); - Value result = append(new Invoke(opcode, resultType.stackKind(), args, target, target.signature().returnType(compilation.method.holder()), stateBefore, graph)); + Value result = append(new Invoke(opcode, resultType.stackKind(), args, target, target.signature().returnType(compilation.method.holder()), graph)); frameState.pushReturn(resultType, result); } @@ -920,7 +911,7 @@ if (needsCheck) { // append a call to the finalizer registration - append(new RegisterFinalizer(frameState.loadLocal(0), frameState.create(bci()), graph)); + append(new RegisterFinalizer(frameState.loadLocal(0), graph)); C1XMetrics.InlinedFinalizerChecks++; } } @@ -932,7 +923,6 @@ frameState.clearStack(); if (Modifier.isSynchronized(method().accessFlags())) { - FrameState stateBefore = frameState.create(bci()); // unlock before exiting the method int lockNumber = frameState.locksSize() - 1; MonitorAddress lockAddress = null; @@ -940,7 +930,7 @@ lockAddress = new MonitorAddress(lockNumber, graph); append(lockAddress); } - append(new MonitorExit(rootMethodSynchronizedObject, lockAddress, lockNumber, stateBefore, graph)); + append(new MonitorExit(rootMethodSynchronizedObject, lockAddress, lockNumber, graph)); frameState.unlock(); } append(new Return(x, !noSafepoints(), graph)); @@ -961,7 +951,7 @@ append(lockAddress); } frameState.push(CiKind.Object, x); - MonitorEnter monitorEnter = new MonitorEnter(x, lockAddress, lockNumber, frameState.create(bci()), graph); + MonitorEnter monitorEnter = new MonitorEnter(x, lockAddress, lockNumber, graph); frameState.apop(); appendWithoutOptimization(monitorEnter, bci); frameState.lock(ir, x, lockNumber + 1); @@ -979,7 +969,7 @@ lockAddress = new MonitorAddress(lockNumber, graph); append(lockAddress); } - appendWithoutOptimization(new MonitorExit(x, lockAddress, lockNumber, null, graph), bci); + appendWithoutOptimization(new MonitorExit(x, lockAddress, lockNumber, graph), bci); frameState.unlock(); killMemoryMap(); // prevent any optimizations across synchronization } @@ -1091,13 +1081,6 @@ assert x.next() == null : "instruction should not have been appended yet"; assert lastInstr.next() == null : "cannot append instruction to instruction which isn't end (" + lastInstr + "->" + lastInstr.next() + ")"; - if (lastInstr instanceof StateSplit) { - StateSplit stateSplit = (StateSplit) lastInstr; - if (stateSplit.stateAfter() == null) { - stateSplit.setStateAfter(frameState.create(bci)); - } - } - if (lastInstr instanceof Base) { assert false : "may only happen when inlining intrinsics"; } else { @@ -1245,6 +1228,12 @@ end = (BlockEnd) lastInstr; break; } + if (lastInstr instanceof StateSplit) { + StateSplit stateSplit = (StateSplit) lastInstr; + if (stateSplit.stateAfter() == null && stateSplit.needsStateAfter()) { + stateSplit.setStateAfter(frameState.create(bci)); + } + } stream.next(); bci = stream.currentBCI(); blockStart = false; @@ -1519,8 +1508,7 @@ } private void genArrayLength() { - FrameState stateBefore = frameState.create(bci()); - frameState.ipush(append(new ArrayLength(frameState.apop(), stateBefore, graph))); + frameState.ipush(append(new ArrayLength(frameState.apop(), graph))); } void killMemoryMap() { diff -r 6d843cdd0bed -r 8741e469f674 graal/GraalCompiler/src/com/sun/c1x/ir/AccessArray.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/AccessArray.java Tue May 10 16:31:28 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/AccessArray.java Tue May 10 16:57:28 2011 +0200 @@ -23,7 +23,6 @@ package com.sun.c1x.ir; import com.oracle.graal.graph.*; -import com.sun.c1x.value.*; import com.sun.cri.ci.*; /** @@ -66,8 +65,8 @@ * @param successorCount * @param graph */ - public AccessArray(CiKind kind, Value array, FrameState stateAfter, int inputCount, int successorCount, Graph graph) { - super(kind, stateAfter, inputCount + INPUT_COUNT, successorCount + SUCCESSOR_COUNT, graph); + public AccessArray(CiKind kind, Value array, int inputCount, int successorCount, Graph graph) { + super(kind, inputCount + INPUT_COUNT, successorCount + SUCCESSOR_COUNT, graph); setArray(array); } diff -r 6d843cdd0bed -r 8741e469f674 graal/GraalCompiler/src/com/sun/c1x/ir/AccessField.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/AccessField.java Tue May 10 16:31:28 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/AccessField.java Tue May 10 16:57:28 2011 +0200 @@ -25,7 +25,6 @@ import java.lang.reflect.*; import com.oracle.graal.graph.*; -import com.sun.c1x.value.*; import com.sun.cri.ci.*; import com.sun.cri.ri.*; @@ -72,8 +71,8 @@ * @param successorCount * @param graph */ - public AccessField(CiKind kind, Value object, RiField field, FrameState stateAfter, int inputCount, int successorCount, Graph graph) { - super(kind, stateAfter, inputCount + INPUT_COUNT, successorCount + SUCCESSOR_COUNT, graph); + public AccessField(CiKind kind, Value object, RiField field, int inputCount, int successorCount, Graph graph) { + super(kind, inputCount + INPUT_COUNT, successorCount + SUCCESSOR_COUNT, graph); assert object != null : "every field access must reference some object"; this.field = field; setObject(object); diff -r 6d843cdd0bed -r 8741e469f674 graal/GraalCompiler/src/com/sun/c1x/ir/AccessIndexed.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/AccessIndexed.java Tue May 10 16:31:28 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/AccessIndexed.java Tue May 10 16:57:28 2011 +0200 @@ -23,7 +23,6 @@ package com.sun.c1x.ir; import com.oracle.graal.graph.*; -import com.sun.c1x.value.*; import com.sun.cri.ci.*; /** @@ -86,8 +85,8 @@ * @param successorCount * @param graph */ - AccessIndexed(CiKind kind, Value array, Value index, Value length, CiKind elementType, FrameState stateAfter, int inputCount, int successorCount, Graph graph) { - super(kind, array, stateAfter, inputCount + INPUT_COUNT, successorCount + SUCCESSOR_COUNT, graph); + AccessIndexed(CiKind kind, Value array, Value index, Value length, CiKind elementType, int inputCount, int successorCount, Graph graph) { + super(kind, array, inputCount + INPUT_COUNT, successorCount + SUCCESSOR_COUNT, graph); setIndex(index); setLength(length); this.elementType = elementType; diff -r 6d843cdd0bed -r 8741e469f674 graal/GraalCompiler/src/com/sun/c1x/ir/AccessMonitor.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/AccessMonitor.java Tue May 10 16:31:28 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/AccessMonitor.java Tue May 10 16:57:28 2011 +0200 @@ -23,7 +23,6 @@ package com.sun.c1x.ir; import com.oracle.graal.graph.*; -import com.sun.c1x.value.*; import com.sun.cri.ci.*; /** @@ -85,8 +84,8 @@ * @param successorCount * @param graph */ - public AccessMonitor(Value object, Value lockAddress, FrameState stateAfter, int lockNumber, int inputCount, int successorCount, Graph graph) { - super(CiKind.Illegal, stateAfter, inputCount + INPUT_COUNT, successorCount + SUCCESSOR_COUNT, graph); + public AccessMonitor(Value object, Value lockAddress, int lockNumber, int inputCount, int successorCount, Graph graph) { + super(CiKind.Illegal, inputCount + INPUT_COUNT, successorCount + SUCCESSOR_COUNT, graph); this.lockNumber = lockNumber; setObject(object); setLockAddress(lockAddress); diff -r 6d843cdd0bed -r 8741e469f674 graal/GraalCompiler/src/com/sun/c1x/ir/ArrayLength.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/ArrayLength.java Tue May 10 16:31:28 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/ArrayLength.java Tue May 10 16:57:28 2011 +0200 @@ -25,7 +25,6 @@ import com.oracle.graal.graph.*; import com.sun.c1x.debug.*; import com.sun.c1x.util.*; -import com.sun.c1x.value.*; import com.sun.cri.bytecode.*; import com.sun.cri.ci.*; @@ -44,8 +43,8 @@ * @param array the instruction producing the array * @param newFrameState the state after executing this instruction */ - public ArrayLength(Value array, FrameState stateAfter, Graph graph) { - super(CiKind.Int, array, stateAfter, INPUT_COUNT, SUCCESSOR_COUNT, graph); + public ArrayLength(Value array, Graph graph) { + super(CiKind.Int, array, INPUT_COUNT, SUCCESSOR_COUNT, graph); } @Override diff -r 6d843cdd0bed -r 8741e469f674 graal/GraalCompiler/src/com/sun/c1x/ir/Invoke.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/Invoke.java Tue May 10 16:31:28 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/Invoke.java Tue May 10 16:57:28 2011 +0200 @@ -25,7 +25,6 @@ import com.oracle.graal.graph.*; import com.sun.c1x.debug.*; import com.sun.c1x.util.*; -import com.sun.c1x.value.*; import com.sun.cri.bytecode.*; import com.sun.cri.ci.*; import com.sun.cri.ri.*; @@ -80,8 +79,8 @@ * @param target the target method being called * @param stateBefore the state before executing the invocation */ - public Invoke(int opcode, CiKind result, Value[] args, RiMethod target, RiType returnType, FrameState stateAfter, Graph graph) { - super(result, stateAfter, args.length, SUCCESSOR_COUNT, graph); + public Invoke(int opcode, CiKind result, Value[] args, RiMethod target, RiType returnType, Graph graph) { + super(result, args.length, SUCCESSOR_COUNT, graph); this.opcode = opcode; this.target = target; this.returnType = returnType; diff -r 6d843cdd0bed -r 8741e469f674 graal/GraalCompiler/src/com/sun/c1x/ir/LoadField.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/LoadField.java Tue May 10 16:31:28 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/LoadField.java Tue May 10 16:57:28 2011 +0200 @@ -24,7 +24,6 @@ import com.oracle.graal.graph.*; import com.sun.c1x.debug.*; -import com.sun.c1x.value.*; import com.sun.cri.ci.*; import com.sun.cri.ri.*; @@ -45,8 +44,8 @@ * @param graph * @param isLoaded indicates if the class is loaded */ - public LoadField(Value object, RiField field, FrameState stateAfter, Graph graph) { - super(field.kind().stackKind(), object, field, stateAfter, INPUT_COUNT, SUCCESSOR_COUNT, graph); + public LoadField(Value object, RiField field, Graph graph) { + super(field.kind().stackKind(), object, field, INPUT_COUNT, SUCCESSOR_COUNT, graph); } /** @@ -102,4 +101,9 @@ print(CiUtil.format("%h.%n:%t", field, false)). print("]"); } + + @Override + public boolean needsStateAfter() { + return this.isVolatile(); + } } diff -r 6d843cdd0bed -r 8741e469f674 graal/GraalCompiler/src/com/sun/c1x/ir/LoadIndexed.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/LoadIndexed.java Tue May 10 16:31:28 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/LoadIndexed.java Tue May 10 16:57:28 2011 +0200 @@ -24,7 +24,6 @@ import com.oracle.graal.graph.*; import com.sun.c1x.debug.*; -import com.sun.c1x.value.*; import com.sun.cri.ci.*; import com.sun.cri.ri.*; @@ -45,8 +44,8 @@ * @param stateAfter the after before executing this instruction * @param graph */ - public LoadIndexed(Value array, Value index, Value length, CiKind elementType, FrameState stateAfter, Graph graph) { - super(elementType.stackKind(), array, index, length, elementType, stateAfter, INPUT_COUNT, SUCCESSOR_COUNT, graph); + public LoadIndexed(Value array, Value index, Value length, CiKind elementType, Graph graph) { + super(elementType.stackKind(), array, index, length, elementType, INPUT_COUNT, SUCCESSOR_COUNT, graph); } /** diff -r 6d843cdd0bed -r 8741e469f674 graal/GraalCompiler/src/com/sun/c1x/ir/MonitorEnter.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/MonitorEnter.java Tue May 10 16:31:28 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/MonitorEnter.java Tue May 10 16:57:28 2011 +0200 @@ -24,7 +24,6 @@ import com.oracle.graal.graph.*; import com.sun.c1x.debug.*; -import com.sun.c1x.value.*; /** * The {@code MonitorEnter} instruction represents the acquisition of a monitor. @@ -49,8 +48,8 @@ * @param stateAfter the state after * @param graph */ - public MonitorEnter(Value object, Value lockAddress, int lockNumber, FrameState stateAfter, Graph graph) { - super(object, lockAddress, stateAfter, lockNumber, INPUT_COUNT, SUCCESSOR_COUNT, graph); + public MonitorEnter(Value object, Value lockAddress, int lockNumber, Graph graph) { + super(object, lockAddress, lockNumber, INPUT_COUNT, SUCCESSOR_COUNT, graph); } @Override diff -r 6d843cdd0bed -r 8741e469f674 graal/GraalCompiler/src/com/sun/c1x/ir/MonitorExit.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/MonitorExit.java Tue May 10 16:31:28 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/MonitorExit.java Tue May 10 16:57:28 2011 +0200 @@ -24,7 +24,6 @@ import com.oracle.graal.graph.*; import com.sun.c1x.debug.*; -import com.sun.c1x.value.*; /** * The {@code MonitorExit} instruction represents a monitor release. @@ -43,8 +42,8 @@ * @param stateBefore the state after executing this instruction * @param graph */ - public MonitorExit(Value object, Value lockAddress, int lockNumber, FrameState stateAfter, Graph graph) { - super(object, lockAddress, stateAfter, lockNumber, INPUT_COUNT, SUCCESSOR_COUNT, graph); + public MonitorExit(Value object, Value lockAddress, int lockNumber, Graph graph) { + super(object, lockAddress, lockNumber, INPUT_COUNT, SUCCESSOR_COUNT, graph); } @Override diff -r 6d843cdd0bed -r 8741e469f674 graal/GraalCompiler/src/com/sun/c1x/ir/RegisterFinalizer.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/RegisterFinalizer.java Tue May 10 16:31:28 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/RegisterFinalizer.java Tue May 10 16:57:28 2011 +0200 @@ -24,7 +24,6 @@ import com.oracle.graal.graph.*; import com.sun.c1x.debug.*; -import com.sun.c1x.value.*; import com.sun.cri.ci.*; /** @@ -58,8 +57,8 @@ return (Value) inputs().set(super.inputCount() + INPUT_OBJECT, n); } - public RegisterFinalizer(Value object, FrameState stateAfter, Graph graph) { - super(CiKind.Void, stateAfter, INPUT_COUNT, SUCCESSOR_COUNT, graph); + public RegisterFinalizer(Value object, Graph graph) { + super(CiKind.Void, INPUT_COUNT, SUCCESSOR_COUNT, graph); setObject(object); } diff -r 6d843cdd0bed -r 8741e469f674 graal/GraalCompiler/src/com/sun/c1x/ir/ResolveClass.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/ResolveClass.java Tue May 10 16:31:28 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/ResolveClass.java Tue May 10 16:57:28 2011 +0200 @@ -24,7 +24,6 @@ import com.oracle.graal.graph.*; import com.sun.c1x.debug.*; -import com.sun.c1x.value.*; import com.sun.cri.ci.*; import com.sun.cri.ri.*; @@ -40,8 +39,8 @@ public final RiType type; public final RiType.Representation portion; - public ResolveClass(RiType type, RiType.Representation r, FrameState stateAfter, Graph graph) { - super(type.getRepresentationKind(r), stateAfter, INPUT_COUNT, SUCCESSOR_COUNT, graph); + public ResolveClass(RiType type, RiType.Representation r, Graph graph) { + super(type.getRepresentationKind(r), INPUT_COUNT, SUCCESSOR_COUNT, graph); this.portion = r; this.type = type; setFlag(Flag.NonNull); diff -r 6d843cdd0bed -r 8741e469f674 graal/GraalCompiler/src/com/sun/c1x/ir/StateSplit.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/StateSplit.java Tue May 10 16:31:28 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/StateSplit.java Tue May 10 16:57:28 2011 +0200 @@ -66,9 +66,8 @@ * @param successorCount * @param graph */ - public StateSplit(CiKind kind, FrameState stateAfter, int inputCount, int successorCount, Graph graph) { + public StateSplit(CiKind kind, int inputCount, int successorCount, Graph graph) { super(kind, inputCount + INPUT_COUNT, successorCount + SUCCESSOR_COUNT, graph); - this.setStateAfter(stateAfter); } @Override @@ -76,4 +75,7 @@ return true; } + public boolean needsStateAfter() { + return true; + } } diff -r 6d843cdd0bed -r 8741e469f674 graal/GraalCompiler/src/com/sun/c1x/ir/StoreField.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/StoreField.java Tue May 10 16:31:28 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/StoreField.java Tue May 10 16:57:28 2011 +0200 @@ -24,7 +24,6 @@ import com.oracle.graal.graph.*; import com.sun.c1x.debug.*; -import com.sun.c1x.value.*; import com.sun.cri.ci.*; import com.sun.cri.ri.*; @@ -67,8 +66,8 @@ * @param stateAfter the state after the field access * @param graph */ - public StoreField(Value object, RiField field, Value value, FrameState stateAfter, Graph graph) { - super(CiKind.Void, object, field, stateAfter, INPUT_COUNT, SUCCESSOR_COUNT, graph); + public StoreField(Value object, RiField field, Value value, Graph graph) { + super(CiKind.Void, object, field, INPUT_COUNT, SUCCESSOR_COUNT, graph); setValue(value); } diff -r 6d843cdd0bed -r 8741e469f674 graal/GraalCompiler/src/com/sun/c1x/ir/StoreIndexed.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/StoreIndexed.java Tue May 10 16:31:28 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/StoreIndexed.java Tue May 10 16:57:28 2011 +0200 @@ -24,7 +24,6 @@ import com.oracle.graal.graph.*; import com.sun.c1x.debug.*; -import com.sun.c1x.value.*; import com.sun.cri.ci.*; /** @@ -68,8 +67,8 @@ * @param stateAfter the state after executing this instruction * @param graph */ - public StoreIndexed(Value array, Value index, Value length, CiKind elementType, Value value, FrameState stateAfter, Graph graph) { - super(CiKind.Void, array, index, length, elementType, stateAfter, INPUT_COUNT, SUCCESSOR_COUNT, graph); + public StoreIndexed(Value array, Value index, Value length, CiKind elementType, Value value, Graph graph) { + super(CiKind.Void, array, index, length, elementType, INPUT_COUNT, SUCCESSOR_COUNT, graph); setValue(value); }