Mercurial > hg > graal-jvmci-8
changeset 14057:38c881305352
Move functionality of SpillMoveFactory to FrameMap.
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Mon Feb 24 17:31:15 2014 -0800 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Tue Feb 25 17:51:03 2014 +0100 @@ -79,17 +79,8 @@ private static final RegisterValue RDX_L = AMD64.rdx.asValue(Kind.Long); private static final RegisterValue RCX_I = AMD64.rcx.asValue(Kind.Int); - private class AMD64SpillMoveFactory implements LIR.SpillMoveFactory { - - @Override - public LIRInstruction createMove(AllocatableValue result, Value input) { - return AMD64LIRGenerator.this.createMove(result, input); - } - } - public AMD64LIRGenerator(StructuredGraph graph, Providers providers, FrameMap frameMap, CallingConvention cc, LIR lir) { super(graph, providers, frameMap, cc, lir); - lir.spillMoveFactory = new AMD64SpillMoveFactory(); } @Override @@ -138,19 +129,9 @@ return result; } - protected AMD64LIRInstruction createMove(AllocatableValue dst, Value src) { - if (src instanceof AMD64AddressValue) { - return new LeaOp(dst, (AMD64AddressValue) src); - } else if (isRegister(src) || isStackSlot(dst)) { - return new MoveFromRegOp(dst, src); - } else { - return new MoveToRegOp(dst, src); - } - } - @Override public void emitMove(AllocatableValue dst, Value src) { - append(createMove(dst, src)); + append(AMD64Move.createMove(dst, src)); } @Override
--- a/graal/com.oracle.graal.compiler.hsail/src/com/oracle/graal/compiler/hsail/HSAILLIRGenerator.java Mon Feb 24 17:31:15 2014 -0800 +++ b/graal/com.oracle.graal.compiler.hsail/src/com/oracle/graal/compiler/hsail/HSAILLIRGenerator.java Tue Feb 25 17:51:03 2014 +0100 @@ -62,23 +62,8 @@ */ public abstract class HSAILLIRGenerator extends LIRGenerator { - public static class HSAILSpillMoveFactory implements LIR.SpillMoveFactory { - - @Override - public LIRInstruction createMove(AllocatableValue dst, Value src) { - if (src instanceof HSAILAddressValue) { - return new LeaOp(dst, (HSAILAddressValue) src); - } else if (isRegister(src) || isStackSlot(dst)) { - return new MoveFromRegOp(dst, src); - } else { - return new MoveToRegOp(dst, src); - } - } - } - public HSAILLIRGenerator(StructuredGraph graph, Providers providers, FrameMap frameMap, CallingConvention cc, LIR lir) { super(graph, providers, frameMap, cc, lir); - lir.spillMoveFactory = new HSAILSpillMoveFactory(); } @Override
--- a/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java Mon Feb 24 17:31:15 2014 -0800 +++ b/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java Tue Feb 25 17:51:03 2014 +0100 @@ -81,17 +81,8 @@ public static final ForeignCallDescriptor ARITHMETIC_FREM = new ForeignCallDescriptor("arithmeticFrem", float.class, float.class, float.class); public static final ForeignCallDescriptor ARITHMETIC_DREM = new ForeignCallDescriptor("arithmeticDrem", double.class, double.class, double.class); - public static class PTXSpillMoveFactory implements LIR.SpillMoveFactory { - - @Override - public LIRInstruction createMove(AllocatableValue result, Value input) { - throw GraalInternalError.unimplemented("PTXSpillMoveFactory.createMove()"); - } - } - public PTXLIRGenerator(StructuredGraph graph, Providers providers, FrameMap frameMap, CallingConvention cc, LIR lir) { super(graph, providers, frameMap, cc, lir); - lir.spillMoveFactory = new PTXSpillMoveFactory(); int callVariables = cc.getArgumentCount() + (cc.getReturn().equals(Value.ILLEGAL) ? 0 : 1); lir.setFirstVariableNumber(callVariables); nextPredRegNum = 0;
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Mon Feb 24 17:31:15 2014 -0800 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Tue Feb 25 17:51:03 2014 +0100 @@ -70,17 +70,8 @@ */ public abstract class SPARCLIRGenerator extends LIRGenerator { - private class SPARCSpillMoveFactory implements LIR.SpillMoveFactory { - - @Override - public LIRInstruction createMove(AllocatableValue result, Value input) { - return SPARCLIRGenerator.this.createMove(result, input); - } - } - public SPARCLIRGenerator(StructuredGraph graph, Providers providers, FrameMap frameMap, CallingConvention cc, LIR lir) { super(graph, providers, frameMap, cc, lir); - lir.spillMoveFactory = new SPARCSpillMoveFactory(); } @Override @@ -116,19 +107,9 @@ return result; } - protected SPARCLIRInstruction createMove(AllocatableValue dst, Value src) { - if (src instanceof SPARCAddressValue) { - return new LoadAddressOp(dst, (SPARCAddressValue) src); - } else if (isRegister(src) || isStackSlot(dst)) { - return new MoveFromRegOp(dst, src); - } else { - return new MoveToRegOp(dst, src); - } - } - @Override public void emitMove(AllocatableValue dst, Value src) { - append(createMove(dst, src)); + append(SPARCMove.createMove(dst, src)); } @Override
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java Mon Feb 24 17:31:15 2014 -0800 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java Tue Feb 25 17:51:03 2014 +0100 @@ -563,7 +563,7 @@ assert isRegister(fromLocation) : "from operand must be a register but is: " + fromLocation + " toLocation=" + toLocation + " spillState=" + interval.spillState(); assert isStackSlot(toLocation) : "to operand must be a stack slot"; - insertionBuffer.append(j + 1, ir.spillMoveFactory.createMove(toLocation, fromLocation)); + insertionBuffer.append(j + 1, frameMap.createSpillMove(toLocation, fromLocation)); Debug.log("inserting move after definition of interval %d to stack slot %s at opId %d", interval.operandNumber, interval.spillSlot(), opId); }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/MoveResolver.java Mon Feb 24 17:31:15 2014 -0800 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/MoveResolver.java Tue Feb 25 17:51:03 2014 +0100 @@ -202,7 +202,7 @@ AllocatableValue fromOpr = fromInterval.operand; AllocatableValue toOpr = toInterval.operand; - insertionBuffer.append(insertIdx, allocator.ir.spillMoveFactory.createMove(toOpr, fromOpr)); + insertionBuffer.append(insertIdx, allocator.frameMap.createSpillMove(toOpr, fromOpr)); Debug.log("insert move from %s to %s at %d", fromInterval, toInterval, insertIdx); } @@ -212,7 +212,7 @@ assert insertIdx != -1 : "must setup insert position first"; AllocatableValue toOpr = toInterval.operand; - insertionBuffer.append(insertIdx, allocator.ir.spillMoveFactory.createMove(toOpr, fromOpr)); + insertionBuffer.append(insertIdx, allocator.frameMap.createSpillMove(toOpr, fromOpr)); Debug.log("insert move from value %s to %s at %d", fromOpr, toInterval, insertIdx); }
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64FrameMap.java Mon Feb 24 17:31:15 2014 -0800 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64FrameMap.java Tue Feb 25 17:51:03 2014 +0100 @@ -101,4 +101,9 @@ protected StackSlot allocateNewSpillSlot(PlatformKind kind, int additionalOffset) { return StackSlot.get(kind, -spillSize + additionalOffset, true); } + + @Override + public LIRInstruction createSpillMove(AllocatableValue result, Value input) { + return AMD64Move.createMove(result, input); + } }
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Move.java Mon Feb 24 17:31:15 2014 -0800 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Move.java Tue Feb 25 17:51:03 2014 +0100 @@ -41,6 +41,16 @@ public class AMD64Move { + public static AMD64LIRInstruction createMove(AllocatableValue dst, Value src) { + if (src instanceof AMD64AddressValue) { + return new LeaOp(dst, (AMD64AddressValue) src); + } else if (isRegister(src) || isStackSlot(dst)) { + return new MoveFromRegOp(dst, src); + } else { + return new MoveToRegOp(dst, src); + } + } + @Opcode("MOVE") public static class MoveToRegOp extends AMD64LIRInstruction implements MoveOp {
--- a/graal/com.oracle.graal.lir.hsail/src/com/oracle/graal/lir/hsail/HSAILFrameMap.java Mon Feb 24 17:31:15 2014 -0800 +++ b/graal/com.oracle.graal.lir.hsail/src/com/oracle/graal/lir/hsail/HSAILFrameMap.java Tue Feb 25 17:51:03 2014 +0100 @@ -22,9 +22,12 @@ */ package com.oracle.graal.lir.hsail; +import static com.oracle.graal.api.code.ValueUtil.*; + import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.lir.*; +import com.oracle.graal.lir.hsail.HSAILMove.*; /** * HSAIL specific frame map. @@ -69,4 +72,15 @@ protected StackSlot allocateNewSpillSlot(PlatformKind kind, int additionalOffset) { return StackSlot.get(kind, -spillSize + additionalOffset, true); } + + @Override + public LIRInstruction createSpillMove(AllocatableValue dst, Value src) { + if (src instanceof HSAILAddressValue) { + return new LeaOp(dst, (HSAILAddressValue) src); + } else if (isRegister(src) || isStackSlot(dst)) { + return new MoveFromRegOp(dst, src); + } else { + return new MoveToRegOp(dst, src); + } + } }
--- a/graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXFrameMap.java Mon Feb 24 17:31:15 2014 -0800 +++ b/graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXFrameMap.java Tue Feb 25 17:51:03 2014 +0100 @@ -24,6 +24,7 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.graph.*; import com.oracle.graal.lir.*; /** @@ -69,4 +70,10 @@ protected StackSlot allocateNewSpillSlot(PlatformKind kind, int additionalOffset) { return StackSlot.get(kind, -spillSize + additionalOffset, true); } + + @Override + public LIRInstruction createSpillMove(AllocatableValue result, Value input) { + throw GraalInternalError.shouldNotReachHere("Spill moves should never be necessary for PTX code"); + } + }
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCFrameMap.java Mon Feb 24 17:31:15 2014 -0800 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCFrameMap.java Tue Feb 25 17:51:03 2014 +0100 @@ -101,4 +101,9 @@ protected StackSlot allocateNewSpillSlot(PlatformKind kind, int additionalOffset) { return StackSlot.get(kind, -spillSize + additionalOffset, true); } + + @Override + public LIRInstruction createSpillMove(AllocatableValue result, Value input) { + return SPARCMove.createMove(result, input); + } }
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Mon Feb 24 17:31:15 2014 -0800 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Tue Feb 25 17:51:03 2014 +0100 @@ -39,6 +39,16 @@ public class SPARCMove { + public static SPARCLIRInstruction createMove(AllocatableValue dst, Value src) { + if (src instanceof SPARCAddressValue) { + return new LoadAddressOp(dst, (SPARCAddressValue) src); + } else if (isRegister(src) || isStackSlot(dst)) { + return new MoveFromRegOp(dst, src); + } else { + return new MoveToRegOp(dst, src); + } + } + @Opcode("MOVE") public static class MoveToRegOp extends SPARCLIRInstruction implements MoveOp {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/FrameMap.java Mon Feb 24 17:31:15 2014 -0800 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/FrameMap.java Tue Feb 25 17:51:03 2014 +0100 @@ -382,4 +382,6 @@ } } } + + public abstract LIRInstruction createSpillMove(AllocatableValue result, Value input); }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIR.java Mon Feb 24 17:31:15 2014 -0800 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIR.java Tue Feb 25 17:51:03 2014 +0100 @@ -58,15 +58,8 @@ private int numVariables; - public SpillMoveFactory spillMoveFactory; - public final BlockMap<List<LIRInstruction>> lirInstructions; - public interface SpillMoveFactory { - - LIRInstruction createMove(AllocatableValue result, Value input); - } - private boolean hasArgInCallerFrame; /**