Mercurial > hg > graal-jvmci-8
changeset 11410:446a94461d53
Improve canonicalization of ConditionalNode.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Sat, 24 Aug 2013 15:02:10 +0200 |
parents | 1f302b6e16b0 |
children | 95cbf029018c |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowThanNode.java |
diffstat | 2 files changed, 12 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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(); }
--- 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();