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;
     }