--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/phases/EconomyAllocationStage.java 2017-07-07 09:31:05.000000000 -0700 +++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/phases/EconomyAllocationStage.java 2017-07-07 09:31:05.000000000 -0700 @@ -22,14 +22,26 @@ */ package org.graalvm.compiler.lir.phases; +import static org.graalvm.compiler.core.common.GraalOptions.TraceRA; + import org.graalvm.compiler.lir.alloc.lsra.LinearScanPhase; +import org.graalvm.compiler.lir.alloc.trace.GlobalLivenessAnalysisPhase; +import org.graalvm.compiler.lir.alloc.trace.TraceBuilderPhase; +import org.graalvm.compiler.lir.alloc.trace.TraceRegisterAllocationPhase; import org.graalvm.compiler.lir.dfa.LocationMarkerPhase; import org.graalvm.compiler.lir.phases.AllocationPhase.AllocationContext; import org.graalvm.compiler.lir.stackslotalloc.SimpleStackSlotAllocator; +import org.graalvm.compiler.options.OptionValues; public class EconomyAllocationStage extends LIRPhaseSuite { - public EconomyAllocationStage() { - appendPhase(new LinearScanPhase()); + public EconomyAllocationStage(OptionValues options) { + if (TraceRA.getValue(options)) { + appendPhase(new TraceBuilderPhase()); + appendPhase(new GlobalLivenessAnalysisPhase()); + appendPhase(new TraceRegisterAllocationPhase()); + } else { + appendPhase(new LinearScanPhase()); + } // build frame map appendPhase(new SimpleStackSlotAllocator());