# HG changeset patch # User Roland Schatz # Date 1377349330 -7200 # Node ID 446a94461d536edf916f6096c1b758ea2b76f977 # Parent 1f302b6e16b0346d18d9bfd453ff45bbd1d11839 Improve canonicalization of ConditionalNode. diff -r 1f302b6e16b0 -r 446a94461d53 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java Sat Aug 24 14:38:11 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java Sat Aug 24 15:02:10 2013 +0200 @@ -92,6 +92,13 @@ return falseValue(); } } + if (condition instanceof CompareNode && ((CompareNode) condition).condition() == Condition.EQ) { + // optimize the pattern (x == y) ? x : y + CompareNode compare = (CompareNode) condition; + if ((compare.x() == trueValue() && compare.y() == falseValue()) || (compare.x() == falseValue() && compare.y() == trueValue())) { + return falseValue(); + } + } if (trueValue() == falseValue()) { return trueValue(); } diff -r 1f302b6e16b0 -r 446a94461d53 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowThanNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowThanNode.java Sat Aug 24 14:38:11 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowThanNode.java Sat Aug 24 15:02:10 2013 +0200 @@ -58,6 +58,11 @@ if (x() == y()) { return LogicConstantNode.contradiction(graph()); } else { + if (x().isConstant() && x().asConstant().asLong() == 0) { + // 0 |<| y is the same as 0 != y + return graph().unique(new LogicNegationNode(CompareNode.createCompareNode(Condition.EQ, x(), y()))); + } + if (x().stamp() instanceof IntegerStamp && y().stamp() instanceof IntegerStamp) { IntegerStamp xStamp = (IntegerStamp) x().stamp(); IntegerStamp yStamp = (IntegerStamp) y().stamp();