Mercurial > hg > truffle
diff graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java @ 9448:7b88c5e5cbd4
Add more canonicalizations for Compare and Negate nodes
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Tue, 30 Apr 2013 20:07:07 +0200 |
parents | 4a6646d8eb87 |
children | 1f302b6e16b0 |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java Tue Apr 30 20:05:21 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java Tue Apr 30 20:07:07 2013 +0200 @@ -101,6 +101,16 @@ return this; } + protected void setX(ValueNode x) { + updateUsages(this.x, x); + this.x = x; + } + + protected void setY(ValueNode y) { + updateUsages(this.y, y); + this.y = y; + } + protected LogicNode optimizeNormalizeCmp(Constant constant, NormalizeCompareNode normalizeNode, boolean mirrored) { throw new GraalInternalError("NormalizeCompareNode connected to %s (%s %s %s)", this, constant, normalizeNode, mirrored); } @@ -123,6 +133,14 @@ return optimizeNormalizeCmp(y().asConstant(), (NormalizeCompareNode) x(), false); } } + if (x() instanceof ConvertNode && y() instanceof ConvertNode) { + ConvertNode convertX = (ConvertNode) x(); + ConvertNode convertY = (ConvertNode) y(); + if (convertX.opcode.isLossless() && convertY.opcode.isLossless()) { + setX(convertX.value()); + setY(convertY.value()); + } + } return this; }