src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/alloc/UniDirectionalTraceBuilder.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.core.common/src/org/graalvm/compiler/core/common/alloc/UniDirectionalTraceBuilder.java

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/alloc/UniDirectionalTraceBuilder.java

Print this page

        

*** 27,46 **** import java.util.List; import java.util.PriorityQueue; import org.graalvm.compiler.core.common.alloc.TraceBuilderResult.TrivialTracePredicate; import org.graalvm.compiler.core.common.cfg.AbstractBlockBase; ! import org.graalvm.compiler.debug.Debug; import org.graalvm.compiler.debug.Indent; /** * Computes traces by starting at a trace head and keep adding predecessors as long as possible. */ public final class UniDirectionalTraceBuilder { ! public static TraceBuilderResult computeTraces(AbstractBlockBase<?> startBlock, AbstractBlockBase<?>[] blocks, TrivialTracePredicate pred) { ! return new UniDirectionalTraceBuilder(blocks).build(startBlock, blocks, pred); } private final PriorityQueue<AbstractBlockBase<?>> worklist; private final BitSet processed; /** --- 27,46 ---- import java.util.List; import java.util.PriorityQueue; import org.graalvm.compiler.core.common.alloc.TraceBuilderResult.TrivialTracePredicate; import org.graalvm.compiler.core.common.cfg.AbstractBlockBase; ! import org.graalvm.compiler.debug.DebugContext; import org.graalvm.compiler.debug.Indent; /** * Computes traces by starting at a trace head and keep adding predecessors as long as possible. */ public final class UniDirectionalTraceBuilder { ! public static TraceBuilderResult computeTraces(DebugContext debug, AbstractBlockBase<?> startBlock, AbstractBlockBase<?>[] blocks, TrivialTracePredicate pred) { ! return new UniDirectionalTraceBuilder(blocks).build(debug, startBlock, blocks, pred); } private final PriorityQueue<AbstractBlockBase<?>> worklist; private final BitSet processed; /**
*** 69,95 **** private boolean processed(AbstractBlockBase<?> b) { return processed.get(b.getId()); } @SuppressWarnings("try") ! private TraceBuilderResult build(AbstractBlockBase<?> startBlock, AbstractBlockBase<?>[] blocks, TrivialTracePredicate pred) { ! try (Indent indent = Debug.logAndIndent("UniDirectionalTraceBuilder: start trace building: %s", startBlock)) { ! ArrayList<Trace> traces = buildTraces(startBlock); ! return TraceBuilderResult.create(blocks, traces, blockToTrace, pred); } } ! protected ArrayList<Trace> buildTraces(AbstractBlockBase<?> startBlock) { ArrayList<Trace> traces = new ArrayList<>(); // add start block worklist.add(startBlock); // process worklist while (!worklist.isEmpty()) { AbstractBlockBase<?> block = worklist.poll(); assert block != null; if (!processed(block)) { ! Trace trace = new Trace(startTrace(block)); for (AbstractBlockBase<?> traceBlock : trace.getBlocks()) { blockToTrace[traceBlock.getId()] = trace; } trace.setId(traces.size()); traces.add(trace); --- 69,95 ---- private boolean processed(AbstractBlockBase<?> b) { return processed.get(b.getId()); } @SuppressWarnings("try") ! private TraceBuilderResult build(DebugContext debug, AbstractBlockBase<?> startBlock, AbstractBlockBase<?>[] blocks, TrivialTracePredicate pred) { ! try (Indent indent = debug.logAndIndent("UniDirectionalTraceBuilder: start trace building: %s", startBlock)) { ! ArrayList<Trace> traces = buildTraces(debug, startBlock); ! return TraceBuilderResult.create(debug, blocks, traces, blockToTrace, pred); } } ! protected ArrayList<Trace> buildTraces(DebugContext debug, AbstractBlockBase<?> startBlock) { ArrayList<Trace> traces = new ArrayList<>(); // add start block worklist.add(startBlock); // process worklist while (!worklist.isEmpty()) { AbstractBlockBase<?> block = worklist.poll(); assert block != null; if (!processed(block)) { ! Trace trace = new Trace(startTrace(debug, block)); for (AbstractBlockBase<?> traceBlock : trace.getBlocks()) { blockToTrace[traceBlock.getId()] = trace; } trace.setId(traces.size()); traces.add(trace);
*** 100,116 **** /** * Build a new trace starting at {@code block}. */ @SuppressWarnings("try") ! private List<AbstractBlockBase<?>> startTrace(AbstractBlockBase<?> block) { assert checkPredecessorsProcessed(block); ArrayList<AbstractBlockBase<?>> trace = new ArrayList<>(); int blockNumber = 0; ! try (Indent i = Debug.logAndIndent("StartTrace: %s", block)) { for (AbstractBlockBase<?> currentBlock = block; currentBlock != null; currentBlock = selectNext(currentBlock)) { ! Debug.log("add %s (prob: %f)", currentBlock, currentBlock.probability()); processed.set(currentBlock.getId()); trace.add(currentBlock); unblock(currentBlock); currentBlock.setLinearScanNumber(blockNumber++); } --- 100,116 ---- /** * Build a new trace starting at {@code block}. */ @SuppressWarnings("try") ! private List<AbstractBlockBase<?>> startTrace(DebugContext debug, AbstractBlockBase<?> block) { assert checkPredecessorsProcessed(block); ArrayList<AbstractBlockBase<?>> trace = new ArrayList<>(); int blockNumber = 0; ! try (Indent i = debug.logAndIndent("StartTrace: %s", block)) { for (AbstractBlockBase<?> currentBlock = block; currentBlock != null; currentBlock = selectNext(currentBlock)) { ! debug.log("add %s (prob: %f)", currentBlock, currentBlock.probability()); processed.set(currentBlock.getId()); trace.add(currentBlock); unblock(currentBlock); currentBlock.setLinearScanNumber(blockNumber++); }
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.common/src/org/graalvm/compiler/core/common/alloc/UniDirectionalTraceBuilder.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File