changeset 19226:9c47b23fb0a2

LowLevelPhase: add support for custom name.
author Josef Eisl <josef.eisl@jku.at>
date Mon, 09 Feb 2015 15:10:13 +0100
parents e20a4aab49ad
children 6e495e8cc407
files graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/DefaultLowLevelCompilerConfiguration.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelCompilerConfiguration.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelHighTierPhase.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelLowTierPhase.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelMidTierPhase.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelPhase.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelPhaseSuite.java
diffstat 8 files changed, 60 insertions(+), 26 deletions(-) [+]
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.
      */