changeset 16587:173da8c3095d

support simplification in CustomCanonicalizer and turn it into an abstract class
author Lukas Stadler <lukas.stadler@oracle.com>
date Wed, 23 Jul 2014 14:20:27 +0200
parents 4a8f255c8c8d
children 4209ec855c1c
files graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluatorCanonicalizer.java
diffstat 2 files changed, 12 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java	Wed Jul 23 14:19:51 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java	Wed Jul 23 14:20:27 2014 +0200
@@ -49,9 +49,15 @@
     private final boolean canonicalizeReads;
     private final CustomCanonicalizer customCanonicalizer;
 
-    public interface CustomCanonicalizer {
+    public static abstract class CustomCanonicalizer {
 
-        Node canonicalize(Node node);
+        public Node canonicalize(Node node) {
+            return node;
+        }
+
+        @SuppressWarnings("unused")
+        public void simplify(Node node, SimplifierTool tool) {
+        }
     }
 
     public CanonicalizerPhase(boolean canonicalizeReads) {
@@ -225,6 +231,9 @@
             if (!result && customCanonicalizer != null) {
                 Node canonical = customCanonicalizer.canonicalize(node);
                 result = performReplacement(node, canonical);
+                if (!result) {
+                    customCanonicalizer.simplify(node, tool);
+                }
             }
             return result;
         }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluatorCanonicalizer.java	Wed Jul 23 14:19:51 2014 +0200
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluatorCanonicalizer.java	Wed Jul 23 14:20:27 2014 +0200
@@ -30,7 +30,7 @@
 import com.oracle.truffle.api.*;
 import com.oracle.truffle.api.nodes.Node.Child;
 
-final class PartialEvaluatorCanonicalizer implements CanonicalizerPhase.CustomCanonicalizer {
+final class PartialEvaluatorCanonicalizer extends CanonicalizerPhase.CustomCanonicalizer {
 
     private final MetaAccessProvider metaAccess;
     private final ConstantReflectionProvider constantReflection;