# HG changeset patch # User Josef Eisl # Date 1423216796 -3600 # Node ID 751489b93b2c16d6f0392bebc5eff43033ff8ac6 # Parent d599eeab1b532695ad55e6185664dbadaa5bb51f emitLIR: only pass LIRGenerationResult to LocationMarker, EdgeMoveOptimizer, RedundantMoveElimination, NullCheckOptimizer. diff -r d599eeab1b53 -r 751489b93b2c graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java --- 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); } } diff -r d599eeab1b53 -r 751489b93b2c 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 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) { diff -r d599eeab1b53 -r 751489b93b2c 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 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> blockList = ir.linearScanOrder(); diff -r d599eeab1b53 -r 751489b93b2c 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 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> blocks = ir.codeEmittingOrder(); - NullCheckOptimizer.foldNullChecks(ir, blocks, implicitNullCheckLimit); + NullCheckOptimizer.foldNullChecks(ir, blocks, target.implicitNullCheckLimit); } private NullCheckOptimizer() { diff -r d599eeab1b53 -r 751489b93b2c 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 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; } diff -r d599eeab1b53 -r 751489b93b2c graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LocationMarker.java --- 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]; } + }