Mercurial > hg > truffle
changeset 19747:39de568cbb02
Reintroduce CustomCanonicalizer
author | Stefan Anzinger <stefan.anzinger@oracle.com> |
---|---|
date | Tue, 10 Mar 2015 15:09:26 +0100 |
parents | c217db06182a |
children | 37969636e6f8 |
files | graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java |
diffstat | 1 files changed, 29 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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; + } }