# HG changeset patch # User Roland Schatz # Date 1376315754 -7200 # Node ID 2ad1435489d1b0dd74013bb95fc585e72a7d76f1 # Parent 857f22a4f627bd8f91aad803674c92f3cdba92ba Use ArithmeticLIRGenerator in arithmetic nodes. diff -r 857f22a4f627 -r 2ad1435489d1 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 Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Mon Aug 12 15:55:54 2013 +0200 @@ -36,7 +36,6 @@ import com.oracle.graal.asm.amd64.AMD64Address.Scale; import com.oracle.graal.asm.amd64.AMD64Assembler.ConditionFlag; import com.oracle.graal.compiler.gen.*; -import com.oracle.graal.compiler.target.*; import com.oracle.graal.graph.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.StandardOp.JumpOp; @@ -93,15 +92,6 @@ } @Override - protected void emitNode(ValueNode node) { - if (node instanceof LIRGenLowerable) { - ((LIRGenLowerable) node).generate(this); - } else { - super.emitNode(node); - } - } - - @Override public boolean canStoreConstant(Constant c) { // there is no immediate move of 64-bit constants on Intel switch (c.getKind()) { diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.compiler.hsail/src/com/oracle/graal/compiler/hsail/HSAILLIRGenerator.java --- a/graal/com.oracle.graal.compiler.hsail/src/com/oracle/graal/compiler/hsail/HSAILLIRGenerator.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.compiler.hsail/src/com/oracle/graal/compiler/hsail/HSAILLIRGenerator.java Mon Aug 12 15:55:54 2013 +0200 @@ -32,9 +32,9 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.asm.*; import com.oracle.graal.compiler.gen.*; -import com.oracle.graal.compiler.target.*; import com.oracle.graal.debug.*; import com.oracle.graal.graph.*; +import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.StandardOp.JumpOp; import com.oracle.graal.lir.hsail.*; @@ -46,20 +46,19 @@ import com.oracle.graal.lir.hsail.HSAILControlFlow.CondMoveOp; import com.oracle.graal.lir.hsail.HSAILControlFlow.FloatCompareBranchOp; import com.oracle.graal.lir.hsail.HSAILControlFlow.FloatCondMoveOp; -import com.oracle.graal.lir.hsail.HSAILControlFlow.ReturnOp; +import com.oracle.graal.lir.hsail.HSAILControlFlow.ForeignCall1ArgOp; import com.oracle.graal.lir.hsail.HSAILControlFlow.ForeignCallNoArgOp; -import com.oracle.graal.lir.hsail.HSAILControlFlow.ForeignCall1ArgOp; +import com.oracle.graal.lir.hsail.HSAILControlFlow.ReturnOp; import com.oracle.graal.lir.hsail.HSAILMove.LeaOp; +import com.oracle.graal.lir.hsail.HSAILMove.LoadCompressedPointer; import com.oracle.graal.lir.hsail.HSAILMove.LoadOp; import com.oracle.graal.lir.hsail.HSAILMove.MoveFromRegOp; import com.oracle.graal.lir.hsail.HSAILMove.MoveToRegOp; +import com.oracle.graal.lir.hsail.HSAILMove.StoreCompressedPointer; import com.oracle.graal.lir.hsail.HSAILMove.StoreOp; -import com.oracle.graal.lir.hsail.HSAILMove.LoadCompressedPointer; -import com.oracle.graal.lir.hsail.HSAILMove.StoreCompressedPointer; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.java.*; -import com.oracle.graal.hotspot.meta.*; /** * This class implements the HSAIL specific portion of the LIR generator. @@ -90,15 +89,6 @@ } @Override - protected void emitNode(ValueNode node) { - if (node instanceof LIRGenLowerable) { - ((LIRGenLowerable) node).generate(this); - } else { - super.emitNode(node); - } - } - - @Override public boolean canStoreConstant(Constant c) { // Operand b must be in the .reg state space. return false; diff -r 857f22a4f627 -r 2ad1435489d1 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 Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java Mon Aug 12 15:55:54 2013 +0200 @@ -30,24 +30,18 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; -import com.oracle.graal.asm.NumUtil; -import com.oracle.graal.compiler.gen.LIRGenerator; -import com.oracle.graal.compiler.target.LIRGenLowerable; -import com.oracle.graal.graph.GraalInternalError; -import com.oracle.graal.lir.FrameMap; -import com.oracle.graal.lir.LIR; -import com.oracle.graal.lir.LIRFrameState; -import com.oracle.graal.lir.LIRInstruction; -import com.oracle.graal.lir.LIRValueUtil; -import com.oracle.graal.lir.LabelRef; +import com.oracle.graal.asm.*; +import com.oracle.graal.compiler.gen.*; +import com.oracle.graal.graph.*; +import com.oracle.graal.lir.*; import com.oracle.graal.lir.StandardOp.JumpOp; -import com.oracle.graal.lir.Variable; -import com.oracle.graal.lir.ptx.PTXAddressValue; +import com.oracle.graal.lir.ptx.*; import com.oracle.graal.lir.ptx.PTXArithmetic.Op1Stack; import com.oracle.graal.lir.ptx.PTXArithmetic.Op2Reg; import com.oracle.graal.lir.ptx.PTXArithmetic.Op2Stack; import com.oracle.graal.lir.ptx.PTXArithmetic.ShiftOp; -import com.oracle.graal.lir.ptx.PTXBitManipulationOp; +import com.oracle.graal.lir.ptx.PTXArithmetic.Unary1Op; +import com.oracle.graal.lir.ptx.PTXArithmetic.Unary2Op; import com.oracle.graal.lir.ptx.PTXCompare.CompareOp; import com.oracle.graal.lir.ptx.PTXControlFlow.BranchOp; import com.oracle.graal.lir.ptx.PTXControlFlow.CondMoveOp; @@ -60,8 +54,7 @@ import com.oracle.graal.lir.ptx.PTXMove.MoveToRegOp; import com.oracle.graal.lir.ptx.PTXMove.StoreOp; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.calc.Condition; -import com.oracle.graal.nodes.calc.ConvertNode; +import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.java.*; /** @@ -86,15 +79,6 @@ } @Override - protected void emitNode(ValueNode node) { - if (node instanceof LIRGenLowerable) { - ((LIRGenLowerable) node).generate(this); - } else { - super.emitNode(node); - } - } - - @Override public boolean canStoreConstant(Constant c) { // Operand b must be in the .reg state space. return false; diff -r 857f22a4f627 -r 2ad1435489d1 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 Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Mon Aug 12 15:55:54 2013 +0200 @@ -34,13 +34,31 @@ import com.oracle.graal.asm.*; import com.oracle.graal.asm.sparc.*; import com.oracle.graal.compiler.gen.*; -import com.oracle.graal.compiler.target.*; import com.oracle.graal.graph.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.StandardOp.JumpOp; import com.oracle.graal.lir.sparc.*; -import com.oracle.graal.lir.sparc.SPARCControlFlow.*; -import com.oracle.graal.lir.sparc.SPARCMove.*; +import com.oracle.graal.lir.sparc.SPARCArithmetic.BinaryCommutative; +import com.oracle.graal.lir.sparc.SPARCArithmetic.BinaryRegConst; +import com.oracle.graal.lir.sparc.SPARCArithmetic.BinaryRegReg; +import com.oracle.graal.lir.sparc.SPARCArithmetic.Op1Stack; +import com.oracle.graal.lir.sparc.SPARCArithmetic.Op2Stack; +import com.oracle.graal.lir.sparc.SPARCArithmetic.RemOp; +import com.oracle.graal.lir.sparc.SPARCArithmetic.Unary2Op; +import com.oracle.graal.lir.sparc.SPARCCompare.CompareOp; +import com.oracle.graal.lir.sparc.SPARCControlFlow.BranchOp; +import com.oracle.graal.lir.sparc.SPARCControlFlow.CondMoveOp; +import com.oracle.graal.lir.sparc.SPARCControlFlow.FloatCondMoveOp; +import com.oracle.graal.lir.sparc.SPARCControlFlow.ReturnOp; +import com.oracle.graal.lir.sparc.SPARCControlFlow.SequentialSwitchOp; +import com.oracle.graal.lir.sparc.SPARCControlFlow.SwitchRangesOp; +import com.oracle.graal.lir.sparc.SPARCControlFlow.TableSwitchOp; +import com.oracle.graal.lir.sparc.SPARCMove.LoadAddressOp; +import com.oracle.graal.lir.sparc.SPARCMove.MembarOp; +import com.oracle.graal.lir.sparc.SPARCMove.MoveFromRegOp; +import com.oracle.graal.lir.sparc.SPARCMove.MoveToRegOp; +import com.oracle.graal.lir.sparc.SPARCMove.NullCheckOp; +import com.oracle.graal.lir.sparc.SPARCMove.StackLoadAddressOp; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.calc.ConvertNode.Op; @@ -65,15 +83,6 @@ } @Override - protected void emitNode(ValueNode node) { - if (node instanceof LIRGenLowerable) { - ((LIRGenLowerable) node).generate(this); - } else { - super.emitNode(node); - } - } - - @Override public boolean canStoreConstant(Constant c) { // SPARC can only store integer null constants (via g0) switch (c.getKind()) { diff -r 857f22a4f627 -r 2ad1435489d1 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 Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Mon Aug 12 15:55:54 2013 +0200 @@ -34,6 +34,7 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.asm.*; +import com.oracle.graal.compiler.target.*; import com.oracle.graal.debug.*; import com.oracle.graal.graph.*; import com.oracle.graal.lir.*; @@ -369,7 +370,13 @@ if (Debug.isLogEnabled() && node.stamp() == StampFactory.illegal()) { Debug.log("This node has invalid type, we are emitting dead code(?): %s", node); } - ((LIRLowerable) node).generate(this); + if (node instanceof LIRGenLowerable) { + ((LIRGenLowerable) node).generate(this); + } else if (node instanceof LIRLowerable) { + ((LIRLowerable) node).generate(this); + } else if (node instanceof ArithmeticLIRLowerable) { + ((ArithmeticLIRLowerable) node).generate(this); + } } protected void emitPrologue() { diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AndNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AndNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AndNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -29,7 +29,7 @@ import com.oracle.graal.nodes.type.*; @NodeInfo(shortName = "&") -public final class AndNode extends BitLogicNode implements Canonicalizable, LIRLowerable { +public final class AndNode extends BitLogicNode implements Canonicalizable { public AndNode(Kind kind, ValueNode x, ValueNode y) { super(kind, x, y); @@ -80,7 +80,7 @@ } @Override - public void generate(LIRGeneratorTool gen) { + public void generate(ArithmeticLIRGenerator gen) { gen.setResult(this, gen.emitAnd(gen.operand(x()), gen.operand(y()))); } } diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BitLogicNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BitLogicNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BitLogicNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -22,15 +22,15 @@ */ package com.oracle.graal.nodes.calc; -import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.spi.*; /** * The {@code LogicNode} class definition. */ -public abstract class BitLogicNode extends BinaryNode implements ArithmeticOperation { +public abstract class BitLogicNode extends BinaryNode implements ArithmeticLIRLowerable { /** * Constructs a new logic operation node. diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConvertNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConvertNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConvertNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -24,7 +24,6 @@ import static com.oracle.graal.api.meta.Kind.*; -import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; @@ -34,7 +33,7 @@ /** * The {@code ConvertNode} class represents a conversion between primitive types. */ -public class ConvertNode extends FloatingNode implements Canonicalizable, LIRLowerable, Lowerable, ArithmeticOperation { +public class ConvertNode extends FloatingNode implements Canonicalizable, Lowerable, ArithmeticLIRLowerable { public static enum Op { I2L(Int, Long, true), @@ -240,7 +239,7 @@ } @Override - public void generate(LIRGeneratorTool gen) { + public void generate(ArithmeticLIRGenerator gen) { gen.setResult(this, gen.emitConvert(opcode, gen.operand(value()))); } diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatAddNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatAddNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatAddNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -28,7 +28,7 @@ import com.oracle.graal.nodes.spi.*; @NodeInfo(shortName = "+") -public final class FloatAddNode extends FloatArithmeticNode implements Canonicalizable, LIRLowerable { +public final class FloatAddNode extends FloatArithmeticNode implements Canonicalizable { public FloatAddNode(Kind kind, ValueNode x, ValueNode y, boolean isStrictFP) { super(kind, x, y, isStrictFP); @@ -64,7 +64,7 @@ } @Override - public void generate(LIRGeneratorTool gen) { + public void generate(ArithmeticLIRGenerator gen) { Value op1 = gen.operand(x()); Value op2 = gen.operand(y()); if (!y().isConstant() && !livesLonger(this, y(), gen)) { @@ -75,7 +75,7 @@ gen.setResult(this, gen.emitAdd(op1, op2)); } - public static boolean livesLonger(ValueNode after, ValueNode value, LIRGeneratorTool gen) { + public static boolean livesLonger(ValueNode after, ValueNode value, ArithmeticLIRGenerator gen) { for (Node usage : value.usages()) { if (usage != after && usage instanceof ValueNode && gen.operand(((ValueNode) usage)) != null) { return true; diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatArithmeticNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatArithmeticNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatArithmeticNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -22,11 +22,11 @@ */ package com.oracle.graal.nodes.calc; -import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.spi.*; -public abstract class FloatArithmeticNode extends BinaryNode implements ArithmeticOperation { +public abstract class FloatArithmeticNode extends BinaryNode implements ArithmeticLIRLowerable { private final boolean isStrictFP; diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatDivNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatDivNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatDivNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -28,7 +28,7 @@ import com.oracle.graal.nodes.spi.*; @NodeInfo(shortName = "/") -public final class FloatDivNode extends FloatArithmeticNode implements Canonicalizable, LIRLowerable { +public final class FloatDivNode extends FloatArithmeticNode implements Canonicalizable { public FloatDivNode(Kind kind, ValueNode x, ValueNode y, boolean isStrictFP) { super(kind, x, y, isStrictFP); @@ -52,7 +52,7 @@ } @Override - public void generate(LIRGeneratorTool gen) { + public void generate(ArithmeticLIRGenerator gen) { gen.setResult(this, gen.emitDiv(gen.operand(x()), gen.operand(y()), null)); } } diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatMulNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatMulNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatMulNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -28,7 +28,7 @@ import com.oracle.graal.nodes.spi.*; @NodeInfo(shortName = "*") -public final class FloatMulNode extends FloatArithmeticNode implements Canonicalizable, LIRLowerable { +public final class FloatMulNode extends FloatArithmeticNode implements Canonicalizable { public FloatMulNode(Kind kind, ValueNode x, ValueNode y, boolean isStrictFP) { super(kind, x, y, isStrictFP); @@ -51,7 +51,7 @@ } @Override - public void generate(LIRGeneratorTool gen) { + public void generate(ArithmeticLIRGenerator gen) { Value op1 = gen.operand(x()); Value op2 = gen.operand(y()); if (!y().isConstant() && !FloatAddNode.livesLonger(this, y(), gen)) { diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatRemNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatRemNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatRemNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -28,7 +28,7 @@ import com.oracle.graal.nodes.spi.*; @NodeInfo(shortName = "%") -public final class FloatRemNode extends FloatArithmeticNode implements Canonicalizable, LIRLowerable { +public final class FloatRemNode extends FloatArithmeticNode implements Canonicalizable { public FloatRemNode(Kind kind, ValueNode x, ValueNode y, boolean isStrictFP) { super(kind, x, y, isStrictFP); @@ -48,7 +48,7 @@ } @Override - public void generate(LIRGeneratorTool gen) { + public void generate(ArithmeticLIRGenerator gen) { gen.setResult(this, gen.emitRem(gen.operand(x()), gen.operand(y()), null)); } } diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatSubNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatSubNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatSubNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -28,7 +28,7 @@ import com.oracle.graal.nodes.spi.*; @NodeInfo(shortName = "-") -public final class FloatSubNode extends FloatArithmeticNode implements Canonicalizable, LIRLowerable { +public final class FloatSubNode extends FloatArithmeticNode implements Canonicalizable { public FloatSubNode(Kind kind, ValueNode x, ValueNode y, boolean isStrictFP) { super(kind, x, y, isStrictFP); @@ -66,7 +66,7 @@ } @Override - public void generate(LIRGeneratorTool gen) { + public void generate(ArithmeticLIRGenerator gen) { gen.setResult(this, gen.emitSub(gen.operand(x()), gen.operand(y()))); } } diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerAddNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerAddNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerAddNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -29,7 +29,7 @@ import com.oracle.graal.nodes.type.*; @NodeInfo(shortName = "+") -public class IntegerAddNode extends IntegerArithmeticNode implements Canonicalizable, LIRLowerable { +public class IntegerAddNode extends IntegerArithmeticNode implements Canonicalizable { public IntegerAddNode(Kind kind, ValueNode x, ValueNode y) { super(kind, x, y); @@ -112,7 +112,7 @@ } @Override - public void generate(LIRGeneratorTool gen) { + public void generate(ArithmeticLIRGenerator gen) { Value op1 = gen.operand(x()); assert op1 != null : x() + ", this=" + this; Value op2 = gen.operand(y()); diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerArithmeticNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerArithmeticNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerArithmeticNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -22,12 +22,12 @@ */ package com.oracle.graal.nodes.calc; -import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.spi.*; -public abstract class IntegerArithmeticNode extends BinaryNode implements ArithmeticOperation { +public abstract class IntegerArithmeticNode extends BinaryNode implements ArithmeticLIRLowerable { public IntegerArithmeticNode(Kind kind, ValueNode x, ValueNode y) { super(kind, x, y); diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerMulNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerMulNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerMulNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -29,7 +29,7 @@ import com.oracle.graal.nodes.spi.*; @NodeInfo(shortName = "*") -public class IntegerMulNode extends IntegerArithmeticNode implements Canonicalizable, LIRLowerable { +public class IntegerMulNode extends IntegerArithmeticNode implements Canonicalizable { public IntegerMulNode(Kind kind, ValueNode x, ValueNode y) { super(kind, x, y); @@ -71,7 +71,7 @@ } @Override - public void generate(LIRGeneratorTool gen) { + public void generate(ArithmeticLIRGenerator gen) { Value op1 = gen.operand(x()); Value op2 = gen.operand(y()); if (!y().isConstant() && !FloatAddNode.livesLonger(this, y(), gen)) { diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerSubNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerSubNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerSubNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -29,7 +29,7 @@ import com.oracle.graal.nodes.type.*; @NodeInfo(shortName = "-") -public class IntegerSubNode extends IntegerArithmeticNode implements Canonicalizable, LIRLowerable { +public class IntegerSubNode extends IntegerArithmeticNode implements Canonicalizable { public IntegerSubNode(Kind kind, ValueNode x, ValueNode y) { super(kind, x, y); @@ -117,7 +117,7 @@ } @Override - public void generate(LIRGeneratorTool gen) { + public void generate(ArithmeticLIRGenerator gen) { gen.setResult(this, gen.emitSub(gen.operand(x()), gen.operand(y()))); } } diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/LeftShiftNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/LeftShiftNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/LeftShiftNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -29,7 +29,7 @@ import com.oracle.graal.nodes.type.*; @NodeInfo(shortName = "<<") -public final class LeftShiftNode extends ShiftNode implements Canonicalizable, LIRLowerable { +public final class LeftShiftNode extends ShiftNode implements Canonicalizable { public LeftShiftNode(Kind kind, ValueNode x, ValueNode y) { super(kind, x, y); @@ -92,7 +92,7 @@ } @Override - public void generate(LIRGeneratorTool gen) { + public void generate(ArithmeticLIRGenerator gen) { gen.setResult(this, gen.emitShl(gen.operand(x()), gen.operand(y()))); } } diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NegateNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NegateNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NegateNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -22,7 +22,6 @@ */ package com.oracle.graal.nodes.calc; -import com.oracle.graal.api.code.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; @@ -30,7 +29,7 @@ /** * The {@code NegateNode} node negates its operand. */ -public final class NegateNode extends FloatingNode implements Canonicalizable, LIRLowerable, ArithmeticOperation { +public final class NegateNode extends FloatingNode implements Canonicalizable, ArithmeticLIRLowerable { @Input private ValueNode x; @@ -78,7 +77,7 @@ } @Override - public void generate(LIRGeneratorTool gen) { + public void generate(ArithmeticLIRGenerator gen) { gen.setResult(this, gen.emitNegate(gen.operand(x()))); } } diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/OrNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/OrNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/OrNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -29,7 +29,7 @@ import com.oracle.graal.nodes.type.*; @NodeInfo(shortName = "|") -public final class OrNode extends BitLogicNode implements Canonicalizable, LIRLowerable { +public final class OrNode extends BitLogicNode implements Canonicalizable { public OrNode(Kind kind, ValueNode x, ValueNode y) { super(kind, x, y); @@ -80,7 +80,7 @@ } @Override - public void generate(LIRGeneratorTool gen) { + public void generate(ArithmeticLIRGenerator gen) { gen.setResult(this, gen.emitOr(gen.operand(x()), gen.operand(y()))); } } diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/RightShiftNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/RightShiftNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/RightShiftNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -29,7 +29,7 @@ import com.oracle.graal.nodes.type.*; @NodeInfo(shortName = ">>") -public final class RightShiftNode extends ShiftNode implements Canonicalizable, LIRLowerable { +public final class RightShiftNode extends ShiftNode implements Canonicalizable { public RightShiftNode(Kind kind, ValueNode x, ValueNode y) { super(kind, x, y); @@ -98,7 +98,7 @@ } @Override - public void generate(LIRGeneratorTool gen) { + public void generate(ArithmeticLIRGenerator gen) { gen.setResult(this, gen.emitShr(gen.operand(x()), gen.operand(y()))); } } diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ShiftNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ShiftNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ShiftNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -22,14 +22,14 @@ */ package com.oracle.graal.nodes.calc; -import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.spi.*; /** * The {@code ShiftOp} class represents shift operations. */ -public abstract class ShiftNode extends BinaryNode implements ArithmeticOperation { +public abstract class ShiftNode extends BinaryNode implements ArithmeticLIRLowerable { /** * Creates a new shift operation. diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRightShiftNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRightShiftNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRightShiftNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -29,7 +29,7 @@ import com.oracle.graal.nodes.type.*; @NodeInfo(shortName = ">>>") -public final class UnsignedRightShiftNode extends ShiftNode implements Canonicalizable, LIRLowerable { +public final class UnsignedRightShiftNode extends ShiftNode implements Canonicalizable { public UnsignedRightShiftNode(Kind kind, ValueNode x, ValueNode y) { super(kind, x, y); @@ -92,7 +92,7 @@ } @Override - public void generate(LIRGeneratorTool gen) { + public void generate(ArithmeticLIRGenerator gen) { gen.setResult(this, gen.emitUShr(gen.operand(x()), gen.operand(y()))); } } diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/XorNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/XorNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/XorNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -29,7 +29,7 @@ import com.oracle.graal.nodes.type.*; @NodeInfo(shortName = "^") -public final class XorNode extends BitLogicNode implements Canonicalizable, LIRLowerable { +public final class XorNode extends BitLogicNode implements Canonicalizable { public XorNode(Kind kind, ValueNode x, ValueNode y) { super(kind, x, y); @@ -74,7 +74,7 @@ } @Override - public void generate(LIRGeneratorTool gen) { + public void generate(ArithmeticLIRGenerator gen) { gen.setResult(this, gen.emitXor(gen.operand(x()), gen.operand(y()))); } } diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/ArithmeticLIRLowerable.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/ArithmeticLIRLowerable.java Mon Aug 12 15:55:54 2013 +0200 @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.nodes.spi; + +import com.oracle.graal.api.code.*; + +public interface ArithmeticLIRLowerable extends ArithmeticOperation { + + void generate(ArithmeticLIRGenerator gen); +} diff -r 857f22a4f627 -r 2ad1435489d1 graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64ConvertNode.java --- a/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64ConvertNode.java Mon Aug 12 15:52:32 2013 +0200 +++ b/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64ConvertNode.java Mon Aug 12 15:55:54 2013 +0200 @@ -22,7 +22,6 @@ */ package com.oracle.graal.replacements.amd64; -import com.oracle.graal.api.code.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.ConvertNode.Op; import com.oracle.graal.nodes.calc.*; @@ -35,7 +34,7 @@ * cases that differ between AMD64 and Java. * */ -public class AMD64ConvertNode extends FloatingNode implements LIRLowerable, ArithmeticOperation { +public class AMD64ConvertNode extends FloatingNode implements ArithmeticLIRLowerable { @Input private ValueNode value; public final Op opcode; @@ -46,7 +45,7 @@ this.value = value; } - public void generate(LIRGeneratorTool gen) { + public void generate(ArithmeticLIRGenerator gen) { gen.setResult(this, gen.emitConvert(opcode, gen.operand(value))); } }