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;
     }