changeset 19209:1e3b5204776f

LowLevelLowTierPhase: codeEmittingOrder and linearScanOrder to context.
author Josef Eisl <josef.eisl@jku.at>
date Fri, 06 Feb 2015 19:54:52 +0100
parents 81358265e0e0
children de456294b59a
files graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ControlFlowOptimizer.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/EdgeMoveOptimizer.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/NullCheckOptimizer.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/RedundantMoveElimination.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelLowTierPhase.java
diffstat 6 files changed, 27 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java	Fri Feb 06 19:43:08 2015 +0100
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java	Fri Feb 06 19:54:52 2015 +0100
@@ -347,8 +347,8 @@
         }
     }
 
-    public static <T extends AbstractBlock<T>> LIRGenerationResult emitLowLevel(Backend backend, TargetDescription target, LIR lir, List<T> codeEmittingOrder,
-                    @SuppressWarnings("unused") List<T> linearScanOrder, LIRGenerationResult lirGenRes, LIRGeneratorTool lirGen) {
+    public static <T extends AbstractBlock<T>> LIRGenerationResult emitLowLevel(Backend backend, TargetDescription target, LIR lir, List<T> codeEmittingOrder, List<T> linearScanOrder,
+                    LIRGenerationResult lirGenRes, LIRGeneratorTool lirGen) {
         try (Scope s0 = Debug.scope("HighTier")) {
             if (ConstantLoadOptimization.Options.ConstantLoadOptimization.getValue()) {
                 try (Scope s = Debug.scope("ConstantLoadOptimization", lir)) {
@@ -387,9 +387,10 @@
         }
 
         try (Scope s = Debug.scope("LowTier")) {
-            LowLevelLowTierPhase.Context<T> c = new LowLevelLowTierPhase.Context<>();
+            LowLevelLowTierPhase.Context<T> c = new LowLevelLowTierPhase.Context<>(codeEmittingOrder, linearScanOrder);
             new EdgeMoveOptimizer<T>().apply(target, lirGenRes, c);
-            ControlFlowOptimizer.optimize(lir, codeEmittingOrder);
+            new ControlFlowOptimizer<T>().apply(target, lirGenRes, c);
+
             if (lirGen.canEliminateRedundantMoves()) {
                 new RedundantMoveElimination<T>().apply(target, lirGenRes, c);
             }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ControlFlowOptimizer.java	Fri Feb 06 19:43:08 2015 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ControlFlowOptimizer.java	Fri Feb 06 19:54:52 2015 +0100
@@ -26,18 +26,23 @@
 
 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.compiler.common.cfg.*;
+import com.oracle.graal.lir.gen.*;
+import com.oracle.graal.lir.phases.*;
 
 /**
  * This class performs basic optimizations on the control flow graph after LIR generation.
  */
-public final class ControlFlowOptimizer {
+public final class ControlFlowOptimizer<B extends AbstractBlock<B>> extends LowLevelLowTierPhase<B> {
 
     /**
      * Performs control flow optimizations on the given LIR graph.
      */
-    public static <B extends AbstractBlock<B>> void optimize(LIR lir, List<B> codeEmittingOrder) {
+    @Override
+    protected void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder) {
+        LIR lir = lirGenRes.getLIR();
         new Optimizer<B>(lir).deleteEmptyBlocks(codeEmittingOrder);
     }
 
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/EdgeMoveOptimizer.java	Fri Feb 06 19:43:08 2015 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/EdgeMoveOptimizer.java	Fri Feb 06 19:54:52 2015 +0100
@@ -51,7 +51,7 @@
 public final class EdgeMoveOptimizer<B extends AbstractBlock<B>> extends LowLevelLowTierPhase<B> {
 
     @Override
-    protected void run(TargetDescription target, LIRGenerationResult lirGenRes) {
+    protected void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder) {
         LIR ir = lirGenRes.getLIR();
         Optimizer optimizer = new Optimizer(ir);
 
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/NullCheckOptimizer.java	Fri Feb 06 19:43:08 2015 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/NullCheckOptimizer.java	Fri Feb 06 19:54:52 2015 +0100
@@ -34,7 +34,7 @@
 public final class NullCheckOptimizer<B extends AbstractBlock<B>> extends LowLevelLowTierPhase<B> {
 
     @Override
-    protected void run(TargetDescription target, LIRGenerationResult lirGenRes) {
+    protected void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder) {
         LIR ir = lirGenRes.getLIR();
         List<? extends AbstractBlock<?>> blocks = ir.codeEmittingOrder();
         NullCheckOptimizer.foldNullChecks(ir, blocks, target.implicitNullCheckLimit);
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/RedundantMoveElimination.java	Fri Feb 06 19:43:08 2015 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/RedundantMoveElimination.java	Fri Feb 06 19:54:52 2015 +0100
@@ -44,7 +44,7 @@
 public final class RedundantMoveElimination<B extends AbstractBlock<B>> extends LowLevelLowTierPhase<B> {
 
     @Override
-    protected void run(TargetDescription target, LIRGenerationResult lirGenRes) {
+    protected void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder) {
         Optimization redundantMoveElimination = new Optimization();
         redundantMoveElimination.doOptimize(lirGenRes.getLIR(), lirGenRes.getFrameMap());
     }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelLowTierPhase.java	Fri Feb 06 19:43:08 2015 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelLowTierPhase.java	Fri Feb 06 19:54:52 2015 +0100
@@ -22,6 +22,8 @@
  */
 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.*;
@@ -29,13 +31,20 @@
 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;
+        }
     }
 
     @Override
     protected void run(TargetDescription target, LIRGenerationResult lirGenRes, Context<B> context) {
-        run(target, lirGenRes);
+        run(target, lirGenRes, context.codeEmittingOrder, context.linearScanOrder);
     }
 
-    protected abstract void run(TargetDescription target, LIRGenerationResult lirGenRes);
+    protected abstract void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder);
 
 }