changeset 19219:edd93c34d015

LowLevelPhase: pass codeEmittingOrder and linearScanOrder to apply().
author Josef Eisl <josef.eisl@jku.at>
date Mon, 09 Feb 2015 11:23:13 +0100
parents 58f59bada2c1
children 1487207db440
files graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/constopt/ConstantLoadOptimization.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
diffstat 6 files changed, 37 insertions(+), 45 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java	Mon Feb 09 11:10:00 2015 +0100
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java	Mon Feb 09 11:23:13 2015 +0100
@@ -352,37 +352,37 @@
         try (Scope s0 = Debug.scope("LowLevelHighTier")) {
             LowLevelHighTierPhase.Context c = new LowLevelHighTierPhase.Context(lirGen);
             if (ConstantLoadOptimization.Options.ConstantLoadOptimization.getValue()) {
-                new ConstantLoadOptimization().apply(target, lirGenRes, c);
+                new ConstantLoadOptimization<T>().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, c);
             }
         }
 
         try (Scope s0 = Debug.scope("LowLevelMidTier")) {
-            LowLevelMidTierPhase.Context<T> c = new LowLevelMidTierPhase.Context<>(codeEmittingOrder, linearScanOrder);
+            LowLevelMidTierPhase.Context c = new LowLevelMidTierPhase.Context();
             if (backend.shouldAllocateRegisters()) {
-                new LinearScanPhase<T>().apply(target, lirGenRes, c);
+                new LinearScanPhase<T>().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, c);
             }
 
             // build frame map
             if (LSStackSlotAllocator.Options.LSStackSlotAllocation.getValue()) {
-                new LSStackSlotAllocator<T>().apply(target, lirGenRes, c);
+                new LSStackSlotAllocator<T>().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, c);
             } else {
-                new SimpleStackSlotAllocator<T>().apply(target, lirGenRes, c);
+                new SimpleStackSlotAllocator<T>().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, c);
             }
             if (backend.shouldAllocateRegisters()) {
                 // currently we mark locations only if we do register allocation
-                new LocationMarker<T>().apply(target, lirGenRes, c);
+                new LocationMarker<T>().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, c);
             }
         }
 
         try (Scope s = Debug.scope("LowLevelLowTier")) {
-            LowLevelLowTierPhase.Context<T> c = new LowLevelLowTierPhase.Context<>(codeEmittingOrder, linearScanOrder);
-            new EdgeMoveOptimizer<T>().apply(target, lirGenRes, c);
-            new ControlFlowOptimizer<T>().apply(target, lirGenRes, c);
+            LowLevelLowTierPhase.Context c = new LowLevelLowTierPhase.Context();
+            new EdgeMoveOptimizer<T>().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, c);
+            new ControlFlowOptimizer<T>().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, c);
 
             if (lirGen.canEliminateRedundantMoves()) {
-                new RedundantMoveElimination<T>().apply(target, lirGenRes, c);
+                new RedundantMoveElimination<T>().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, c);
             }
-            new NullCheckOptimizer<T>().apply(target, lirGenRes, c);
+            new NullCheckOptimizer<T>().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, c);
         }
 
         return lirGenRes;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/constopt/ConstantLoadOptimization.java	Mon Feb 09 11:10:00 2015 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/constopt/ConstantLoadOptimization.java	Mon Feb 09 11:23:13 2015 +0100
@@ -47,7 +47,7 @@
  * a constant, which is potentially scheduled into a block with high probability, with one or more
  * definitions in blocks with a lower probability.
  */
-public final class ConstantLoadOptimization extends LowLevelHighTierPhase {
+public final class ConstantLoadOptimization<B extends AbstractBlock<B>> extends LowLevelHighTierPhase<B> {
 
     public static class Options {
         // @formatter:off
@@ -57,7 +57,7 @@
     }
 
     @Override
-    protected void run(TargetDescription target, LIRGenerationResult lirGenRes, LIRGeneratorTool lirGen) {
+    protected void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder, LIRGeneratorTool lirGen) {
         new Optimization(lirGenRes.getLIR(), lirGen).apply();
     }
 
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelHighTierPhase.java	Mon Feb 09 11:10:00 2015 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelHighTierPhase.java	Mon Feb 09 11:23:13 2015 +0100
@@ -22,10 +22,13 @@
  */
 package com.oracle.graal.lir.phases;
 
+import java.util.*;
+
 import com.oracle.graal.api.code.*;
+import com.oracle.graal.compiler.common.cfg.*;
 import com.oracle.graal.lir.gen.*;
 
-public abstract class LowLevelHighTierPhase extends LowLevelPhase<LowLevelHighTierPhase.Context> {
+public abstract class LowLevelHighTierPhase<B extends AbstractBlock<B>> extends LowLevelPhase<LowLevelHighTierPhase.Context, B> {
 
     public static final class Context {
         private final LIRGeneratorTool lirGen;
@@ -37,10 +40,10 @@
     }
 
     @Override
-    protected void run(TargetDescription target, LIRGenerationResult lirGenRes, Context context) {
-        run(target, lirGenRes, context.lirGen);
+    protected final void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder, Context context) {
+        run(target, lirGenRes, codeEmittingOrder, linearScanOrder, context.lirGen);
     }
 
-    protected abstract void run(TargetDescription target, LIRGenerationResult lirGenRes, LIRGeneratorTool lirGen);
+    protected abstract void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder, LIRGeneratorTool lirGen);
 
 }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelLowTierPhase.java	Mon Feb 09 11:10:00 2015 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelLowTierPhase.java	Mon Feb 09 11:23:13 2015 +0100
@@ -28,21 +28,14 @@
 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.Context, B> {
 
-    public static final class Context<B extends AbstractBlock<B>> {
-        final List<B> codeEmittingOrder;
-        final List<B> linearScanOrder;
-
-        public Context(List<B> codeEmittingOrder, List<B> linearScanOrder) {
-            this.codeEmittingOrder = codeEmittingOrder;
-            this.linearScanOrder = linearScanOrder;
-        }
+    public static final class Context {
     }
 
     @Override
-    protected void run(TargetDescription target, LIRGenerationResult lirGenRes, Context<B> context) {
-        run(target, lirGenRes, context.codeEmittingOrder, context.linearScanOrder);
+    protected final void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder, Context context) {
+        run(target, lirGenRes, codeEmittingOrder, linearScanOrder);
     }
 
     protected abstract void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder);
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelMidTierPhase.java	Mon Feb 09 11:10:00 2015 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelMidTierPhase.java	Mon Feb 09 11:23:13 2015 +0100
@@ -28,21 +28,14 @@
 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.Context, B> {
 
-    public static final class Context<B extends AbstractBlock<B>> {
-        final List<B> codeEmittingOrder;
-        final List<B> linearScanOrder;
-
-        public Context(List<B> codeEmittingOrder, List<B> linearScanOrder) {
-            this.codeEmittingOrder = codeEmittingOrder;
-            this.linearScanOrder = linearScanOrder;
-        }
+    public static final class Context {
     }
 
     @Override
-    protected void run(TargetDescription target, LIRGenerationResult lirGenRes, Context<B> context) {
-        run(target, lirGenRes, context.codeEmittingOrder, context.linearScanOrder);
+    protected void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder, Context context) {
+        run(target, lirGenRes, codeEmittingOrder, linearScanOrder);
     }
 
     protected abstract void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder);
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelPhase.java	Mon Feb 09 11:10:00 2015 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelPhase.java	Mon Feb 09 11:23:13 2015 +0100
@@ -22,7 +22,10 @@
  */
 package com.oracle.graal.lir.phases;
 
+import java.util.*;
+
 import com.oracle.graal.api.code.*;
+import com.oracle.graal.compiler.common.cfg.*;
 import com.oracle.graal.debug.*;
 import com.oracle.graal.debug.Debug.Scope;
 import com.oracle.graal.debug.DebugMemUseTracker.Closeable;
@@ -34,7 +37,7 @@
  * Base class for all {@link LIR low-level} phases. Subclasses should be stateless. There will be
  * one global instance for each phase that is shared for all compilations.
  */
-public abstract class LowLevelPhase<C> {
+public abstract class LowLevelPhase<C, B extends AbstractBlock<B>> {
 
     private static final int PHASE_DUMP_LEVEL = 2;
 
@@ -55,13 +58,13 @@
         memUseTracker = Debug.memUseTracker("LowLevelPhaseMemUse_%s", getName());
     }
 
-    public final void apply(TargetDescription target, LIRGenerationResult lirGenRes, C context) {
-        apply(target, lirGenRes, context, true);
+    public final void apply(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder, C context) {
+        apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context, true);
     }
 
-    public final void apply(TargetDescription target, LIRGenerationResult lirGenRes, C context, boolean dumpLIR) {
+    public final void apply(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder, C context, boolean dumpLIR) {
         try (TimerCloseable a = timer.start(); Scope s = Debug.scope(getName(), this); Closeable c = memUseTracker.start()) {
-            run(target, lirGenRes, context);
+            run(target, lirGenRes, codeEmittingOrder, linearScanOrder, context);
             if (dumpLIR && Debug.isDumpEnabled(PHASE_DUMP_LEVEL)) {
                 Debug.dump(PHASE_DUMP_LEVEL, lirGenRes.getLIR(), "After phase %s", getName());
             }
@@ -70,7 +73,7 @@
         }
     }
 
-    protected abstract void run(TargetDescription target, LIRGenerationResult lirGenRes, C context);
+    protected abstract void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder, C context);
 
     protected CharSequence createName() {
         String className = LowLevelPhase.this.getClass().getName();