# HG changeset patch # User Josef Eisl # Date 1453225575 -3600 # Node ID da555eeb09af039a69676de501bd2eae218b3aba # Parent 47cba47e365393aeeb77027e38e90a37ef8829e9 TraceRA: move trace building asserts to TraceBuilderResult. diff -r 47cba47e3653 -r da555eeb09af graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/TraceBuilder.java --- 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 build(T startBlock) { try (Indent indent = Debug.logAndIndent("start trace building: " + startBlock)) { ArrayList> traces = buildTraces(startBlock); - - assert verify(traces); - if (Debug.isLogEnabled(RESULT_LOG_LEVEL)) { - for (int i = 0; i < traces.size(); i++) { - List trace = traces.get(i); - Debug.log(RESULT_LOG_LEVEL, "Trace %5d: %s", i, trace); - } - } return new TraceBuilderResult<>(traces, blockToTrace); } } - private boolean verify(ArrayList> traces) { - assert verifyAllBlocksScheduled(traces, blocked.length) : "Not all blocks assigned to traces!"; - for (List trace : traces) { - T last = null; - for (T current : trace) { - assert last == null || current.getPredecessors().contains(last); - last = current; - } - } - return true; - } - - private static > boolean verifyAllBlocksScheduled(ArrayList> traces, int expectedLength) { - BitSet handled = new BitSet(expectedLength); - for (List trace : traces) { - for (T block : trace) { - handled.set(block.getId()); - } - } - return handled.cardinality() == expectedLength; - } - protected ArrayList> buildTraces(T startBlock) { ArrayList> traces = new ArrayList<>(); // add start block diff -r 47cba47e3653 -r da555eeb09af graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/TraceBuilderResult.java --- 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 > boolean verify(TraceBuilderResult traceBuilderResult, int expectedLength) { + List> traces = traceBuilderResult.getTraces(); + assert verifyAllBlocksScheduled(traceBuilderResult, expectedLength) : "Not all blocks assigned to traces!"; + for (List trace : traces) { + T last = null; + for (T current : trace) { + assert last == null || current.getPredecessors().contains(last); + last = current; + } + } + return true; + } + + private static > boolean verifyAllBlocksScheduled(TraceBuilderResult traceBuilderResult, int expectedLength) { + List> traces = traceBuilderResult.getTraces(); + BitSet handled = new BitSet(expectedLength); + for (List trace : traces) { + for (T block : trace) { + handled.set(block.getId()); + } + } + return handled.cardinality() == expectedLength; + } + } diff -r 47cba47e3653 -r da555eeb09af graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceRegisterAllocationPhase.java --- 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 > TraceBuilderResult builtTraces(TargetDescription target, LIRGenerationResult lirGenRes, List codeEmittingOrder, List linearScanOrder) { TraceBuilderContext traceBuilderContext = new TraceBuilderPhase.TraceBuilderContext(); TRACE_BUILDER_PHASE.apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, traceBuilderContext, false); + @SuppressWarnings("unchecked") TraceBuilderResult resultTraces = (TraceBuilderResult) traceBuilderContext.traceBuilderResult; + + assert TraceBuilderResult.verify(resultTraces, lirGenRes.getLIR().getControlFlowGraph().getBlocks().size()); + if (Debug.isLogEnabled(TRACE_LOG_LEVEL)) { + List> traces = resultTraces.getTraces(); + for (int i = 0; i < traces.size(); i++) { + List trace = traces.get(i); + Debug.log(TRACE_LOG_LEVEL, "Trace %5d: %s", i, trace); + } + } TraceStatisticsPrinter.printTraceStatistics(resultTraces, lirGenRes.getCompilationUnitName()); + return resultTraces; }