Mercurial > hg > graal-compiler
changeset 23337:da555eeb09af
TraceRA: move trace building asserts to TraceBuilderResult.
author | Josef Eisl <josef.eisl@jku.at> |
---|---|
date | Tue, 19 Jan 2016 18:46:15 +0100 |
parents | 47cba47e3653 |
children | 859766efc59e |
files | graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/TraceBuilder.java graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/TraceBuilderResult.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceRegisterAllocationPhase.java |
diffstat | 3 files changed, 38 insertions(+), 32 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/TraceBuilder.java Tue Jan 19 18:16:22 2016 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/TraceBuilder.java Tue Jan 19 18:46:15 2016 +0100 @@ -71,46 +71,14 @@ return processed.get(b.getId()); } - private static final int RESULT_LOG_LEVEL = 1; - @SuppressWarnings("try") private TraceBuilderResult<T> build(T startBlock) { try (Indent indent = Debug.logAndIndent("start trace building: " + startBlock)) { ArrayList<List<T>> traces = buildTraces(startBlock); - - assert verify(traces); - if (Debug.isLogEnabled(RESULT_LOG_LEVEL)) { - for (int i = 0; i < traces.size(); i++) { - List<T> trace = traces.get(i); - Debug.log(RESULT_LOG_LEVEL, "Trace %5d: %s", i, trace); - } - } return new TraceBuilderResult<>(traces, blockToTrace); } } - private boolean verify(ArrayList<List<T>> traces) { - assert verifyAllBlocksScheduled(traces, blocked.length) : "Not all blocks assigned to traces!"; - for (List<T> trace : traces) { - T last = null; - for (T current : trace) { - assert last == null || current.getPredecessors().contains(last); - last = current; - } - } - return true; - } - - private static <T extends AbstractBlockBase<T>> boolean verifyAllBlocksScheduled(ArrayList<List<T>> traces, int expectedLength) { - BitSet handled = new BitSet(expectedLength); - for (List<T> trace : traces) { - for (T block : trace) { - handled.set(block.getId()); - } - } - return handled.cardinality() == expectedLength; - } - protected ArrayList<List<T>> buildTraces(T startBlock) { ArrayList<List<T>> traces = new ArrayList<>(); // add start block
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/TraceBuilderResult.java Tue Jan 19 18:16:22 2016 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/TraceBuilderResult.java Tue Jan 19 18:46:15 2016 +0100 @@ -22,6 +22,7 @@ */ package com.oracle.graal.compiler.common.alloc; +import java.util.BitSet; import java.util.List; import com.oracle.graal.compiler.common.cfg.AbstractBlockBase; @@ -68,4 +69,28 @@ return false; } + public static <T extends AbstractBlockBase<T>> boolean verify(TraceBuilderResult<T> traceBuilderResult, int expectedLength) { + List<List<T>> traces = traceBuilderResult.getTraces(); + assert verifyAllBlocksScheduled(traceBuilderResult, expectedLength) : "Not all blocks assigned to traces!"; + for (List<T> trace : traces) { + T last = null; + for (T current : trace) { + assert last == null || current.getPredecessors().contains(last); + last = current; + } + } + return true; + } + + private static <T extends AbstractBlockBase<T>> boolean verifyAllBlocksScheduled(TraceBuilderResult<T> traceBuilderResult, int expectedLength) { + List<List<T>> traces = traceBuilderResult.getTraces(); + BitSet handled = new BitSet(expectedLength); + for (List<T> trace : traces) { + for (T block : trace) { + handled.set(block.getId()); + } + } + return handled.cardinality() == expectedLength; + } + }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceRegisterAllocationPhase.java Tue Jan 19 18:16:22 2016 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceRegisterAllocationPhase.java Tue Jan 19 18:46:15 2016 +0100 @@ -74,6 +74,8 @@ private static final TraceBuilderPhase TRACE_BUILDER_PHASE = new TraceBuilderPhase(); public static final int TRACE_DUMP_LEVEL = 3; + private static final int TRACE_LOG_LEVEL = 1; + private static final DebugMetric trivialTracesMetric = Debug.metric("TraceRA[trivialTraces]"); private static final DebugMetric tracesMetric = Debug.metric("TraceRA[traces]"); @@ -119,9 +121,20 @@ private static <B extends AbstractBlockBase<B>> TraceBuilderResult<B> builtTraces(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder) { TraceBuilderContext traceBuilderContext = new TraceBuilderPhase.TraceBuilderContext(); TRACE_BUILDER_PHASE.apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, traceBuilderContext, false); + @SuppressWarnings("unchecked") TraceBuilderResult<B> resultTraces = (TraceBuilderResult<B>) traceBuilderContext.traceBuilderResult; + + assert TraceBuilderResult.verify(resultTraces, lirGenRes.getLIR().getControlFlowGraph().getBlocks().size()); + if (Debug.isLogEnabled(TRACE_LOG_LEVEL)) { + List<List<B>> traces = resultTraces.getTraces(); + for (int i = 0; i < traces.size(); i++) { + List<B> trace = traces.get(i); + Debug.log(TRACE_LOG_LEVEL, "Trace %5d: %s", i, trace); + } + } TraceStatisticsPrinter.printTraceStatistics(resultTraces, lirGenRes.getCompilationUnitName()); + return resultTraces; }