Mercurial > hg > graal-compiler
changeset 22826:b3fdc3758e07
LinearScan: add LIROptLSRAEliminateSpillMoves option.
author | Josef Eisl <josef.eisl@jku.at> |
---|---|
date | Tue, 13 Oct 2015 11:24:41 +0200 |
parents | c7753ef3467e |
children | eb99bf98f076 |
files | graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanEliminateSpillMovePhase.java |
diffstat | 1 files changed, 13 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanEliminateSpillMovePhase.java Thu Oct 15 11:58:34 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanEliminateSpillMovePhase.java Tue Oct 13 11:24:41 2015 +0200 @@ -24,6 +24,7 @@ import static com.oracle.graal.compiler.common.GraalOptions.DetailedAsserts; import static com.oracle.graal.lir.LIRValueUtil.isVariable; +import static com.oracle.graal.lir.phases.LIRPhase.Options.LIROptimization; import static jdk.vm.ci.code.ValueUtil.isRegister; import static jdk.vm.ci.code.ValueUtil.isStackSlotValue; @@ -31,6 +32,10 @@ import jdk.vm.ci.code.TargetDescription; import jdk.vm.ci.meta.AllocatableValue; +import jdk.vm.ci.options.NestedBooleanOptionValue; +import jdk.vm.ci.options.Option; +import jdk.vm.ci.options.OptionType; +import jdk.vm.ci.options.OptionValue; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; @@ -49,6 +54,13 @@ public class LinearScanEliminateSpillMovePhase extends AllocationPhase { + public static class Options { + // @formatter:off + @Option(help = "Enable spill move elimination.", type = OptionType.Debug) + public static final OptionValue<Boolean> LIROptLSRAEliminateSpillMoves = new NestedBooleanOptionValue(LIROptimization, true); + // @formatter:on + } + private static final IntervalPredicate mustStoreAtDefinition = new LinearScan.IntervalPredicate() { @Override @@ -111,7 +123,7 @@ * be correct. Only moves that have been inserted by LinearScan can be * removed. */ - if (canEliminateSpillMove(block, move)) { + if (Options.LIROptLSRAEliminateSpillMoves.getValue() && canEliminateSpillMove(block, move)) { /* * Move target is a stack slot that is always correct, so eliminate * instruction.