# HG changeset patch # User Josef Eisl # Date 1431421465 -7200 # Node ID 3570b7d1a6f9656be29a80e2785346048b436115 # Parent 73942ac6e6508836bc8491004fb60cf8a3279a36 LinearScan: create factory methods for subr- phases. diff -r 73942ac6e650 -r 3570b7d1a6f9 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScan.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScan.java Tue May 12 10:57:59 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScan.java Tue May 12 11:04:25 2015 +0200 @@ -1133,7 +1133,7 @@ * instruction is a branch, spill moves are inserted before this branch and so the * wrong operand would be returned (spill moves at block boundaries are not * considered in the live ranges of intervals). - * + * * Solution: use the first opId of the branch target block instead. */ final LIRInstruction instr = ir.getLIRforBlock(block).get(ir.getLIRforBlock(block).size() - 1); @@ -1225,10 +1225,6 @@ } } - protected LifetimeAnalysis createLifetimeAnalysis() { - return new LifetimeAnalysis(this); - } - > void allocate(TargetDescription target, LIRGenerationResult lirGenRes, List codeEmittingOrder, List linearScanOrder, SpillMoveFactory spillMoveFactory) { /* @@ -1237,13 +1233,13 @@ try (Indent indent = Debug.logAndIndent("LinearScan allocate")) { AllocationContext context = new AllocationContext(spillMoveFactory); - createLifetimeAnalysis().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context, false); - new RegisterAllocation().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context, false); + createLifetimeAnalysisPhase().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context, false); + createRegisterAllocationPhase().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context, false); if (LinearScan.Options.LSRAOptimizeSpillPosition.getValue()) { - new OptimizeSpillPosition(this).apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context, false); + createOptimizeSpillPositionPhase().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context, false); } - new ResolveDataFlow().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context); + createResolveDataFlowPhase().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context); sortIntervalsAfterAllocation(); @@ -1251,8 +1247,8 @@ verify(); } - new EliminateSpillMove().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context); - new AssignLocations().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context); + createSpillMoveEliminationPhase().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context); + createAssignLocationsPhase().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context); if (DetailedAsserts.getValue()) { verifyIntervals(); @@ -1260,6 +1256,30 @@ } } + protected LifetimeAnalysis createLifetimeAnalysisPhase() { + return new LifetimeAnalysis(this); + } + + protected RegisterAllocation createRegisterAllocationPhase() { + return new RegisterAllocation(); + } + + protected OptimizeSpillPosition createOptimizeSpillPositionPhase() { + return new OptimizeSpillPosition(this); + } + + protected ResolveDataFlow createResolveDataFlowPhase() { + return new ResolveDataFlow(); + } + + protected EliminateSpillMove createSpillMoveEliminationPhase() { + return new EliminateSpillMove(); + } + + protected AssignLocations createAssignLocationsPhase() { + return new AssignLocations(); + } + private final class RegisterAllocation extends AllocationPhase { @Override diff -r 73942ac6e650 -r 3570b7d1a6f9 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/SSALinearScan.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/SSALinearScan.java Tue May 12 10:57:59 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/SSALinearScan.java Tue May 12 11:04:25 2015 +0200 @@ -134,7 +134,7 @@ } @Override - protected LifetimeAnalysis createLifetimeAnalysis() { + protected LifetimeAnalysis createLifetimeAnalysisPhase() { return new SSALifetimeAnalysis(this); }