# HG changeset patch # User Stefan Anzinger # Date 1425996566 -3600 # Node ID 39de568cbb02a18049668d52859684ecea9559f9 # Parent c217db06182a1551705f264b5757a01fdc4aeeb3 Reintroduce CustomCanonicalizer diff -r c217db06182a -r 39de568cbb02 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Tue Mar 10 15:08:56 2015 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Tue Mar 10 15:09:26 2015 +0100 @@ -51,8 +51,25 @@ private boolean canonicalizeReads = true; private boolean simplify = true; + private final CustomCanonicalizer customCanonicalizer; + + public abstract static class CustomCanonicalizer { + + public Node canonicalize(Node node) { + return node; + } + + @SuppressWarnings("unused") + public void simplify(Node node, SimplifierTool tool) { + } + } public CanonicalizerPhase() { + this(null); + } + + public CanonicalizerPhase(CustomCanonicalizer customCanonicalizer) { + this.customCanonicalizer = customCanonicalizer; } public void disableReadCanonicalization() { @@ -227,6 +244,14 @@ } public boolean tryCanonicalize(final Node node, NodeClass nodeClass) { + if (customCanonicalizer != null) { + Node canonical = customCanonicalizer.canonicalize(node); + if (performReplacement(node, canonical)) { + return true; + } else { + customCanonicalizer.simplify(node, tool); + } + } if (nodeClass.isCanonicalizable()) { METRIC_CANONICALIZATION_CONSIDERED_NODES.increment(); try (Scope s = Debug.scope("CanonicalizeNode", node)) { @@ -397,4 +422,8 @@ } } } + + public boolean getCanonicalizeReads() { + return canonicalizeReads; + } }