# HG changeset patch # User Josef Eisl # Date 1433769576 -7200 # Node ID f0e4a8342803197b7943c195df9d41c5c9c6e8f6 # Parent 4005025656eeef8c3d5fe7e5aceb4df62effffc1 LinearScanLifetimeAnalysisPhase: make registerPriorityOfOutputOperand a member and move SSA specific stuff to SSALinearScanLifetimeAnalysisPhase. diff -r 4005025656ee -r f0e4a8342803 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanLifetimeAnalysisPhase.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanLifetimeAnalysisPhase.java Mon Jun 08 15:03:25 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanLifetimeAnalysisPhase.java Mon Jun 08 15:19:36 2015 +0200 @@ -22,19 +22,10 @@ */ package com.oracle.graal.lir.alloc.lsra; -import com.oracle.jvmci.code.StackSlot; -import com.oracle.jvmci.code.TargetDescription; -import com.oracle.jvmci.code.Register; -import com.oracle.jvmci.code.BailoutException; -import com.oracle.jvmci.meta.JavaConstant; -import com.oracle.jvmci.meta.Kind; -import com.oracle.jvmci.meta.Value; -import com.oracle.jvmci.meta.LIRKind; -import com.oracle.jvmci.meta.AllocatableValue; -import static com.oracle.jvmci.code.ValueUtil.*; import static com.oracle.graal.compiler.common.GraalOptions.*; import static com.oracle.graal.lir.LIRValueUtil.*; import static com.oracle.graal.lir.debug.LIRGenerationDebugContext.*; +import static com.oracle.jvmci.code.ValueUtil.*; import java.util.*; @@ -44,7 +35,6 @@ import com.oracle.graal.lir.*; import com.oracle.graal.lir.LIRInstruction.OperandFlag; import com.oracle.graal.lir.LIRInstruction.OperandMode; -import com.oracle.graal.lir.StandardOp.LabelOp; import com.oracle.graal.lir.StandardOp.MoveOp; import com.oracle.graal.lir.StandardOp.StackStoreOp; import com.oracle.graal.lir.alloc.lsra.Interval.RegisterPriority; @@ -53,9 +43,11 @@ import com.oracle.graal.lir.gen.*; import com.oracle.graal.lir.gen.LIRGeneratorTool.SpillMoveFactory; import com.oracle.graal.lir.phases.*; +import com.oracle.jvmci.code.*; import com.oracle.jvmci.common.*; import com.oracle.jvmci.debug.*; import com.oracle.jvmci.debug.Debug.Scope; +import com.oracle.jvmci.meta.*; class LinearScanLifetimeAnalysisPhase extends AllocationPhase { @@ -640,17 +632,12 @@ /** * Determines the register priority for an instruction's output/result operand. */ - private static RegisterPriority registerPriorityOfOutputOperand(LIRInstruction op) { + protected RegisterPriority registerPriorityOfOutputOperand(LIRInstruction op) { if (op instanceof MoveOp) { MoveOp move = (MoveOp) op; if (optimizeMethodArgument(move.getInput())) { return RegisterPriority.None; } - } else if (op instanceof LabelOp) { - LabelOp label = (LabelOp) op; - if (label.isPhiIn()) { - return RegisterPriority.None; - } } else if (op instanceof StackStoreOp) { return RegisterPriority.ShouldHaveRegister; } diff -r 4005025656ee -r f0e4a8342803 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/SSALinearScanLifetimeAnalysisPhase.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/SSALinearScanLifetimeAnalysisPhase.java Mon Jun 08 15:03:25 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/SSALinearScanLifetimeAnalysisPhase.java Mon Jun 08 15:19:36 2015 +0200 @@ -22,16 +22,16 @@ */ package com.oracle.graal.lir.alloc.lsra; -import com.oracle.jvmci.meta.Value; -import com.oracle.jvmci.meta.AllocatableValue; import java.util.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.LIRInstruction.OperandFlag; import com.oracle.graal.lir.LIRInstruction.OperandMode; import com.oracle.graal.lir.StandardOp.LabelOp; +import com.oracle.graal.lir.alloc.lsra.Interval.RegisterPriority; import com.oracle.graal.lir.ssa.*; import com.oracle.jvmci.debug.*; +import com.oracle.jvmci.meta.*; public class SSALinearScanLifetimeAnalysisPhase extends LinearScanLifetimeAnalysisPhase { @@ -72,4 +72,15 @@ } } } + + @Override + protected RegisterPriority registerPriorityOfOutputOperand(LIRInstruction op) { + if (op instanceof LabelOp) { + LabelOp label = (LabelOp) op; + if (label.isPhiIn()) { + return RegisterPriority.None; + } + } + return super.registerPriorityOfOutputOperand(op); + } }