# HG changeset patch # User Roland Schatz # Date 1425035337 -3600 # Node ID d5042bcd422ff79f0fdd42e7a3edf935c1eb3ce2 # Parent 382e4f844d9658fb22d452d21e94460249507d53 Remove isCommutative method from BinaryCommutative interface. diff -r 382e4f844d96 -r d5042bcd422f graal/com.oracle.graal.graph/src/com/oracle/graal/graph/spi/Canonicalizable.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/spi/Canonicalizable.java Thu Feb 26 19:08:19 2015 +0100 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/spi/Canonicalizable.java Fri Feb 27 12:08:57 2015 +0100 @@ -131,17 +131,12 @@ /** * This sub-interface of {@link Canonicalizable.Binary} is for nodes with two inputs where the - * operation may be commutative. It is used to improve GVN by trying to merge nodes with the - * same inputs in different order. + * operation is commutative. It is used to improve GVN by trying to merge nodes with the same + * inputs in different order. */ public interface BinaryCommutative extends Binary { /** - * Test whether this node is commutative. - */ - boolean isCommutative(); - - /** * Ensure a canonical ordering of inputs for commutative nodes to improve GVN results. Order * the inputs by increasing {@link Node#id} and call {@link Graph#findDuplicate(Node)} on * the node if it's currently in a graph. It's assumed that if there was a constant on the diff -r 382e4f844d96 -r d5042bcd422f graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BinaryOpLogicNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BinaryOpLogicNode.java Thu Feb 26 19:08:19 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BinaryOpLogicNode.java Fri Feb 27 12:08:57 2015 +0100 @@ -23,12 +23,12 @@ package com.oracle.graal.nodes; import com.oracle.graal.graph.*; -import com.oracle.graal.graph.spi.*; +import com.oracle.graal.graph.spi.Canonicalizable.BinaryCommutative; import com.oracle.graal.nodeinfo.*; import com.oracle.graal.nodes.spi.*; @NodeInfo -public abstract class BinaryOpLogicNode extends LogicNode implements LIRLowerable, Canonicalizable.BinaryCommutative { +public abstract class BinaryOpLogicNode extends LogicNode implements LIRLowerable { public static final NodeClass TYPE = NodeClass.create(BinaryOpLogicNode.class); @Input protected ValueNode x; @@ -68,6 +68,7 @@ */ @SuppressWarnings("deprecation") public LogicNode maybeCommuteInputs() { + assert this instanceof BinaryCommutative; if (x.getId() > y.getId()) { ValueNode tmp = x; x = y; diff -r 382e4f844d96 -r d5042bcd422f graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AddNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AddNode.java Thu Feb 26 19:08:19 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AddNode.java Fri Feb 27 12:08:57 2015 +0100 @@ -27,6 +27,7 @@ import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp.Add; import com.oracle.graal.graph.*; +import com.oracle.graal.graph.spi.Canonicalizable.BinaryCommutative; import com.oracle.graal.graph.spi.*; import com.oracle.graal.lir.gen.*; import com.oracle.graal.nodeinfo.*; @@ -34,7 +35,7 @@ import com.oracle.graal.nodes.spi.*; @NodeInfo(shortName = "+") -public class AddNode extends BinaryArithmeticNode implements NarrowableArithmeticNode { +public class AddNode extends BinaryArithmeticNode implements NarrowableArithmeticNode, BinaryCommutative { public static final NodeClass TYPE = NodeClass.create(AddNode.class); diff -r 382e4f844d96 -r d5042bcd422f 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 Thu Feb 26 19:08:19 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AndNode.java Fri Feb 27 12:08:57 2015 +0100 @@ -25,9 +25,10 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.compiler.common.type.ArithmeticOpTable.*; -import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp.*; +import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp; +import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp.And; import com.oracle.graal.graph.*; +import com.oracle.graal.graph.spi.Canonicalizable.BinaryCommutative; import com.oracle.graal.graph.spi.*; import com.oracle.graal.lir.gen.*; import com.oracle.graal.nodeinfo.*; @@ -36,7 +37,7 @@ import com.oracle.graal.nodes.util.*; @NodeInfo(shortName = "&") -public final class AndNode extends BinaryArithmeticNode implements NarrowableArithmeticNode { +public final class AndNode extends BinaryArithmeticNode implements NarrowableArithmeticNode, BinaryCommutative { public static final NodeClass TYPE = NodeClass.create(AndNode.class); diff -r 382e4f844d96 -r d5042bcd422f graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryArithmeticNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryArithmeticNode.java Thu Feb 26 19:08:19 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryArithmeticNode.java Fri Feb 27 12:08:57 2015 +0100 @@ -37,7 +37,7 @@ import com.oracle.graal.nodes.spi.*; @NodeInfo -public abstract class BinaryArithmeticNode extends BinaryNode implements ArithmeticLIRLowerable, Canonicalizable.BinaryCommutative { +public abstract class BinaryArithmeticNode extends BinaryNode implements ArithmeticLIRLowerable, Canonicalizable.Binary { @SuppressWarnings("rawtypes") public static final NodeClass TYPE = NodeClass.create(BinaryArithmeticNode.class); @@ -62,11 +62,6 @@ } @Override - public boolean isCommutative() { - return getOp(getX(), getY()).isCommutative(); - } - - @Override public ValueNode canonical(CanonicalizerTool tool, ValueNode forX, ValueNode forY) { ValueNode result = tryConstantFold(getOp(forX, forY), forX, forY, stamp()); if (result != null) { @@ -268,6 +263,7 @@ */ @SuppressWarnings("deprecation") public BinaryNode maybeCommuteInputs() { + assert this instanceof BinaryCommutative; if (!y.isConstant() && x.getId() > y.getId()) { ValueNode tmp = x; x = y; diff -r 382e4f844d96 -r d5042bcd422f graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java Thu Feb 26 19:08:19 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java Fri Feb 27 12:08:57 2015 +0100 @@ -38,7 +38,7 @@ * into variants that do not materialize the value (CompareIf, CompareGuard...) */ @NodeInfo -public abstract class CompareNode extends BinaryOpLogicNode { +public abstract class CompareNode extends BinaryOpLogicNode implements Canonicalizable.Binary { public static final NodeClass TYPE = NodeClass.create(CompareNode.class); protected final Condition condition; @@ -65,11 +65,6 @@ return condition; } - @Override - public boolean isCommutative() { - return condition.isCommutative(); - } - /** * Checks whether unordered inputs mean true or false (only applies to float operations). * diff -r 382e4f844d96 -r d5042bcd422f graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatEqualsNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatEqualsNode.java Thu Feb 26 19:08:19 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatEqualsNode.java Fri Feb 27 12:08:57 2015 +0100 @@ -27,13 +27,14 @@ import com.oracle.graal.compiler.common.calc.*; import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; +import com.oracle.graal.graph.spi.Canonicalizable.BinaryCommutative; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodeinfo.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.util.*; @NodeInfo(shortName = "==") -public final class FloatEqualsNode extends CompareNode { +public final class FloatEqualsNode extends CompareNode implements BinaryCommutative { public static final NodeClass TYPE = NodeClass.create(FloatEqualsNode.class); public FloatEqualsNode(ValueNode x, ValueNode y) { diff -r 382e4f844d96 -r d5042bcd422f graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java Thu Feb 26 19:08:19 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java Fri Feb 27 12:08:57 2015 +0100 @@ -27,13 +27,14 @@ import com.oracle.graal.compiler.common.calc.*; import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; +import com.oracle.graal.graph.spi.Canonicalizable.BinaryCommutative; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodeinfo.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.util.*; @NodeInfo(shortName = "==") -public final class IntegerEqualsNode extends CompareNode { +public final class IntegerEqualsNode extends CompareNode implements BinaryCommutative { public static final NodeClass TYPE = NodeClass.create(IntegerEqualsNode.class); public IntegerEqualsNode(ValueNode x, ValueNode y) { diff -r 382e4f844d96 -r d5042bcd422f graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java Thu Feb 26 19:08:19 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java Fri Feb 27 12:08:57 2015 +0100 @@ -24,6 +24,7 @@ import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; +import com.oracle.graal.graph.spi.Canonicalizable.BinaryCommutative; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodeinfo.*; import com.oracle.graal.nodes.*; @@ -34,7 +35,7 @@ * both x and y. */ @NodeInfo -public final class IntegerTestNode extends BinaryOpLogicNode { +public final class IntegerTestNode extends BinaryOpLogicNode implements BinaryCommutative { public static final NodeClass TYPE = NodeClass.create(IntegerTestNode.class); public IntegerTestNode(ValueNode x, ValueNode y) { @@ -57,9 +58,4 @@ } return this; } - - @Override - public boolean isCommutative() { - return true; - } } diff -r 382e4f844d96 -r d5042bcd422f graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/MulNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/MulNode.java Thu Feb 26 19:08:19 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/MulNode.java Fri Feb 27 12:08:57 2015 +0100 @@ -26,8 +26,9 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp; -import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp.*; +import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp.Mul; import com.oracle.graal.graph.*; +import com.oracle.graal.graph.spi.Canonicalizable.BinaryCommutative; import com.oracle.graal.graph.spi.*; import com.oracle.graal.lir.gen.*; import com.oracle.graal.nodeinfo.*; @@ -35,7 +36,7 @@ import com.oracle.graal.nodes.spi.*; @NodeInfo(shortName = "*") -public class MulNode extends BinaryArithmeticNode implements NarrowableArithmeticNode { +public class MulNode extends BinaryArithmeticNode implements NarrowableArithmeticNode, BinaryCommutative { public static final NodeClass TYPE = NodeClass.create(MulNode.class); diff -r 382e4f844d96 -r d5042bcd422f 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 Thu Feb 26 19:08:19 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/OrNode.java Fri Feb 27 12:08:57 2015 +0100 @@ -25,9 +25,10 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.compiler.common.type.ArithmeticOpTable.*; -import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp.*; +import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp; +import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp.Or; import com.oracle.graal.graph.*; +import com.oracle.graal.graph.spi.Canonicalizable.BinaryCommutative; import com.oracle.graal.graph.spi.*; import com.oracle.graal.lir.gen.*; import com.oracle.graal.nodeinfo.*; @@ -36,7 +37,7 @@ import com.oracle.graal.nodes.util.*; @NodeInfo(shortName = "|") -public final class OrNode extends BinaryArithmeticNode { +public final class OrNode extends BinaryArithmeticNode implements BinaryCommutative { public static final NodeClass TYPE = NodeClass.create(OrNode.class); diff -r 382e4f844d96 -r d5042bcd422f graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/PointerEqualsNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/PointerEqualsNode.java Thu Feb 26 19:08:19 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/PointerEqualsNode.java Fri Feb 27 12:08:57 2015 +0100 @@ -25,13 +25,14 @@ import com.oracle.graal.compiler.common.calc.*; import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; +import com.oracle.graal.graph.spi.Canonicalizable.BinaryCommutative; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodeinfo.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.util.*; @NodeInfo(shortName = "==") -public class PointerEqualsNode extends CompareNode { +public class PointerEqualsNode extends CompareNode implements BinaryCommutative { public static final NodeClass TYPE = NodeClass.create(PointerEqualsNode.class); diff -r 382e4f844d96 -r d5042bcd422f 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 Thu Feb 26 19:08:19 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/XorNode.java Fri Feb 27 12:08:57 2015 +0100 @@ -25,9 +25,10 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; -import com.oracle.graal.compiler.common.type.ArithmeticOpTable.*; -import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp.*; +import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp; +import com.oracle.graal.compiler.common.type.ArithmeticOpTable.BinaryOp.Xor; import com.oracle.graal.graph.*; +import com.oracle.graal.graph.spi.Canonicalizable.BinaryCommutative; import com.oracle.graal.graph.spi.*; import com.oracle.graal.lir.gen.*; import com.oracle.graal.nodeinfo.*; @@ -36,7 +37,7 @@ import com.oracle.graal.nodes.util.*; @NodeInfo(shortName = "^") -public final class XorNode extends BinaryArithmeticNode { +public final class XorNode extends BinaryArithmeticNode implements BinaryCommutative { public static final NodeClass TYPE = NodeClass.create(XorNode.class); @@ -84,7 +85,7 @@ } return reassociate(this, ValueNode.isConstantPredicate(), forX, forY); } - return this.maybeCommuteInputs(); + return this; } @Override diff -r 382e4f844d96 -r d5042bcd422f graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Thu Feb 26 19:08:19 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Fri Feb 27 12:08:57 2015 +0100 @@ -263,10 +263,7 @@ try (AutoCloseable verify = getCanonicalizeableContractAssertion(node)) { canonical = ((Canonicalizable) node).canonical(tool); if (canonical == node && nodeClass.isCommutative()) { - Canonicalizable.BinaryCommutative commutative = (BinaryCommutative) node; - if (commutative.isCommutative()) { - canonical = commutative.maybeCommuteInputs(); - } + canonical = ((BinaryCommutative) node).maybeCommuteInputs(); } } if (performReplacement(node, canonical)) {