Mercurial > hg > graal-compiler
changeset 19199:751489b93b2c
emitLIR: only pass LIRGenerationResult to LocationMarker, EdgeMoveOptimizer, RedundantMoveElimination, NullCheckOptimizer.
author | Josef Eisl <josef.eisl@jku.at> |
---|---|
date | Fri, 06 Feb 2015 10:59:56 +0100 |
parents | d599eeab1b53 |
children | 7f827cc5e4f7 |
files | graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.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/alloc/lsra/LocationMarker.java |
diffstat | 6 files changed, 23 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java Fri Feb 06 12:44:50 2015 +0100 +++ b/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java Fri Feb 06 10:59:56 2015 +0100 @@ -163,7 +163,7 @@ try (Scope s1 = Debug.scope("MarkLocations")) { if (backend.shouldAllocateRegisters()) { // currently we mark locations only if we do register allocation - LocationMarker.markLocations(lir, lirGenRes.getFrameMap()); + LocationMarker.markLocations(lirGenRes); } }
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Fri Feb 06 12:44:50 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Fri Feb 06 10:59:56 2015 +0100 @@ -367,17 +367,17 @@ try (Scope s1 = Debug.scope("MarkLocations")) { if (backend.shouldAllocateRegisters()) { // currently we mark locations only if we do register allocation - LocationMarker.markLocations(lir, lirGenRes.getFrameMap()); + LocationMarker.markLocations(lirGenRes); } } try (Scope s = Debug.scope("ControlFlowOptimizations")) { - EdgeMoveOptimizer.optimize(lir); + EdgeMoveOptimizer.optimize(lirGenRes); ControlFlowOptimizer.optimize(lir, codeEmittingOrder); if (lirGen.canEliminateRedundantMoves()) { - RedundantMoveElimination.optimize(lir, frameMapBuilder); + RedundantMoveElimination.optimize(lirGenRes); } - NullCheckOptimizer.optimize(lir, target.implicitNullCheckLimit); + NullCheckOptimizer.optimize(target, lirGenRes); Debug.dump(lir, "After control flow optimization"); } catch (Throwable e) {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/EdgeMoveOptimizer.java Fri Feb 06 12:44:50 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/EdgeMoveOptimizer.java Fri Feb 06 10:59:56 2015 +0100 @@ -26,6 +26,7 @@ import com.oracle.graal.compiler.common.cfg.*; import com.oracle.graal.lir.StandardOp.MoveOp; +import com.oracle.graal.lir.gen.*; /** * This class optimizes moves, particularly those that result from eliminating SSA form. @@ -50,7 +51,8 @@ /** * Optimizes moves on block edges. */ - public static void optimize(LIR ir) { + public static void optimize(LIRGenerationResult lirGenRes) { + LIR ir = lirGenRes.getLIR(); EdgeMoveOptimizer optimizer = new EdgeMoveOptimizer(ir); List<? extends AbstractBlock<?>> blockList = ir.linearScanOrder();
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/NullCheckOptimizer.java Fri Feb 06 12:44:50 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/NullCheckOptimizer.java Fri Feb 06 10:59:56 2015 +0100 @@ -24,15 +24,18 @@ import java.util.*; +import com.oracle.graal.api.code.*; import com.oracle.graal.compiler.common.cfg.*; import com.oracle.graal.lir.StandardOp.ImplicitNullCheck; import com.oracle.graal.lir.StandardOp.NullCheck; +import com.oracle.graal.lir.gen.*; public final class NullCheckOptimizer { - public static void optimize(LIR ir, int implicitNullCheckLimit) { + public static void optimize(TargetDescription target, LIRGenerationResult lirGenRes) { + LIR ir = lirGenRes.getLIR(); List<? extends AbstractBlock<?>> blocks = ir.codeEmittingOrder(); - NullCheckOptimizer.foldNullChecks(ir, blocks, implicitNullCheckLimit); + NullCheckOptimizer.foldNullChecks(ir, blocks, target.implicitNullCheckLimit); } private NullCheckOptimizer() {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/RedundantMoveElimination.java Fri Feb 06 12:44:50 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/RedundantMoveElimination.java Fri Feb 06 10:59:56 2015 +0100 @@ -35,15 +35,16 @@ import com.oracle.graal.lir.LIRInstruction.OperandMode; import com.oracle.graal.lir.StandardOp.MoveOp; import com.oracle.graal.lir.framemap.*; +import com.oracle.graal.lir.gen.*; /** * Removes move instructions, where the destination value is already in place. */ public final class RedundantMoveElimination { - public static void optimize(LIR lir, FrameMapBuilder frameMapBuilder) { + public static void optimize(LIRGenerationResult lirGenRes) { RedundantMoveElimination redundantMoveElimination = new RedundantMoveElimination(); - redundantMoveElimination.doOptimize(lir, frameMapBuilder); + redundantMoveElimination.doOptimize(lirGenRes.getLIR(), lirGenRes.getFrameMap()); } /** @@ -103,11 +104,11 @@ /** * The main method doing the elimination of redundant moves. */ - private void doOptimize(LIR lir, FrameMapBuilder frameMapBuilder) { + private void doOptimize(LIR lir, FrameMap frameMap) { try (Indent indent = Debug.logAndIndent("eliminate redundant moves")) { - callerSaveRegs = frameMapBuilder.getRegisterConfig().getCallerSaveRegisters(); + callerSaveRegs = frameMap.getRegisterConfig().getCallerSaveRegisters(); initBlockData(lir); @@ -115,7 +116,7 @@ // Unallocatable registers should never be optimized. eligibleRegs = new int[numRegs]; Arrays.fill(eligibleRegs, -1); - for (Register reg : frameMapBuilder.getRegisterConfig().getAllocatableRegisters()) { + for (Register reg : frameMap.getRegisterConfig().getAllocatableRegisters()) { if (reg.number < numRegs) { eligibleRegs[reg.number] = reg.number; }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LocationMarker.java Fri Feb 06 12:44:50 2015 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LocationMarker.java Fri Feb 06 10:59:56 2015 +0100 @@ -34,6 +34,7 @@ import com.oracle.graal.lir.LIRInstruction.OperandFlag; import com.oracle.graal.lir.LIRInstruction.OperandMode; import com.oracle.graal.lir.framemap.*; +import com.oracle.graal.lir.gen.*; import com.oracle.graal.options.*; public final class LocationMarker { @@ -49,8 +50,8 @@ * Mark all live references for a frame state. The frame state use this information to build the * OOP maps. */ - public static void markLocations(LIR lir, FrameMap frameMap) { - new LocationMarker(lir, frameMap).build(); + public static void markLocations(LIRGenerationResult lirGenRes) { + new LocationMarker(lirGenRes.getLIR(), lirGenRes.getFrameMap()).build(); } private final LIR lir; @@ -218,4 +219,5 @@ private RegisterAttributes attributes(Register reg) { return registerAttributes[reg.number]; } + }