# HG changeset patch # User Peter Hofer # Date 1310399578 -7200 # Node ID f4b46a224d90ac5ba49cd3b5befa6d89efb0752b # Parent 0e03231b46bae5ca5c49570db7401c55f7a3e3c3 Replace Compare with NormalizeComparison and constant 0 as inputs with a single Compare; correct/remove encountered wrong comments diff -r 0e03231b46ba -r f4b46a224d90 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Compare.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Compare.java Mon Jul 11 13:41:33 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Compare.java Mon Jul 11 17:52:58 2011 +0200 @@ -81,7 +81,7 @@ boolean unorderedIsTrue; /** - * Constructs a new If instruction. + * Constructs a new Compare instruction. * @param x the instruction producing the first input to the instruction * @param condition the condition (comparison operation) * @param y the instruction that produces the second input to this instruction @@ -121,7 +121,7 @@ } /** - * Swaps the operands to this if and reverses the condition (e.g. > goes to <=). + * Swaps the operands to this if and mirrors the condition (e.g. > becomes <). * @see Condition#mirror() */ public void swapOperands() { @@ -188,6 +188,10 @@ return optimizeMaterialize(compare, compare.x().asConstant(), (MaterializeNode) compare.y()); } else if (compare.y().isConstant() && compare.x() instanceof MaterializeNode) { return optimizeMaterialize(compare, compare.y().asConstant(), (MaterializeNode) compare.x()); + } else if (compare.x().isConstant() && compare.y() instanceof NormalizeCompare) { + return optimizeNormalizeCmp(compare, compare.x().asConstant(), (NormalizeCompare) compare.y()); + } else if (compare.y().isConstant() && compare.x() instanceof NormalizeCompare) { + return optimizeNormalizeCmp(compare, compare.y().asConstant(), (NormalizeCompare) compare.x()); } return compare; } @@ -211,5 +215,20 @@ } return compare; } + + private Node optimizeNormalizeCmp(Compare compare, CiConstant constant, NormalizeCompare normalizeNode) { + if (constant.kind == CiKind.Int && constant.asInt() == 0) { + Condition condition = compare.condition(); + if (normalizeNode == compare.y()) { + condition = condition.mirror(); + } + Compare result = new Compare(normalizeNode.x(), condition, normalizeNode.y(), compare.graph()); + if (GraalOptions.TraceCanonicalizer) { + TTY.println("Replaced Compare+NormalizeCompare with " + result); + } + return result; + } + return compare; + } }; } diff -r 0e03231b46ba -r f4b46a224d90 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/MaterializeNode.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/MaterializeNode.java Mon Jul 11 13:41:33 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/MaterializeNode.java Mon Jul 11 17:52:58 2011 +0200 @@ -29,9 +29,6 @@ import com.oracle.max.graal.graph.*; import com.sun.cri.ci.*; -/** - * The {@code Convert} class represents a conversion between primitive types. - */ public final class MaterializeNode extends FloatingNode { private static final int INPUT_COUNT = 1; @@ -60,13 +57,6 @@ inputs().set(super.inputCount() + INPUT_VALUE, n); } - /** - * Constructs a new Convert instance. - * @param opcode the bytecode representing the operation - * @param value the instruction producing the input value - * @param kind the result type of this instruction - * @param graph - */ public MaterializeNode(Value value, Graph graph) { super(CiKind.Int, INPUT_COUNT, SUCCESSOR_COUNT, graph); setValue(value); diff -r 0e03231b46ba -r f4b46a224d90 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/NegateBooleanNode.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/NegateBooleanNode.java Mon Jul 11 13:41:33 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/NegateBooleanNode.java Mon Jul 11 17:52:58 2011 +0200 @@ -27,9 +27,6 @@ import com.oracle.max.graal.graph.*; import com.sun.cri.ci.*; -/** - * The {@code ArrayLength} instruction gets the length of an array. - */ public final class NegateBooleanNode extends BooleanNode { private static final int INPUT_COUNT = 1; private static final int INPUT_NODE = 0; @@ -57,11 +54,6 @@ return (Value) inputs().set(super.inputCount() + INPUT_NODE, n); } - /** - * Constructs a new ArrayLength instruction. - * @param array the instruction producing the array - * @param newFrameState the state after executing this instruction - */ public NegateBooleanNode(Value value, Graph graph) { super(CiKind.Int, INPUT_COUNT, SUCCESSOR_COUNT, graph); setValue(value);