Mercurial > hg > graal-compiler
changeset 19226:9c47b23fb0a2
LowLevelPhase: add support for custom name.
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Mon Feb 09 14:19:03 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Mon Feb 09 15:10:13 2015 +0100 @@ -45,6 +45,9 @@ import com.oracle.graal.lir.framemap.*; import com.oracle.graal.lir.gen.*; import com.oracle.graal.lir.phases.*; +import com.oracle.graal.lir.phases.LowLevelHighTierPhase.LowLevelHighTierContext; +import com.oracle.graal.lir.phases.LowLevelLowTierPhase.LowLevelLowTierContext; +import com.oracle.graal.lir.phases.LowLevelMidTierPhase.LowLevelMidTierContext; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.cfg.*; import com.oracle.graal.nodes.spi.*; @@ -348,17 +351,17 @@ public static <T extends AbstractBlock<T>> LIRGenerationResult emitLowLevel(TargetDescription target, List<T> codeEmittingOrder, List<T> linearScanOrder, LIRGenerationResult lirGenRes, LIRGeneratorTool lirGen, LowLevelCompilerConfiguration config) { try (Scope s0 = Debug.scope("LowLevelHighTier")) { - LowLevelHighTierPhase.Context c = new LowLevelHighTierPhase.Context(lirGen); + LowLevelHighTierContext c = new LowLevelHighTierContext(lirGen); config.<T> createHighTier().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, c); } try (Scope s0 = Debug.scope("LowLevelMidTier")) { - LowLevelMidTierPhase.Context c = new LowLevelMidTierPhase.Context(); + LowLevelMidTierContext c = new LowLevelMidTierContext(); config.<T> createMidTier().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, c); } try (Scope s = Debug.scope("LowLevelLowTier")) { - LowLevelLowTierPhase.Context c = new LowLevelLowTierPhase.Context(); + LowLevelLowTierContext c = new LowLevelLowTierContext(); config.<T> createLowTier().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, c); }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/DefaultLowLevelCompilerConfiguration.java Mon Feb 09 14:19:03 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/DefaultLowLevelCompilerConfiguration.java Mon Feb 09 15:10:13 2015 +0100 @@ -26,21 +26,23 @@ import com.oracle.graal.lir.*; import com.oracle.graal.lir.alloc.lsra.*; import com.oracle.graal.lir.constopt.*; -import com.oracle.graal.lir.phases.LowLevelMidTierPhase.Context; +import com.oracle.graal.lir.phases.LowLevelHighTierPhase.LowLevelHighTierContext; +import com.oracle.graal.lir.phases.LowLevelLowTierPhase.LowLevelLowTierContext; +import com.oracle.graal.lir.phases.LowLevelMidTierPhase.LowLevelMidTierContext; import com.oracle.graal.lir.stackslotalloc.*; public class DefaultLowLevelCompilerConfiguration implements LowLevelCompilerConfiguration { - public <B extends AbstractBlock<B>> LowLevelPhaseSuite<LowLevelHighTierPhase.Context, B> createHighTier() { - LowLevelPhaseSuite<LowLevelHighTierPhase.Context, B> suite = new LowLevelPhaseSuite<>(); + public <B extends AbstractBlock<B>> LowLevelPhaseSuite<LowLevelHighTierContext, B> createHighTier() { + LowLevelPhaseSuite<LowLevelHighTierContext, B> suite = new LowLevelPhaseSuite<>(LowLevelHighTierContext.class); if (ConstantLoadOptimization.Options.ConstantLoadOptimization.getValue()) { suite.appendPhase(new ConstantLoadOptimization<B>()); } return suite; } - public <B extends AbstractBlock<B>> LowLevelPhaseSuite<Context, B> createMidTier() { - LowLevelPhaseSuite<LowLevelMidTierPhase.Context, B> suite = new LowLevelPhaseSuite<>(); + public <B extends AbstractBlock<B>> LowLevelPhaseSuite<LowLevelMidTierContext, B> createMidTier() { + LowLevelPhaseSuite<LowLevelMidTierContext, B> suite = new LowLevelPhaseSuite<>(LowLevelMidTierContext.class); suite.appendPhase(new LinearScanPhase<B>()); // build frame map @@ -54,8 +56,8 @@ return suite; } - public <B extends AbstractBlock<B>> LowLevelPhaseSuite<com.oracle.graal.lir.phases.LowLevelLowTierPhase.Context, B> createLowTier() { - LowLevelPhaseSuite<LowLevelLowTierPhase.Context, B> suite = new LowLevelPhaseSuite<>(); + public <B extends AbstractBlock<B>> LowLevelPhaseSuite<LowLevelLowTierContext, B> createLowTier() { + LowLevelPhaseSuite<LowLevelLowTierContext, B> suite = new LowLevelPhaseSuite<>(LowLevelLowTierContext.class); suite.appendPhase(new EdgeMoveOptimizer<B>()); suite.appendPhase(new ControlFlowOptimizer<B>()); suite.appendPhase(new RedundantMoveElimination<B>());
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelCompilerConfiguration.java Mon Feb 09 14:19:03 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelCompilerConfiguration.java Mon Feb 09 15:10:13 2015 +0100 @@ -23,12 +23,15 @@ package com.oracle.graal.lir.phases; import com.oracle.graal.compiler.common.cfg.*; +import com.oracle.graal.lir.phases.LowLevelHighTierPhase.LowLevelHighTierContext; +import com.oracle.graal.lir.phases.LowLevelLowTierPhase.LowLevelLowTierContext; +import com.oracle.graal.lir.phases.LowLevelMidTierPhase.LowLevelMidTierContext; public interface LowLevelCompilerConfiguration { - <B extends AbstractBlock<B>> LowLevelPhaseSuite<LowLevelHighTierPhase.Context, B> createHighTier(); + <B extends AbstractBlock<B>> LowLevelPhaseSuite<LowLevelHighTierContext, B> createHighTier(); - <B extends AbstractBlock<B>> LowLevelPhaseSuite<LowLevelMidTierPhase.Context, B> createMidTier(); + <B extends AbstractBlock<B>> LowLevelPhaseSuite<LowLevelMidTierContext, B> createMidTier(); - <B extends AbstractBlock<B>> LowLevelPhaseSuite<LowLevelLowTierPhase.Context, B> createLowTier(); + <B extends AbstractBlock<B>> LowLevelPhaseSuite<LowLevelLowTierContext, B> createLowTier(); }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelHighTierPhase.java Mon Feb 09 14:19:03 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelHighTierPhase.java Mon Feb 09 15:10:13 2015 +0100 @@ -28,19 +28,19 @@ import com.oracle.graal.compiler.common.cfg.*; import com.oracle.graal.lir.gen.*; -public abstract class LowLevelHighTierPhase<B extends AbstractBlock<B>> extends LowLevelPhase<LowLevelHighTierPhase.Context, B> { +public abstract class LowLevelHighTierPhase<B extends AbstractBlock<B>> extends LowLevelPhase<LowLevelHighTierPhase.LowLevelHighTierContext, B> { - public static final class Context { + public static final class LowLevelHighTierContext { private final LIRGeneratorTool lirGen; - public Context(LIRGeneratorTool lirGen) { + public LowLevelHighTierContext(LIRGeneratorTool lirGen) { this.lirGen = lirGen; } } @Override - protected final void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder, Context context) { + protected final void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder, LowLevelHighTierContext context) { run(target, lirGenRes, codeEmittingOrder, linearScanOrder, context.lirGen); }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelLowTierPhase.java Mon Feb 09 14:19:03 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelLowTierPhase.java Mon Feb 09 15:10:13 2015 +0100 @@ -28,13 +28,13 @@ import com.oracle.graal.compiler.common.cfg.*; import com.oracle.graal.lir.gen.*; -public abstract class LowLevelLowTierPhase<B extends AbstractBlock<B>> extends LowLevelPhase<LowLevelLowTierPhase.Context, B> { +public abstract class LowLevelLowTierPhase<B extends AbstractBlock<B>> extends LowLevelPhase<LowLevelLowTierPhase.LowLevelLowTierContext, B> { - public static final class Context { + public static final class LowLevelLowTierContext { } @Override - protected final void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder, Context context) { + protected final void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder, LowLevelLowTierContext context) { run(target, lirGenRes, codeEmittingOrder, linearScanOrder); }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelMidTierPhase.java Mon Feb 09 14:19:03 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelMidTierPhase.java Mon Feb 09 15:10:13 2015 +0100 @@ -28,13 +28,13 @@ import com.oracle.graal.compiler.common.cfg.*; import com.oracle.graal.lir.gen.*; -public abstract class LowLevelMidTierPhase<B extends AbstractBlock<B>> extends LowLevelPhase<LowLevelMidTierPhase.Context, B> { +public abstract class LowLevelMidTierPhase<B extends AbstractBlock<B>> extends LowLevelPhase<LowLevelMidTierPhase.LowLevelMidTierContext, B> { - public static final class Context { + public static final class LowLevelMidTierContext { } @Override - protected void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder, Context context) { + protected void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder, LowLevelMidTierContext context) { run(target, lirGenRes, codeEmittingOrder, linearScanOrder); }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelPhase.java Mon Feb 09 14:19:03 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelPhase.java Mon Feb 09 15:10:13 2015 +0100 @@ -23,6 +23,7 @@ package com.oracle.graal.lir.phases; import java.util.*; +import java.util.regex.*; import com.oracle.graal.api.code.*; import com.oracle.graal.compiler.common.cfg.*; @@ -53,9 +54,23 @@ */ private final DebugMemUseTracker memUseTracker; + private static final Pattern NAME_PATTERN = Pattern.compile("[A-Z][A-Za-z0-9]+"); + + private static boolean checkName(String name) { + assert name == null || NAME_PATTERN.matcher(name).matches() : "illegal phase name: " + name; + return true; + } + public LowLevelPhase() { - timer = Debug.timer("LowLevelPhaseTime_%s", getName()); - memUseTracker = Debug.memUseTracker("LowLevelPhaseMemUse_%s", getName()); + timer = Debug.timer("LowLevelPhaseTime_%s", getClass()); + memUseTracker = Debug.memUseTracker("LowLevelPhaseMemUse_%s", getClass()); + } + + protected LowLevelPhase(String name) { + assert checkName(name); + this.name = name; + timer = Debug.timer("LowLevelPhaseTime_%s", getClass()); + memUseTracker = Debug.memUseTracker("LowLevelPhaseMemUse_%s", getClass()); } public final void apply(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder, C context) {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelPhaseSuite.java Mon Feb 09 14:19:03 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelPhaseSuite.java Mon Feb 09 15:10:13 2015 +0100 @@ -31,10 +31,21 @@ public class LowLevelPhaseSuite<C, B extends AbstractBlock<B>> extends LowLevelPhase<C, B> { private final List<LowLevelPhase<C, B>> phases; - public LowLevelPhaseSuite() { + public LowLevelPhaseSuite(Class<C> contextClass) { + super(getNameFromContext(contextClass)); phases = new ArrayList<>(); } + private static <C> String getNameFromContext(Class<C> contextClass) { + String className = contextClass.getName(); + String s0 = className.substring(className.lastIndexOf(".") + 1); // strip the package name + String s = s0.substring(s0.lastIndexOf("$") + 1); // strip the enclosing class name + if (s.endsWith("Context")) { + s = s.substring(0, s.length() - "Context".length()); + } + return s; + } + /** * Add a new phase at the beginning of this suite. */