# HG changeset patch # User Christian Wimmer # Date 1442967982 25200 # Node ID 4ea1c903f00f02ed3b5dd27b6e21d5f7bf9e1ce8 # Parent 1ec6d2962ff5e0316ba57074bf6b28f6b1046883 Workaround for LIR constant optimization diff -r 1ec6d2962ff5 -r 4ea1c903f00f 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 Tue Sep 22 23:12:56 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanLifetimeAnalysisPhase.java Tue Sep 22 17:26:22 2015 -0700 @@ -46,6 +46,10 @@ import jdk.internal.jvmci.meta.JavaConstant; import jdk.internal.jvmci.meta.LIRKind; import jdk.internal.jvmci.meta.Value; +import jdk.internal.jvmci.options.Option; +import jdk.internal.jvmci.options.OptionType; +import jdk.internal.jvmci.options.OptionValue; +import jdk.internal.jvmci.options.StableOptionValue; import com.oracle.graal.compiler.common.alloc.ComputeBlockOrder; import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; @@ -824,6 +828,12 @@ } } + public static class Options { + @Option(help = "Enable temporary workaround for LIR constant optimization (see GRAAL-1272).", type = OptionType.Debug)// + public static final OptionValue NeverSpillConstants = new StableOptionValue<>(false); + + } + /** * Returns a value for a interval definition, which can be used for re-materialization. * @@ -838,6 +848,12 @@ if (op instanceof LoadConstantOp) { LoadConstantOp move = (LoadConstantOp) op; if (move.getConstant() instanceof JavaConstant) { + + /* Temporary workaround until GRAAL-1272 is fixed. */ + if (Options.NeverSpillConstants.getValue()) { + return (JavaConstant) move.getConstant(); + } + /* * Check if the interval has any uses which would accept an stack location (priority * == ShouldHaveRegister). Rematerialization of such intervals can result in a