src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/alloc/trace/TraceBuilderPhase.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/alloc/trace/TraceBuilderPhase.java

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/alloc/trace/TraceBuilderPhase.java

Print this page

        

*** 22,32 **** */ package org.graalvm.compiler.lir.alloc.trace; import static org.graalvm.compiler.lir.alloc.trace.TraceUtil.isTrivialTrace; ! import java.util.List; import org.graalvm.compiler.core.common.alloc.BiDirectionalTraceBuilder; import org.graalvm.compiler.core.common.alloc.SingleBlockTraceBuilder; import org.graalvm.compiler.core.common.alloc.Trace; import org.graalvm.compiler.core.common.alloc.TraceBuilderResult; --- 22,32 ---- */ package org.graalvm.compiler.lir.alloc.trace; import static org.graalvm.compiler.lir.alloc.trace.TraceUtil.isTrivialTrace; ! import java.util.ArrayList; import org.graalvm.compiler.core.common.alloc.BiDirectionalTraceBuilder; import org.graalvm.compiler.core.common.alloc.SingleBlockTraceBuilder; import org.graalvm.compiler.core.common.alloc.Trace; import org.graalvm.compiler.core.common.alloc.TraceBuilderResult;
*** 37,50 **** import org.graalvm.compiler.debug.Debug; import org.graalvm.compiler.debug.GraalError; import org.graalvm.compiler.lir.LIR; import org.graalvm.compiler.lir.gen.LIRGenerationResult; import org.graalvm.compiler.lir.phases.AllocationPhase; ! import org.graalvm.compiler.options.EnumOptionValue; import org.graalvm.compiler.options.Option; import org.graalvm.compiler.options.OptionType; ! import org.graalvm.compiler.options.OptionValue; import jdk.vm.ci.code.TargetDescription; public class TraceBuilderPhase extends AllocationPhase { --- 37,51 ---- import org.graalvm.compiler.debug.Debug; import org.graalvm.compiler.debug.GraalError; import org.graalvm.compiler.lir.LIR; import org.graalvm.compiler.lir.gen.LIRGenerationResult; import org.graalvm.compiler.lir.phases.AllocationPhase; ! import org.graalvm.compiler.options.EnumOptionKey; import org.graalvm.compiler.options.Option; import org.graalvm.compiler.options.OptionType; ! import org.graalvm.compiler.options.OptionValues; ! import org.graalvm.compiler.options.OptionKey; import jdk.vm.ci.code.TargetDescription; public class TraceBuilderPhase extends AllocationPhase {
*** 55,67 **** } public static class Options { // @formatter:off @Option(help = "Trace building algorithm.", type = OptionType.Debug) ! public static final EnumOptionValue<TraceBuilder> TraceBuilding = new EnumOptionValue<>(TraceBuilder.UniDirectional); @Option(help = "Schedule trivial traces as early as possible.", type = OptionType.Debug) ! public static final OptionValue<Boolean> TraceRAScheduleTrivialTracesEarly = new OptionValue<>(true); // @formatter:on } private static final int TRACE_LOG_LEVEL = 1; public static final int TRACE_DUMP_LEVEL = 3; --- 56,68 ---- } public static class Options { // @formatter:off @Option(help = "Trace building algorithm.", type = OptionType.Debug) ! public static final EnumOptionKey<TraceBuilder> TraceBuilding = new EnumOptionKey<>(TraceBuilder.UniDirectional); @Option(help = "Schedule trivial traces as early as possible.", type = OptionType.Debug) ! public static final OptionKey<Boolean> TraceRAScheduleTrivialTracesEarly = new OptionKey<>(true); // @formatter:on } private static final int TRACE_LOG_LEVEL = 1; public static final int TRACE_DUMP_LEVEL = 3;
*** 74,84 **** assert startBlock.equals(lir.getControlFlowGraph().getStartBlock()); final TraceBuilderResult traceBuilderResult = getTraceBuilderResult(lir, startBlock, linearScanOrder); if (Debug.isLogEnabled(TRACE_LOG_LEVEL)) { ! List<Trace> traces = traceBuilderResult.getTraces(); for (int i = 0; i < traces.size(); i++) { Trace trace = traces.get(i); Debug.log(TRACE_LOG_LEVEL, "Trace %5d: %s%s", i, trace, isTrivialTrace(lirGenRes.getLIR(), trace) ? " (trivial)" : ""); } } --- 75,85 ---- assert startBlock.equals(lir.getControlFlowGraph().getStartBlock()); final TraceBuilderResult traceBuilderResult = getTraceBuilderResult(lir, startBlock, linearScanOrder); if (Debug.isLogEnabled(TRACE_LOG_LEVEL)) { ! ArrayList<Trace> traces = traceBuilderResult.getTraces(); for (int i = 0; i < traces.size(); i++) { Trace trace = traces.get(i); Debug.log(TRACE_LOG_LEVEL, "Trace %5d: %s%s", i, trace, isTrivialTrace(lirGenRes.getLIR(), trace) ? " (trivial)" : ""); } }
*** 88,112 **** } private static TraceBuilderResult getTraceBuilderResult(LIR lir, AbstractBlockBase<?> startBlock, AbstractBlockBase<?>[] linearScanOrder) { TraceBuilderResult.TrivialTracePredicate pred = getTrivialTracePredicate(lir); ! TraceBuilder selectedTraceBuilder = Options.TraceBuilding.getValue(); Debug.log(TRACE_LOG_LEVEL, "Building Traces using %s", selectedTraceBuilder); ! switch (Options.TraceBuilding.getValue()) { case SingleBlock: return SingleBlockTraceBuilder.computeTraces(startBlock, linearScanOrder, pred); case BiDirectional: return BiDirectionalTraceBuilder.computeTraces(startBlock, linearScanOrder, pred); case UniDirectional: return UniDirectionalTraceBuilder.computeTraces(startBlock, linearScanOrder, pred); } ! throw GraalError.shouldNotReachHere("Unknown trace building algorithm: " + Options.TraceBuilding.getValue()); } public static TraceBuilderResult.TrivialTracePredicate getTrivialTracePredicate(LIR lir) { ! if (!Options.TraceRAScheduleTrivialTracesEarly.getValue()) { return null; } return new TrivialTracePredicate() { @Override public boolean isTrivialTrace(Trace trace) { --- 89,114 ---- } private static TraceBuilderResult getTraceBuilderResult(LIR lir, AbstractBlockBase<?> startBlock, AbstractBlockBase<?>[] linearScanOrder) { TraceBuilderResult.TrivialTracePredicate pred = getTrivialTracePredicate(lir); ! OptionValues options = lir.getOptions(); ! TraceBuilder selectedTraceBuilder = Options.TraceBuilding.getValue(options); Debug.log(TRACE_LOG_LEVEL, "Building Traces using %s", selectedTraceBuilder); ! switch (Options.TraceBuilding.getValue(options)) { case SingleBlock: return SingleBlockTraceBuilder.computeTraces(startBlock, linearScanOrder, pred); case BiDirectional: return BiDirectionalTraceBuilder.computeTraces(startBlock, linearScanOrder, pred); case UniDirectional: return UniDirectionalTraceBuilder.computeTraces(startBlock, linearScanOrder, pred); } ! throw GraalError.shouldNotReachHere("Unknown trace building algorithm: " + Options.TraceBuilding.getValue(options)); } public static TraceBuilderResult.TrivialTracePredicate getTrivialTracePredicate(LIR lir) { ! if (!Options.TraceRAScheduleTrivialTracesEarly.getValue(lir.getOptions())) { return null; } return new TrivialTracePredicate() { @Override public boolean isTrivialTrace(Trace trace) {
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/alloc/trace/TraceBuilderPhase.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File