Mercurial > hg > graal-compiler
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();