# HG changeset patch # User Josef Eisl # Date 1423248892 -3600 # Node ID 1e3b5204776f254424dbb463056a2fab227f0055 # Parent 81358265e0e0c8cfa6342d0adb8ac98bb8e874e5 LowLevelLowTierPhase: codeEmittingOrder and linearScanOrder to context. diff -r 81358265e0e0 -r 1e3b5204776f 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 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 > LIRGenerationResult emitLowLevel(Backend backend, TargetDescription target, LIR lir, List codeEmittingOrder, - @SuppressWarnings("unused") List linearScanOrder, LIRGenerationResult lirGenRes, LIRGeneratorTool lirGen) { + public static > LIRGenerationResult emitLowLevel(Backend backend, TargetDescription target, LIR lir, List codeEmittingOrder, List 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 c = new LowLevelLowTierPhase.Context<>(); + LowLevelLowTierPhase.Context c = new LowLevelLowTierPhase.Context<>(codeEmittingOrder, linearScanOrder); new EdgeMoveOptimizer().apply(target, lirGenRes, c); - ControlFlowOptimizer.optimize(lir, codeEmittingOrder); + new ControlFlowOptimizer().apply(target, lirGenRes, c); + if (lirGen.canEliminateRedundantMoves()) { new RedundantMoveElimination().apply(target, lirGenRes, c); } diff -r 81358265e0e0 -r 1e3b5204776f graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ControlFlowOptimizer.java --- 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> extends LowLevelLowTierPhase { /** * Performs control flow optimizations on the given LIR graph. */ - public static > void optimize(LIR lir, List codeEmittingOrder) { + @Override + protected void run(TargetDescription target, LIRGenerationResult lirGenRes, List codeEmittingOrder, List linearScanOrder) { + LIR lir = lirGenRes.getLIR(); new Optimizer(lir).deleteEmptyBlocks(codeEmittingOrder); } diff -r 81358265e0e0 -r 1e3b5204776f graal/com.oracle.graal.lir/src/com/oracle/graal/lir/EdgeMoveOptimizer.java --- 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> extends LowLevelLowTierPhase { @Override - protected void run(TargetDescription target, LIRGenerationResult lirGenRes) { + protected void run(TargetDescription target, LIRGenerationResult lirGenRes, List codeEmittingOrder, List linearScanOrder) { LIR ir = lirGenRes.getLIR(); Optimizer optimizer = new Optimizer(ir); diff -r 81358265e0e0 -r 1e3b5204776f graal/com.oracle.graal.lir/src/com/oracle/graal/lir/NullCheckOptimizer.java --- 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> extends LowLevelLowTierPhase { @Override - protected void run(TargetDescription target, LIRGenerationResult lirGenRes) { + protected void run(TargetDescription target, LIRGenerationResult lirGenRes, List codeEmittingOrder, List linearScanOrder) { LIR ir = lirGenRes.getLIR(); List> blocks = ir.codeEmittingOrder(); NullCheckOptimizer.foldNullChecks(ir, blocks, target.implicitNullCheckLimit); diff -r 81358265e0e0 -r 1e3b5204776f graal/com.oracle.graal.lir/src/com/oracle/graal/lir/RedundantMoveElimination.java --- 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> extends LowLevelLowTierPhase { @Override - protected void run(TargetDescription target, LIRGenerationResult lirGenRes) { + protected void run(TargetDescription target, LIRGenerationResult lirGenRes, List codeEmittingOrder, List linearScanOrder) { Optimization redundantMoveElimination = new Optimization(); redundantMoveElimination.doOptimize(lirGenRes.getLIR(), lirGenRes.getFrameMap()); } diff -r 81358265e0e0 -r 1e3b5204776f graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LowLevelLowTierPhase.java --- 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> extends LowLevelPhase> { public static final class Context> { + final List codeEmittingOrder; + final List linearScanOrder; + + public Context(List codeEmittingOrder, List linearScanOrder) { + this.codeEmittingOrder = codeEmittingOrder; + this.linearScanOrder = linearScanOrder; + } } @Override protected void run(TargetDescription target, LIRGenerationResult lirGenRes, Context 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 codeEmittingOrder, List linearScanOrder); }