# HG changeset patch # User Roland Schatz # Date 1366899282 -7200 # Node ID 1342574c4f7dbe58236b30701ed4384610cd8222 # Parent 8f46f129d7b69368d78699ecb6348e94b0dce8af Move targets can only be AllocatableValues. diff -r 8f46f129d7b6 -r 1342574c4f7d graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/CallingConvention.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/CallingConvention.java Thu Apr 25 16:14:39 2013 +0200 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/CallingConvention.java Thu Apr 25 16:14:42 2013 +0200 @@ -76,17 +76,17 @@ */ private final int stackSize; - private final Value returnLocation; + private final AllocatableValue returnLocation; /** * The ordered locations in which the arguments are placed. */ - private final Value[] argumentLocations; + private final AllocatableValue[] argumentLocations; /** * The locations used (and killed) by the call in addition to the arguments. */ - private final Value[] temporaryLocations; + private final AllocatableValue[] temporaryLocations; /** * Creates a description of the registers and stack locations used by a call. @@ -97,8 +97,8 @@ * call * @param argumentLocations the ordered locations in which the arguments are placed */ - public CallingConvention(int stackSize, Value returnLocation, Value... argumentLocations) { - this(Value.NONE, stackSize, returnLocation, argumentLocations); + public CallingConvention(int stackSize, AllocatableValue returnLocation, AllocatableValue... argumentLocations) { + this(AllocatableValue.NONE, stackSize, returnLocation, argumentLocations); } /** @@ -112,7 +112,7 @@ * call * @param argumentLocations the ordered locations in which the arguments are placed */ - public CallingConvention(Value[] temporaryLocations, int stackSize, Value returnLocation, Value... argumentLocations) { + public CallingConvention(AllocatableValue[] temporaryLocations, int stackSize, AllocatableValue returnLocation, AllocatableValue... argumentLocations) { assert argumentLocations != null; assert temporaryLocations != null; assert returnLocation != null; @@ -126,14 +126,14 @@ /** * Gets the location for the return value or {@link Value#ILLEGAL} if a void call. */ - public Value getReturn() { + public AllocatableValue getReturn() { return returnLocation; } /** * Gets the location for the {@code index}'th argument. */ - public Value getArgument(int index) { + public AllocatableValue getArgument(int index) { return argumentLocations[index]; } @@ -155,7 +155,7 @@ * Gets the locations used (and killed) by the call apart from the * {@linkplain #getArgument(int) arguments}. */ - public Value[] getTemporaries() { + public AllocatableValue[] getTemporaries() { if (temporaryLocations.length == 0) { return temporaryLocations; } diff -r 8f46f129d7b6 -r 1342574c4f7d graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/AllocatableValue.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/AllocatableValue.java Thu Apr 25 16:14:39 2013 +0200 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/AllocatableValue.java Thu Apr 25 16:14:42 2013 +0200 @@ -30,6 +30,8 @@ private static final long serialVersionUID = 153019506717492133L; + public static final AllocatableValue[] NONE = {}; + public AllocatableValue(Kind kind) { super(kind); } diff -r 8f46f129d7b6 -r 1342574c4f7d graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Value.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Value.java Thu Apr 25 16:14:39 2013 +0200 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Value.java Thu Apr 25 16:14:42 2013 +0200 @@ -32,8 +32,6 @@ private static final long serialVersionUID = -6909397188697766469L; - public static final Value[] NONE = {}; - @SuppressWarnings("serial") public static final AllocatableValue ILLEGAL = new AllocatableValue(Kind.Illegal) { @Override diff -r 8f46f129d7b6 -r 1342574c4f7d 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 Thu Apr 25 16:14:39 2013 +0200 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Thu Apr 25 16:14:42 2013 +0200 @@ -152,7 +152,7 @@ } @Override - public void emitMove(Value dst, Value src) { + public void emitMove(AllocatableValue dst, Value src) { append(createMove(dst, src)); } diff -r 8f46f129d7b6 -r 1342574c4f7d graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java --- a/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java Thu Apr 25 16:14:39 2013 +0200 +++ b/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java Thu Apr 25 16:14:42 2013 +0200 @@ -125,7 +125,7 @@ } @Override - public void emitMove(Value dst, Value src) { + public void emitMove(AllocatableValue dst, Value src) { if (isRegister(src) || isStackSlot(dst)) { append(new MoveFromRegOp(dst, src)); } else { diff -r 8f46f129d7b6 -r 1342574c4f7d graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java --- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Thu Apr 25 16:14:39 2013 +0200 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Thu Apr 25 16:14:42 2013 +0200 @@ -208,7 +208,7 @@ } @Override - public void emitMove(Value dst, Value src) { + public void emitMove(AllocatableValue dst, Value src) { // SPARC: Auto-generated method stub } diff -r 8f46f129d7b6 -r 1342574c4f7d graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Thu Apr 25 16:14:39 2013 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Thu Apr 25 16:14:42 2013 +0200 @@ -251,7 +251,7 @@ * @return the operand representing the ABI defined location used return a value of kind * {@code kind} */ - public Value resultOperandFor(Kind kind) { + public AllocatableValue resultOperandFor(Kind kind) { if (kind == Kind.Void) { return ILLEGAL; } @@ -461,7 +461,7 @@ @Override public void visitReturn(ReturnNode x) { - Value operand = Value.ILLEGAL; + AllocatableValue operand = ILLEGAL; if (x.result() != null) { operand = resultOperandFor(x.result().kind()); emitMove(operand, operand(x.result())); @@ -630,7 +630,7 @@ protected abstract void emitCall(RuntimeCallTarget callTarget, Value result, Value[] arguments, Value[] temps, LIRFrameState info); - protected static Value toStackKind(Value value) { + protected static AllocatableValue toStackKind(AllocatableValue value) { if (value.getKind().getStackKind() != value.getKind()) { // We only have stack-kinds in the LIR, so convert the operand kind for values from the // calling convention. @@ -651,7 +651,7 @@ int j = 0; for (ValueNode arg : arguments) { if (arg != null) { - Value operand = toStackKind(cc.getArgument(j)); + AllocatableValue operand = toStackKind(cc.getArgument(j)); emitMove(operand, operand(arg)); result[j] = operand; j++; @@ -672,7 +672,7 @@ Value[] argLocations = new Value[args.length]; for (int i = 0; i < args.length; i++) { Value arg = args[i]; - Value loc = cc.getArgument(i); + AllocatableValue loc = cc.getArgument(i); emitMove(loc, arg); argLocations[i] = loc; } diff -r 8f46f129d7b6 -r 1342574c4f7d graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/PhiResolver.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/PhiResolver.java Thu Apr 25 16:14:39 2013 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/PhiResolver.java Thu Apr 25 16:14:42 2013 +0200 @@ -22,9 +22,9 @@ */ package com.oracle.graal.compiler.gen; +import static com.oracle.graal.api.code.ValueUtil.*; import static com.oracle.graal.api.meta.Value.*; import static com.oracle.graal.lir.LIRValueUtil.*; -import static com.oracle.graal.api.code.ValueUtil.*; import java.util.*; @@ -187,7 +187,7 @@ private void emitMove(Value dest, Value src) { assert isLegal(src); assert isLegal(dest); - gen.emitMove(dest, src); + gen.emitMove((AllocatableValue) dest, src); } // Traverse assignment graph in depth first order and generate moves in post order diff -r 8f46f129d7b6 -r 1342574c4f7d graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Thu Apr 25 16:14:39 2013 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotLIRGenerator.java Thu Apr 25 16:14:42 2013 +0200 @@ -241,9 +241,9 @@ @Override protected void emitIndirectCall(IndirectCallTargetNode callTarget, Value result, Value[] parameters, Value[] temps, LIRFrameState callState) { - Value metaspaceMethod = AMD64.rbx.asValue(); + AllocatableValue metaspaceMethod = AMD64.rbx.asValue(); emitMove(metaspaceMethod, operand(((HotSpotIndirectCallTargetNode) callTarget).metaspaceMethod())); - Value targetAddress = AMD64.rax.asValue(); + AllocatableValue targetAddress = AMD64.rax.asValue(); emitMove(targetAddress, operand(callTarget.computedAddress())); append(new AMD64IndirectCallOp(callTarget.target(), result, parameters, temps, metaspaceMethod, targetAddress, callState)); } diff -r 8f46f129d7b6 -r 1342574c4f7d graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java Thu Apr 25 16:14:39 2013 +0200 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRegisterConfig.java Thu Apr 25 16:14:42 2013 +0200 @@ -143,7 +143,7 @@ } private CallingConvention callingConvention(Register[] generalParameterRegisters, JavaType returnType, JavaType[] parameterTypes, Type type, TargetDescription target, boolean stackOnly) { - Value[] locations = new Value[parameterTypes.length]; + AllocatableValue[] locations = new AllocatableValue[parameterTypes.length]; int currentGeneral = 0; int currentXMM = 0; @@ -183,7 +183,7 @@ } Kind returnKind = returnType == null ? Kind.Void : returnType.getKind(); - Value returnLocation = returnKind == Kind.Void ? Value.ILLEGAL : getReturnRegister(returnKind).asValue(returnKind); + AllocatableValue returnLocation = returnKind == Kind.Void ? Value.ILLEGAL : getReturnRegister(returnKind).asValue(returnKind); return new CallingConvention(currentStackOffset, returnLocation, locations); } diff -r 8f46f129d7b6 -r 1342574c4f7d graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotRuntimeCallTarget.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotRuntimeCallTarget.java Thu Apr 25 16:14:39 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotRuntimeCallTarget.java Thu Apr 25 16:14:42 2013 +0200 @@ -91,13 +91,13 @@ assert stub != null : "linkage without an address must be a stub"; InstalledCode code = stub.getCode(backend); - Value[] argumentLocations = new Value[cc.getArgumentCount()]; + AllocatableValue[] argumentLocations = new AllocatableValue[cc.getArgumentCount()]; for (int i = 0; i < argumentLocations.length; i++) { argumentLocations[i] = cc.getArgument(i); } Set definedRegisters = stub.getDefinedRegisters(); - Value[] temporaryLocations = new Value[definedRegisters.size()]; + AllocatableValue[] temporaryLocations = new AllocatableValue[definedRegisters.size()]; int i = 0; for (Register reg : definedRegisters) { temporaryLocations[i++] = reg.asValue(); diff -r 8f46f129d7b6 -r 1342574c4f7d 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 Thu Apr 25 16:14:39 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Thu Apr 25 16:14:42 2013 +0200 @@ -47,8 +47,8 @@ import com.oracle.graal.api.code.CodeUtil.RefMapFormatter; import com.oracle.graal.api.code.CompilationResult.Call; import com.oracle.graal.api.code.CompilationResult.DataPatch; +import com.oracle.graal.api.code.CompilationResult.Infopoint; import com.oracle.graal.api.code.CompilationResult.Mark; -import com.oracle.graal.api.code.CompilationResult.Infopoint; import com.oracle.graal.api.code.Register.RegisterFlag; import com.oracle.graal.api.code.RuntimeCallTarget.Descriptor; import com.oracle.graal.api.meta.*; @@ -163,23 +163,23 @@ } } - protected Value ret(Kind kind) { + protected AllocatableValue ret(Kind kind) { if (kind == Kind.Void) { return ILLEGAL; } return globalStubRegConfig.getReturnRegister(kind).asValue(kind); } - protected Value[] javaCallingConvention(Kind... arguments) { + protected AllocatableValue[] javaCallingConvention(Kind... arguments) { return callingConvention(arguments, RuntimeCall); } - protected Value[] nativeCallingConvention(Kind... arguments) { + protected AllocatableValue[] nativeCallingConvention(Kind... arguments) { return callingConvention(arguments, NativeCall); } - private Value[] callingConvention(Kind[] arguments, CallingConvention.Type type) { - Value[] result = new Value[arguments.length]; + private AllocatableValue[] callingConvention(Kind[] arguments, CallingConvention.Type type) { + AllocatableValue[] result = new AllocatableValue[arguments.length]; TargetDescription target = graalRuntime.getTarget(); int currentStackOffset = 0; @@ -285,7 +285,7 @@ * @param ret where the call returns its result * @param args where arguments are passed to the call */ - protected RuntimeCallTarget addStubCall(Descriptor descriptor, Value ret, Value... args) { + protected RuntimeCallTarget addStubCall(Descriptor descriptor, AllocatableValue ret, AllocatableValue... args) { return addRuntimeCall(descriptor, 0L, null, ret, args); } @@ -298,8 +298,8 @@ * @param ret where the call returns its result * @param args where arguments are passed to the call */ - protected RuntimeCallTarget addRuntimeCall(Descriptor descriptor, long address, Register[] tempRegs, Value ret, Value... args) { - Value[] temps = tempRegs == null || tempRegs.length == 0 ? Value.NONE : new Value[tempRegs.length]; + protected RuntimeCallTarget addRuntimeCall(Descriptor descriptor, long address, Register[] tempRegs, AllocatableValue ret, AllocatableValue... args) { + AllocatableValue[] temps = tempRegs == null || tempRegs.length == 0 ? AllocatableValue.NONE : new AllocatableValue[tempRegs.length]; for (int i = 0; i < temps.length; i++) { temps[i] = tempRegs[i].asValue(); } diff -r 8f46f129d7b6 -r 1342574c4f7d graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/GetObjectAddressNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/GetObjectAddressNode.java Thu Apr 25 16:14:39 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/GetObjectAddressNode.java Thu Apr 25 16:14:42 2013 +0200 @@ -46,7 +46,7 @@ @Override public void generate(LIRGeneratorTool gen) { - Value obj = gen.newVariable(gen.target().wordKind); + AllocatableValue obj = gen.newVariable(gen.target().wordKind); gen.emitMove(obj, gen.operand(object)); gen.setResult(this, obj); } diff -r 8f46f129d7b6 -r 1342574c4f7d graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXControlFlow.java --- a/graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXControlFlow.java Thu Apr 25 16:14:39 2013 +0200 +++ b/graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXControlFlow.java Thu Apr 25 16:14:42 2013 +0200 @@ -97,6 +97,7 @@ @SuppressWarnings("unused") public static class CondMoveOp extends PTXLIRInstruction { + @Def({REG, HINT}) protected Value result; @Alive({REG}) protected Value trueValue; @Use({REG, STACK, CONST}) protected Value falseValue; @@ -119,6 +120,7 @@ @SuppressWarnings("unused") public static class FloatCondMoveOp extends PTXLIRInstruction { + @Def({REG}) protected Value result; @Alive({REG}) protected Value trueValue; @Alive({REG}) protected Value falseValue; @@ -142,14 +144,14 @@ } public static class SequentialSwitchOp extends PTXLIRInstruction implements FallThroughOp { + @Use({CONST}) protected Constant[] keyConstants; private final LabelRef[] keyTargets; private LabelRef defaultTarget; @Alive({REG}) protected Value key; @Temp({REG, ILLEGAL}) protected Value scratch; - public SequentialSwitchOp(Constant[] keyConstants, LabelRef[] keyTargets, LabelRef defaultTarget, - Value key, Value scratch) { + public SequentialSwitchOp(Constant[] keyConstants, LabelRef[] keyTargets, LabelRef defaultTarget, Value key, Value scratch) { assert keyConstants.length == keyTargets.length; this.keyConstants = keyConstants; this.keyTargets = keyTargets; @@ -216,14 +218,14 @@ } public static class TableSwitchOp extends PTXLIRInstruction { + private final int lowKey; private final LabelRef defaultTarget; private final LabelRef[] targets; @Alive protected Value index; @Temp protected Value scratch; - public TableSwitchOp(final int lowKey, final LabelRef defaultTarget, final LabelRef[] targets, - Variable index, Variable scratch) { + public TableSwitchOp(final int lowKey, final LabelRef defaultTarget, final LabelRef[] targets, Variable index, Variable scratch) { this.lowKey = lowKey; this.defaultTarget = defaultTarget; this.targets = targets; @@ -238,9 +240,7 @@ } @SuppressWarnings("unused") - private static void tableswitch(TargetMethodAssembler tasm, PTXAssembler masm, int lowKey, - LabelRef defaultTarget, LabelRef[] targets, - Register value, Register scratch) { + private static void tableswitch(TargetMethodAssembler tasm, PTXAssembler masm, int lowKey, LabelRef defaultTarget, LabelRef[] targets, Register value, Register scratch) { Buffer buf = masm.codeBuffer; // Compare index against jump table bounds int highKey = lowKey + targets.length - 1; diff -r 8f46f129d7b6 -r 1342574c4f7d graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java Thu Apr 25 16:14:39 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java Thu Apr 25 16:14:42 2013 +0200 @@ -91,7 +91,7 @@ public void generate(LIRGeneratorTool generator) { if (kind() != object().kind()) { assert generator.target().sizeInBytes(kind()) == generator.target().sizeInBytes(object().kind()) : "unsafe cast cannot be used to change the size of a value"; - Value result = generator.newVariable(kind()); + AllocatableValue result = generator.newVariable(kind()); generator.emitMove(result, generator.operand(object())); generator.setResult(this, result); } else { diff -r 8f46f129d7b6 -r 1342574c4f7d graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRGeneratorTool.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRGeneratorTool.java Thu Apr 25 16:14:39 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRGeneratorTool.java Thu Apr 25 16:14:42 2013 +0200 @@ -53,9 +53,9 @@ Value setResult(ValueNode x, Value operand); - Value emitMove(Value input); + AllocatableValue emitMove(Value input); - void emitMove(Value dst, Value src); + void emitMove(AllocatableValue dst, Value src); Value emitLoad(Kind kind, Value base, long displacement, Value index, int scale, DeoptimizingNode deopting);