# HG changeset patch # User Roland Schatz # Date 1366882794 -7200 # Node ID 90ca451a2f289186f63cb0cc31dd92e3ac07466c # Parent cadb3702cb8f1a8fdc45f752462d77f802738e5c Make LIRGeneratorTool an interface. diff -r cadb3702cb8f -r 90ca451a2f28 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 Wed Apr 24 21:50:26 2013 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Thu Apr 25 11:39:54 2013 +0200 @@ -52,7 +52,7 @@ /** * This class traverses the HIR instructions and generates LIR instructions from them. */ -public abstract class LIRGenerator extends LIRGeneratorTool { +public abstract class LIRGenerator implements LIRGeneratorTool { public final FrameMap frameMap; public final NodeMap nodeOperands; @@ -826,6 +826,10 @@ return frameMap; } + @Override + public void beforeRegisterAllocation() { + } + public abstract void emitBitCount(Variable result, Value operand); public abstract void emitBitScanForward(Variable result, Value operand); diff -r cadb3702cb8f -r 90ca451a2f28 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 Wed Apr 24 21:50:26 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRGeneratorTool.java Thu Apr 25 11:39:54 2013 +0200 @@ -29,11 +29,11 @@ import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; -public abstract class LIRGeneratorTool { +public interface LIRGeneratorTool { - public abstract TargetDescription target(); + TargetDescription target(); - public abstract CodeCacheProvider getRuntime(); + CodeCacheProvider getRuntime(); /** * Checks whether the supplied constant can be used without loading it into a register for most @@ -43,100 +43,99 @@ * @return True if the constant can be used directly, false if the constant needs to be in a * register. */ - public abstract boolean canInlineConstant(Constant c); + boolean canInlineConstant(Constant c); - public abstract RegisterAttributes attributes(Register register); + RegisterAttributes attributes(Register register); - public abstract Value operand(ValueNode object); + Value operand(ValueNode object); - public abstract AllocatableValue newVariable(Kind kind); + AllocatableValue newVariable(Kind kind); - public abstract Value setResult(ValueNode x, Value operand); + Value setResult(ValueNode x, Value operand); - public abstract Value emitMove(Value input); + Value emitMove(Value input); - public abstract void emitMove(Value dst, Value src); + void emitMove(Value dst, Value src); - public abstract Value emitLoad(Kind kind, Value base, long displacement, Value index, int scale, DeoptimizingNode deopting); + Value emitLoad(Kind kind, Value base, long displacement, Value index, int scale, DeoptimizingNode deopting); - public abstract void emitStore(Kind kind, Value base, long displacement, Value index, int scale, Value input, DeoptimizingNode deopting); + void emitStore(Kind kind, Value base, long displacement, Value index, int scale, Value input, DeoptimizingNode deopting); - public abstract Value emitLea(Value base, long displacement, Value index, int scale); + Value emitLea(Value base, long displacement, Value index, int scale); - public abstract Value emitLea(StackSlot slot); + Value emitLea(StackSlot slot); - public abstract Value emitNegate(Value input); + Value emitNegate(Value input); - public abstract Value emitAdd(Value a, Value b); + Value emitAdd(Value a, Value b); - public abstract Value emitSub(Value a, Value b); + Value emitSub(Value a, Value b); - public abstract Value emitMul(Value a, Value b); + Value emitMul(Value a, Value b); - public abstract Value emitDiv(Value a, Value b, DeoptimizingNode deopting); + Value emitDiv(Value a, Value b, DeoptimizingNode deopting); - public abstract Value emitRem(Value a, Value b, DeoptimizingNode deopting); + Value emitRem(Value a, Value b, DeoptimizingNode deopting); - public abstract Value emitUDiv(Value a, Value b, DeoptimizingNode deopting); + Value emitUDiv(Value a, Value b, DeoptimizingNode deopting); - public abstract Value emitURem(Value a, Value b, DeoptimizingNode deopting); + Value emitURem(Value a, Value b, DeoptimizingNode deopting); - public abstract Value emitAnd(Value a, Value b); + Value emitAnd(Value a, Value b); - public abstract Value emitOr(Value a, Value b); + Value emitOr(Value a, Value b); - public abstract Value emitXor(Value a, Value b); + Value emitXor(Value a, Value b); - public abstract Value emitShl(Value a, Value b); + Value emitShl(Value a, Value b); - public abstract Value emitShr(Value a, Value b); + Value emitShr(Value a, Value b); - public abstract Value emitUShr(Value a, Value b); + Value emitUShr(Value a, Value b); - public abstract Value emitConvert(ConvertNode.Op opcode, Value inputVal); + Value emitConvert(ConvertNode.Op opcode, Value inputVal); - public abstract void emitMembar(int barriers); + void emitMembar(int barriers); - public abstract void emitDeoptimize(DeoptimizationAction action, DeoptimizingNode deopting); + void emitDeoptimize(DeoptimizationAction action, DeoptimizingNode deopting); - public abstract void emitNullCheck(ValueNode v, DeoptimizingNode deopting); + void emitNullCheck(ValueNode v, DeoptimizingNode deopting); - public abstract Value emitCall(RuntimeCallTarget callTarget, CallingConvention cc, DeoptimizingNode info, Value... args); + Value emitCall(RuntimeCallTarget callTarget, CallingConvention cc, DeoptimizingNode info, Value... args); - public abstract void emitIf(IfNode i); + void emitIf(IfNode i); - public abstract void emitConditional(ConditionalNode i); + void emitConditional(ConditionalNode i); - public abstract void emitSwitch(SwitchNode i); + void emitSwitch(SwitchNode i); - public abstract void emitInvoke(Invoke i); + void emitInvoke(Invoke i); - public abstract void visitRuntimeCall(RuntimeCallNode i); + void visitRuntimeCall(RuntimeCallNode i); // Handling of block-end nodes still needs to be unified in the LIRGenerator. - public abstract void visitMerge(MergeNode i); + void visitMerge(MergeNode i); - public abstract void visitEndNode(EndNode i); + void visitEndNode(EndNode i); - public abstract void visitLoopEnd(LoopEndNode i); + void visitLoopEnd(LoopEndNode i); - public abstract void visitCompareAndSwap(CompareAndSwapNode i); + void visitCompareAndSwap(CompareAndSwapNode i); // These methods define the contract a runtime specific backend must provide. - public abstract void visitReturn(ReturnNode i); + void visitReturn(ReturnNode i); - public abstract void visitSafepointNode(SafepointNode i); + void visitSafepointNode(SafepointNode i); - public abstract void visitBreakpointNode(BreakpointNode i); + void visitBreakpointNode(BreakpointNode i); - public abstract void emitUnwind(Value operand); + void emitUnwind(Value operand); /** * Called just before register allocation is performed on the LIR owned by this generator. */ - public void beforeRegisterAllocation() { - } + void beforeRegisterAllocation(); - public abstract void visitInfopointNode(InfopointNode i); + void visitInfopointNode(InfopointNode i); }