Mercurial > hg > graal-compiler
changeset 22807:b62242b9ddd7
Make neverSpillConstants a field on LinearScanPhase instead of an option
author | Christian Wimmer <christian.wimmer@oracle.com> |
---|---|
date | Tue, 13 Oct 2015 09:24:13 -0700 |
parents | a1f3697dd144 |
children | 4e901bdcf656 |
files | graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/BackendOptions.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScan.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanPhase.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssa/SSALinearScan.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssi/SSILinearScan.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceRegisterAllocationPhase.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LIRPhaseSuite.java |
diffstat | 7 files changed, 27 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/BackendOptions.java Tue Oct 13 10:38:14 2015 +0200 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/BackendOptions.java Tue Oct 13 09:24:13 2015 -0700 @@ -41,8 +41,6 @@ public static final OptionValue<Boolean> LIROptSSILinearScan = new OptionValue<>(false); @Option(help = "Enable experimental Trace Register Allocation.", type = OptionType.Debug) public static final OptionValue<Boolean> TraceRA = new OptionValue<>(false); - @Option(help = "Never spill constant intervals.", type = OptionType.Debug) - public static final OptionValue<Boolean> NeverSpillConstants = new OptionValue<>(false); @Option(help = "Support object constant to stack move.", type = OptionType.Debug) public static final OptionValue<Boolean> AllowObjectConstantToStackMove = new OptionValue<>(true); // @formatter:on
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScan.java Tue Oct 13 10:38:14 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScan.java Tue Oct 13 09:24:13 2015 -0700 @@ -52,7 +52,6 @@ import jdk.vm.ci.options.OptionType; import jdk.vm.ci.options.OptionValue; -import com.oracle.graal.compiler.common.BackendOptions; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; import com.oracle.graal.compiler.common.cfg.BlockMap; @@ -175,7 +174,7 @@ private final boolean neverSpillConstants; protected LinearScan(TargetDescription target, LIRGenerationResult res, SpillMoveFactory spillMoveFactory, RegisterAllocationConfig regAllocConfig, - List<? extends AbstractBlockBase<?>> sortedBlocks) { + List<? extends AbstractBlockBase<?>> sortedBlocks, boolean neverSpillConstants) { this.ir = res.getLIR(); this.moveFactory = spillMoveFactory; this.frameMapBuilder = res.getFrameMapBuilder(); @@ -186,7 +185,7 @@ this.registers = target.arch.getRegisters(); this.firstVariableNumber = getRegisters().length; this.blockData = new BlockMap<>(ir.getControlFlowGraph()); - this.neverSpillConstants = BackendOptions.UserOptions.NeverSpillConstants.getValue(); + this.neverSpillConstants = neverSpillConstants; } public int getFirstLirInstructionId(AbstractBlockBase<?> block) {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanPhase.java Tue Oct 13 10:38:14 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanPhase.java Tue Oct 13 09:24:13 2015 -0700 @@ -39,24 +39,29 @@ public final class LinearScanPhase extends AllocationPhase { + private boolean neverSpillConstants; + + public void setNeverSpillConstants(boolean neverSpillConstants) { + this.neverSpillConstants = neverSpillConstants; + } + @Override protected <B extends AbstractBlockBase<B>> void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder, SpillMoveFactory spillMoveFactory, RegisterAllocationConfig registerAllocationConfig) { final LinearScan allocator; switch (LinearScanVariant.getValue()) { case SSI_LSRA: - allocator = new SSILinearScan(target, lirGenRes, spillMoveFactory, registerAllocationConfig, linearScanOrder); + allocator = new SSILinearScan(target, lirGenRes, spillMoveFactory, registerAllocationConfig, linearScanOrder, neverSpillConstants); break; case SSA_LSRA: - allocator = new SSALinearScan(target, lirGenRes, spillMoveFactory, registerAllocationConfig, linearScanOrder); + allocator = new SSALinearScan(target, lirGenRes, spillMoveFactory, registerAllocationConfig, linearScanOrder, neverSpillConstants); break; case NONSSA_LSAR: - allocator = new LinearScan(target, lirGenRes, spillMoveFactory, registerAllocationConfig, linearScanOrder); + allocator = new LinearScan(target, lirGenRes, spillMoveFactory, registerAllocationConfig, linearScanOrder, neverSpillConstants); break; default: throw JVMCIError.shouldNotReachHere(); } allocator.allocate(target, lirGenRes, codeEmittingOrder, linearScanOrder, spillMoveFactory, registerAllocationConfig); } - }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssa/SSALinearScan.java Tue Oct 13 10:38:14 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssa/SSALinearScan.java Tue Oct 13 09:24:13 2015 -0700 @@ -42,8 +42,8 @@ public final class SSALinearScan extends LinearScan { public SSALinearScan(TargetDescription target, LIRGenerationResult res, SpillMoveFactory spillMoveFactory, RegisterAllocationConfig regAllocConfig, - List<? extends AbstractBlockBase<?>> sortedBlocks) { - super(target, res, spillMoveFactory, regAllocConfig, sortedBlocks); + List<? extends AbstractBlockBase<?>> sortedBlocks, boolean neverSpillConstants) { + super(target, res, spillMoveFactory, regAllocConfig, sortedBlocks, neverSpillConstants); } @Override
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssi/SSILinearScan.java Tue Oct 13 10:38:14 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/ssi/SSILinearScan.java Tue Oct 13 09:24:13 2015 -0700 @@ -41,8 +41,8 @@ public final class SSILinearScan extends LinearScan { public SSILinearScan(TargetDescription target, LIRGenerationResult res, SpillMoveFactory spillMoveFactory, RegisterAllocationConfig regAllocConfig, - List<? extends AbstractBlockBase<?>> sortedBlocks) { - super(target, res, spillMoveFactory, regAllocConfig, sortedBlocks); + List<? extends AbstractBlockBase<?>> sortedBlocks, boolean neverSpillConstants) { + super(target, res, spillMoveFactory, regAllocConfig, sortedBlocks, neverSpillConstants); } @Override
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceRegisterAllocationPhase.java Tue Oct 13 10:38:14 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceRegisterAllocationPhase.java Tue Oct 13 09:24:13 2015 -0700 @@ -31,7 +31,6 @@ import jdk.vm.ci.options.OptionType; import jdk.vm.ci.options.OptionValue; -import com.oracle.graal.compiler.common.BackendOptions; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.alloc.TraceBuilder; import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult; @@ -80,7 +79,6 @@ TraceBuilderResult<B> resultTraces = TraceBuilder.computeTraces(startBlock, linearScanOrder); TraceStatisticsPrinter.printTraceStatistics(resultTraces, lirGenRes.getCompilationUnitName()); - boolean neverSpillConstants = BackendOptions.UserOptions.NeverSpillConstants.getValue(); Debug.dump(lir, "Before TraceRegisterAllocation"); int traceNumber = 0; for (List<B> trace : resultTraces.getTraces()) { @@ -93,7 +91,7 @@ if (Options.TraceRAtrivialBlockAllocator.getValue() && isTrivialTrace(lir, trace)) { new TraceTrivialAllocator(resultTraces).apply(target, lirGenRes, codeEmittingOrder, trace, new TraceAllocationContext(spillMoveFactory, registerAllocationConfig), false); } else { - TraceLinearScan allocator = new TraceLinearScan(target, lirGenRes, spillMoveFactory, registerAllocationConfig, trace, resultTraces, neverSpillConstants); + TraceLinearScan allocator = new TraceLinearScan(target, lirGenRes, spillMoveFactory, registerAllocationConfig, trace, resultTraces, false); allocator.allocate(target, lirGenRes, codeEmittingOrder, linearScanOrder, spillMoveFactory, registerAllocationConfig); } Debug.dump(TRACE_DUMP_LEVEL, trace, "After Trace" + traceNumber + ": " + trace);
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LIRPhaseSuite.java Tue Oct 13 10:38:14 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/phases/LIRPhaseSuite.java Tue Oct 13 09:24:13 2015 -0700 @@ -61,6 +61,17 @@ } } + public final <T extends LIRPhase<C>> T findPhaseInstance(Class<T> phaseClass) { + ListIterator<LIRPhase<C>> it = phases.listIterator(); + while (it.hasNext()) { + LIRPhase<C> phase = it.next(); + if (phaseClass.isInstance(phase)) { + return phaseClass.cast(phase); + } + } + return null; + } + public static <C> boolean findNextPhase(ListIterator<LIRPhase<C>> it, Class<? extends LIRPhase<C>> phaseClass) { while (it.hasNext()) { LIRPhase<C> phase = it.next();