# HG changeset patch # User Roland Schatz # Date 1365780068 -7200 # Node ID 989db61f2007e67f9bd4bf47edd8e7ed3be34f99 # Parent fb2b0866e35075d1ff3c77de56224a95b91abf60 Make LoopFullUnrollPhase reentrant. diff -r fb2b0866e350 -r 989db61f2007 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Fri Apr 12 17:17:29 2013 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Fri Apr 12 17:21:08 2013 +0200 @@ -142,7 +142,7 @@ plan.runPhases(PhasePosition.HIGH_LEVEL, graph); if (GraalOptions.FullUnroll) { - new LoopFullUnrollPhase(runtime, assumptions).apply(graph); + new LoopFullUnrollPhase().apply(graph, highTierContext); if (GraalOptions.OptCanonicalizer) { new CanonicalizerPhase.Instance(runtime, assumptions).apply(graph); } diff -r fb2b0866e350 -r 989db61f2007 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopyNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopyNode.java Fri Apr 12 17:17:29 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopyNode.java Fri Apr 12 17:21:08 2013 +0200 @@ -31,6 +31,7 @@ import com.oracle.graal.nodes.virtual.*; import com.oracle.graal.phases.*; import com.oracle.graal.phases.common.*; +import com.oracle.graal.phases.tiers.*; import com.oracle.graal.replacements.nodes.*; public class ArrayCopyNode extends MacroNode implements Virtualizable, IterableNodeType, Lowerable { @@ -81,9 +82,10 @@ } // the canonicalization before loop unrolling is needed to propagate the length into // additions, etc. - new CanonicalizerPhase.Instance(tool.getRuntime(), tool.assumptions()).apply(snippetGraph); - new LoopFullUnrollPhase(tool.getRuntime(), tool.assumptions()).apply(snippetGraph); - new CanonicalizerPhase.Instance(tool.getRuntime(), tool.assumptions()).apply(snippetGraph); + HighTierContext context = new HighTierContext(tool.getRuntime(), tool.assumptions()); + new CanonicalizerPhase().apply(snippetGraph, context); + new LoopFullUnrollPhase().apply(snippetGraph, context); + new CanonicalizerPhase().apply(snippetGraph, context); } @Override diff -r fb2b0866e350 -r 989db61f2007 graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopFullUnrollPhase.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopFullUnrollPhase.java Fri Apr 12 17:17:29 2013 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/phases/LoopFullUnrollPhase.java Fri Apr 12 17:21:08 2013 +0200 @@ -22,26 +22,21 @@ */ package com.oracle.graal.loop.phases; -import com.oracle.graal.api.code.*; import com.oracle.graal.debug.*; import com.oracle.graal.loop.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.spi.*; import com.oracle.graal.phases.*; +import com.oracle.graal.phases.tiers.*; -public class LoopFullUnrollPhase extends Phase { +public class LoopFullUnrollPhase extends BasePhase { private static final DebugMetric FULLY_UNROLLED_LOOPS = Debug.metric("FullUnrolls"); - private final GraalCodeCacheProvider runtime; - private final Assumptions assumptions; - public LoopFullUnrollPhase(GraalCodeCacheProvider runtime, Assumptions assumptions) { - this.runtime = runtime; - this.assumptions = assumptions; + public LoopFullUnrollPhase() { } @Override - protected void run(StructuredGraph graph) { + protected void run(StructuredGraph graph, HighTierContext context) { if (graph.hasLoops()) { boolean peeled; do { @@ -51,7 +46,7 @@ for (LoopEx loop : dataCounted.countedLoops()) { if (LoopPolicies.shouldFullUnroll(loop)) { Debug.log("FullUnroll %s", loop); - LoopTransformations.fullUnroll(loop, runtime, assumptions); + LoopTransformations.fullUnroll(loop, context.getRuntime(), context.getAssumptions()); FULLY_UNROLLED_LOOPS.increment(); Debug.dump(graph, "After fullUnroll %s", loop); peeled = true;