# HG changeset patch # User Roland Schatz # Date 1378813173 -7200 # Node ID f6cb27e8c9eec3240a5c569d1052f98012159df5 # Parent 2f6734f8126a8b3e121f6d68337c9efcd7750feb Avoid direct usage of CanonicalizerPhase.Instance in partial evaluator. diff -r 2f6734f8126a -r f6cb27e8c9ee graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Tue Sep 10 13:28:26 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Tue Sep 10 13:39:33 2013 +0200 @@ -68,7 +68,6 @@ private final MetaAccessProvider metaAccessProvider; private final ResolvedJavaType nodeClass; private final ResolvedJavaMethod executeHelperMethod; - private final CustomCanonicalizer customCanonicalizer; private final CanonicalizerPhase canonicalizer; private final ResolvedJavaType[] skippedExceptionTypes; private final Replacements replacements; @@ -79,7 +78,7 @@ public PartialEvaluator(MetaAccessProvider metaAccessProvider, Replacements replacements, TruffleCache truffleCache) { this.metaAccessProvider = metaAccessProvider; this.nodeClass = metaAccessProvider.lookupJavaType(com.oracle.truffle.api.nodes.Node.class); - this.customCanonicalizer = new PartialEvaluatorCanonicalizer(metaAccessProvider, nodeClass); + CustomCanonicalizer customCanonicalizer = new PartialEvaluatorCanonicalizer(metaAccessProvider, nodeClass); this.canonicalizer = new CanonicalizerPhase(!AOTCompilation.getValue(), customCanonicalizer); this.skippedExceptionTypes = TruffleCompilerImpl.getSkippedExceptionTypes(metaAccessProvider); this.replacements = replacements; @@ -116,6 +115,7 @@ Debug.scope("createGraph", graph, new Runnable() { + @SuppressWarnings("deprecation") @Override public void run() { new GraphBuilderPhase(metaAccessProvider, config, TruffleCompilerImpl.Optimizations).apply(graph); @@ -125,8 +125,8 @@ thisNode.replaceAndDelete(ConstantNode.forObject(node, metaAccessProvider, graph)); // Canonicalize / constant propagate. - CanonicalizerPhase.Instance canonicalizerPhase = new CanonicalizerPhase.Instance(metaAccessProvider, assumptions, !AOTCompilation.getValue(), null, customCanonicalizer); - canonicalizerPhase.apply(graph); + PhaseContext baseContext = new PhaseContext(metaAccessProvider, assumptions, replacements); + canonicalizer.apply(graph, baseContext); // Intrinsify methods. new ReplaceIntrinsicsPhase(replacements).apply(graph); @@ -158,11 +158,11 @@ final PhasePlan plan = new PhasePlan(); GraphBuilderPhase graphBuilderPhase = new GraphBuilderPhase(metaAccessProvider, config, TruffleCompilerImpl.Optimizations); plan.addPhase(PhasePosition.AFTER_PARSING, graphBuilderPhase); - plan.addPhase(PhasePosition.AFTER_PARSING, canonicalizerPhase); + canonicalizer.addToPhasePlan(plan, baseContext); plan.addPhase(PhasePosition.AFTER_PARSING, new ReplaceIntrinsicsPhase(replacements)); new ConvertDeoptimizeToGuardPhase().apply(graph); - canonicalizerPhase.apply(graph); + canonicalizer.apply(graph, baseContext); new DeadCodeEliminationPhase().apply(graph); HighTierContext context = new HighTierContext(metaAccessProvider, assumptions, replacements, cache, plan, OptimisticOptimizations.NONE); @@ -173,7 +173,7 @@ new ConvertDeoptimizeToGuardPhase().apply(graph); // Canonicalize / constant propagate. - canonicalizerPhase.apply(graph); + canonicalizer.apply(graph, context); for (NeverPartOfCompilationNode neverPartOfCompilationNode : graph.getNodes(NeverPartOfCompilationNode.class)) { Throwable exception = new VerificationError(neverPartOfCompilationNode.getMessage()); @@ -205,7 +205,7 @@ new ConvertDeoptimizeToGuardPhase().apply(graph); // Canonicalize / constant propagate. - canonicalizerPhase.apply(graph); + canonicalizer.apply(graph, context); } }); @@ -268,13 +268,14 @@ public void run() { // Canonicalize / constant propagate. - new CanonicalizerPhase.Instance(metaAccessProvider, assumptions, canonicalizeReads, null, customCanonicalizer).apply(graph); + PhaseContext context = new PhaseContext(metaAccessProvider, assumptions, replacements); + canonicalizer.apply(graph, context); // Intrinsify methods. new ReplaceIntrinsicsPhase(replacements).apply(graph); // Inline trivial getter methods - new InlineTrivialGettersPhase(metaAccessProvider, assumptions, customCanonicalizer).apply(graph); + new InlineTrivialGettersPhase(metaAccessProvider, canonicalizer).apply(graph, context); // Convert deopt to guards. new ConvertDeoptimizeToGuardPhase().apply(graph); @@ -291,7 +292,7 @@ if (constant <= TruffleConstantUnrollLimit.getValue() || targetMethod.getAnnotation(ExplodeLoop.class) != null) { LoopTransformations.fullUnroll(ex, metaAccessProvider, assumptions, canonicalizeReads); Debug.dump(graph, "After loop unrolling %d times", constant); - new CanonicalizerPhase.Instance(metaAccessProvider, assumptions, canonicalizeReads, null, customCanonicalizer).apply(graph); + canonicalizer.apply(graph, context); unrolled = true; break; } diff -r 2f6734f8126a -r f6cb27e8c9ee graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/phases/InlineTrivialGettersPhase.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/phases/InlineTrivialGettersPhase.java Tue Sep 10 13:28:26 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/phases/InlineTrivialGettersPhase.java Tue Sep 10 13:39:33 2013 +0200 @@ -22,9 +22,6 @@ */ package com.oracle.graal.truffle.phases; -import static com.oracle.graal.phases.GraalOptions.*; - -import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.debug.*; import com.oracle.graal.java.*; @@ -33,27 +30,25 @@ import com.oracle.graal.nodes.java.MethodCallTargetNode.InvokeKind; import com.oracle.graal.phases.*; import com.oracle.graal.phases.common.*; -import com.oracle.graal.phases.common.CanonicalizerPhase.CustomCanonicalizer; +import com.oracle.graal.phases.tiers.*; import com.oracle.graal.truffle.*; /** * Inline all trivial getters (i.e. simple field loads). */ -public class InlineTrivialGettersPhase extends Phase { +public class InlineTrivialGettersPhase extends BasePhase { private static final int TRIVIAL_GETTER_SIZE = 5; private final MetaAccessProvider metaAccessProvider; - private final Assumptions assumptions; - private final CustomCanonicalizer customCanonicalizer; + private final CanonicalizerPhase canonicalizer; - public InlineTrivialGettersPhase(MetaAccessProvider metaAccessProvider, Assumptions assumptions, CustomCanonicalizer customCanonicalizer) { + public InlineTrivialGettersPhase(MetaAccessProvider metaAccessProvider, CanonicalizerPhase canonicalizer) { this.metaAccessProvider = metaAccessProvider; - this.assumptions = assumptions; - this.customCanonicalizer = customCanonicalizer; + this.canonicalizer = canonicalizer; } @Override - protected void run(StructuredGraph graph) { + protected void run(StructuredGraph graph, PhaseContext context) { for (MethodCallTargetNode methodCallTarget : graph.getNodes(MethodCallTargetNode.class)) { if (methodCallTarget.isAlive()) { InvokeKind invokeKind = methodCallTarget.invokeKind(); @@ -66,7 +61,7 @@ int mark = graph.getMark(); InliningUtil.inline(methodCallTarget.invoke(), inlineGraph, false); Debug.dump(graph, "After inlining trivial getter %s", targetMethod.toString()); - new CanonicalizerPhase.Instance(metaAccessProvider, assumptions, !AOTCompilation.getValue(), mark, customCanonicalizer).apply(graph); + canonicalizer.applyIncremental(graph, context, mark); } } }