Mercurial > hg > graal-compiler
changeset 7378:88506cfc3bab
Canonicalize ((a - a % b) / b) into (a / b).
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Tue, 15 Jan 2013 17:53:31 +0100 |
parents | 53d5f5fc4dd9 |
children | 0cc86f2309be |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerDivNode.java |
diffstat | 1 files changed, 12 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerDivNode.java Tue Jan 15 15:44:04 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerDivNode.java Tue Jan 15 17:53:31 2013 +0100 @@ -87,6 +87,18 @@ return shift; } } + + // Convert the expression ((a - a % b) / b) into (a / b). + if (x() instanceof IntegerSubNode) { + IntegerSubNode integerSubNode = (IntegerSubNode) x(); + if (integerSubNode.y() instanceof IntegerRemNode) { + IntegerRemNode integerRemNode = (IntegerRemNode) integerSubNode.y(); + if (integerSubNode.kind() == this.kind() && integerRemNode.kind() == this.kind() && integerSubNode.x() == integerRemNode.x() && this.y() == integerRemNode.y()) { + return graph().add(new IntegerDivNode(kind(), integerSubNode.x(), this.y())); + } + } + } + return this; }