# HG changeset patch # User Josef Eisl # Date 1432126884 -7200 # Node ID 1c8383a27c1b7eee8afd064a907bcad50626eecf # Parent 3ea8e7e75625e924ffa5f5e16919b09958f95dd4 LinearScan: move LinearScanEliminateSpillMovePhase#beforeSpillMoveElimination to LinearScan. diff -r 3ea8e7e75625 -r 1c8383a27c1b 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 Mon May 18 14:39:43 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScan.java Wed May 20 15:01:24 2015 +0200 @@ -646,7 +646,7 @@ if (DetailedAsserts.getValue()) { verify(); } - + beforeSpillMoveElimination(); createSpillMoveEliminationPhase().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context); createAssignLocationsPhase().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context); @@ -659,6 +659,9 @@ } } + protected void beforeSpillMoveElimination() { + } + protected LinearScanLifetimeAnalysisPhase createLifetimeAnalysisPhase() { return new LinearScanLifetimeAnalysisPhase(this); } diff -r 3ea8e7e75625 -r 1c8383a27c1b graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanEliminateSpillMovePhase.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanEliminateSpillMovePhase.java Mon May 18 14:39:43 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanEliminateSpillMovePhase.java Wed May 20 15:01:24 2015 +0200 @@ -58,13 +58,9 @@ @Override protected > void run(TargetDescription target, LIRGenerationResult lirGenRes, List codeEmittingOrder, List linearScanOrder, SpillMoveFactory spillMoveFactory) { - beforeSpillMoveElimination(); eliminateSpillMoves(); } - protected void beforeSpillMoveElimination() { - } - /** * @return the index of the first instruction that is of interest for * {@link #eliminateSpillMoves()} diff -r 3ea8e7e75625 -r 1c8383a27c1b 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 Mon May 18 14:39:43 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/SSALinearScan.java Wed May 20 15:01:24 2015 +0200 @@ -24,8 +24,12 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.compiler.common.alloc.*; +import com.oracle.graal.compiler.common.cfg.*; +import com.oracle.graal.debug.*; +import com.oracle.graal.debug.Debug.Scope; import com.oracle.graal.lir.gen.*; import com.oracle.graal.lir.gen.LIRGeneratorTool.SpillMoveFactory; +import com.oracle.graal.lir.ssa.*; final class SSALinearScan extends LinearScan { @@ -55,4 +59,19 @@ return new SSALinearScanEliminateSpillMovePhase(this); } + @Override + protected void beforeSpillMoveElimination() { + /* + * PHI Ins are needed for the RegisterVerifier, otherwise PHIs where the Out and In value + * matches (ie. there is no resolution move) are falsely detected as errors. + */ + try (Scope s1 = Debug.scope("Remove Phi In")) { + for (AbstractBlockBase toBlock : sortedBlocks) { + if (toBlock.getPredecessorCount() > 1) { + SSAUtils.removePhiIn(ir, toBlock); + } + } + } + } + } diff -r 3ea8e7e75625 -r 1c8383a27c1b graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/SSALinearScanEliminateSpillMovePhase.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/SSALinearScanEliminateSpillMovePhase.java Mon May 18 14:39:43 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/SSALinearScanEliminateSpillMovePhase.java Wed May 20 15:01:24 2015 +0200 @@ -27,10 +27,9 @@ import com.oracle.graal.compiler.common.cfg.*; import com.oracle.graal.debug.*; -import com.oracle.graal.debug.Debug.*; import com.oracle.graal.lir.*; -import com.oracle.graal.lir.StandardOp.*; -import com.oracle.graal.lir.ssa.*; +import com.oracle.graal.lir.StandardOp.LabelOp; +import com.oracle.graal.lir.StandardOp.MoveOp; public class SSALinearScanEliminateSpillMovePhase extends LinearScanEliminateSpillMovePhase { @@ -45,21 +44,6 @@ } @Override - protected void beforeSpillMoveElimination() { - /* - * PHI Ins are needed for the RegisterVerifier, otherwise PHIs where the Out and In value - * matches (ie. there is no resolution move) are falsely detected as errors. - */ - try (Scope s1 = Debug.scope("Remove Phi In")) { - for (AbstractBlockBase toBlock : allocator.sortedBlocks) { - if (toBlock.getPredecessorCount() > 1) { - SSAUtils.removePhiIn(allocator.ir, toBlock); - } - } - } - } - - @Override protected boolean canEliminateSpillMove(AbstractBlockBase block, MoveOp move) { // SSA Linear Scan might introduce moves to stack slots assert isVariable(move.getResult()) || LinearScanPhase.SSA_LSRA.getValue() : "Move should not be produced in a non-SSA compilation: " + move;