changeset 23335:ef5ce69bdc21

TraceRA: outsource TraceBuilderResult.
author Josef Eisl <josef.eisl@jku.at>
date Tue, 19 Jan 2016 17:15:51 +0100
parents 730dddc179ab
children 47cba47e3653
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.compiler.common/src/com/oracle/graal/compiler/common/alloc/TraceStatisticsPrinter.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceAllocationPhase.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceGlobalMoveResolutionPhase.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceRegisterAllocationPhase.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceTrivialAllocator.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceUtil.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/lsra/TraceLinearScan.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/lsra/TraceLinearScanAllocationPhase.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/lsra/TraceLinearScanEliminateSpillMovePhase.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/lsra/TraceLinearScanLifetimeAnalysisPhase.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/lsra/TraceLinearScanResolveDataFlowPhase.java
diffstat 13 files changed, 83 insertions(+), 56 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/TraceBuilder.java	Wed Jan 20 12:01:21 2016 +0100
+++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/TraceBuilder.java	Tue Jan 19 17:15:51 2016 +0100
@@ -37,50 +37,6 @@
 
 public final class TraceBuilder<T extends AbstractBlockBase<T>> {
 
-    public static final class TraceBuilderResult<T extends AbstractBlockBase<T>> {
-        private final List<List<T>> traces;
-        private final int[] blockToTrace;
-
-        private TraceBuilderResult(List<List<T>> traces, int[] blockToTrace) {
-            this.traces = traces;
-            this.blockToTrace = blockToTrace;
-        }
-
-        public int getTraceForBlock(AbstractBlockBase<?> block) {
-            return blockToTrace[block.getId()];
-        }
-
-        public List<List<T>> getTraces() {
-            return traces;
-        }
-
-        public boolean incomingEdges(int traceNr) {
-            List<T> trace = getTraces().get(traceNr);
-            return incomingEdges(traceNr, trace);
-        }
-
-        public boolean incomingSideEdges(int traceNr) {
-            List<T> trace = getTraces().get(traceNr);
-            if (trace.size() <= 1) {
-                return false;
-            }
-            return incomingEdges(traceNr, trace.subList(1, trace.size()));
-        }
-
-        private boolean incomingEdges(int traceNr, List<T> trace) {
-            /* TODO (je): not efficient. find better solution. */
-            for (T block : trace) {
-                for (T pred : block.getPredecessors()) {
-                    if (getTraceForBlock(pred) != traceNr) {
-                        return true;
-                    }
-                }
-            }
-            return false;
-        }
-
-    }
-
     private static final String PHASE_NAME = "LIRPhaseTime_TraceBuilderPhase";
     private static final DebugTimer timer = Debug.timer(PHASE_NAME);
     private static final DebugMemUseTracker memUseTracker = Debug.memUseTracker(PHASE_NAME);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/TraceBuilderResult.java	Tue Jan 19 17:15:51 2016 +0100
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.graal.compiler.common.alloc;
+
+import java.util.List;
+
+import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
+
+public final class TraceBuilderResult<T extends AbstractBlockBase<T>> {
+    private final List<List<T>> traces;
+    private final int[] blockToTrace;
+
+    TraceBuilderResult(List<List<T>> traces, int[] blockToTrace) {
+        this.traces = traces;
+        this.blockToTrace = blockToTrace;
+    }
+
+    public int getTraceForBlock(AbstractBlockBase<?> block) {
+        return blockToTrace[block.getId()];
+    }
+
+    public List<List<T>> getTraces() {
+        return traces;
+    }
+
+    public boolean incomingEdges(int traceNr) {
+        List<T> trace = getTraces().get(traceNr);
+        return incomingEdges(traceNr, trace);
+    }
+
+    public boolean incomingSideEdges(int traceNr) {
+        List<T> trace = getTraces().get(traceNr);
+        if (trace.size() <= 1) {
+            return false;
+        }
+        return incomingEdges(traceNr, trace.subList(1, trace.size()));
+    }
+
+    private boolean incomingEdges(int traceNr, List<T> trace) {
+        /* TODO (je): not efficient. find better solution. */
+        for (T block : trace) {
+            for (T pred : block.getPredecessors()) {
+                if (getTraceForBlock(pred) != traceNr) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+}
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/TraceStatisticsPrinter.java	Wed Jan 20 12:01:21 2016 +0100
+++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/TraceStatisticsPrinter.java	Tue Jan 19 17:15:51 2016 +0100
@@ -34,7 +34,7 @@
     private static final int TRACE_DUMP_LEVEL = 3;
 
     @SuppressWarnings("try")
-    public static <T extends AbstractBlockBase<T>> void printTraceStatistics(TraceBuilder.TraceBuilderResult<T> result, String compilationUnitName) {
+    public static <T extends AbstractBlockBase<T>> void printTraceStatistics(TraceBuilderResult<T> result, String compilationUnitName) {
         try (Scope s = Debug.scope("DumpTraceStatistics")) {
             if (Debug.isLogEnabled(TRACE_DUMP_LEVEL)) {
                 print(result, compilationUnitName);
@@ -45,7 +45,7 @@
     }
 
     @SuppressWarnings("try")
-    protected static <T extends AbstractBlockBase<T>> void print(TraceBuilder.TraceBuilderResult<T> result, String compilationUnitName) {
+    protected static <T extends AbstractBlockBase<T>> void print(TraceBuilderResult<T> result, String compilationUnitName) {
         List<List<T>> traces = result.getTraces();
         int numTraces = traces.size();
 
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceAllocationPhase.java	Wed Jan 20 12:01:21 2016 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceAllocationPhase.java	Tue Jan 19 17:15:51 2016 +0100
@@ -23,7 +23,7 @@
 package com.oracle.graal.lir.alloc.trace;
 
 import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig;
-import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult;
+import com.oracle.graal.compiler.common.alloc.TraceBuilderResult;
 import com.oracle.graal.lir.gen.LIRGeneratorTool.MoveFactory;
 import com.oracle.graal.lir.phases.LIRPhase;
 
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceGlobalMoveResolutionPhase.java	Wed Jan 20 12:01:21 2016 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceGlobalMoveResolutionPhase.java	Tue Jan 19 17:15:51 2016 +0100
@@ -37,7 +37,7 @@
 import jdk.vm.ci.meta.AllocatableValue;
 import jdk.vm.ci.meta.Value;
 
-import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult;
+import com.oracle.graal.compiler.common.alloc.TraceBuilderResult;
 import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
 import com.oracle.graal.debug.Debug;
 import com.oracle.graal.debug.Indent;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceRegisterAllocationPhase.java	Wed Jan 20 12:01:21 2016 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceRegisterAllocationPhase.java	Tue Jan 19 17:15:51 2016 +0100
@@ -28,7 +28,7 @@
 
 import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig;
 import com.oracle.graal.compiler.common.alloc.TraceBuilder;
-import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult;
+import com.oracle.graal.compiler.common.alloc.TraceBuilderResult;
 import com.oracle.graal.compiler.common.alloc.TraceStatisticsPrinter;
 import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
 import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceTrivialAllocator.java	Wed Jan 20 12:01:21 2016 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceTrivialAllocator.java	Tue Jan 19 17:15:51 2016 +0100
@@ -31,7 +31,7 @@
 import jdk.vm.ci.code.TargetDescription;
 import jdk.vm.ci.meta.Value;
 
-import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult;
+import com.oracle.graal.compiler.common.alloc.TraceBuilderResult;
 import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
 import com.oracle.graal.lir.LIR;
 import com.oracle.graal.lir.LIRInstruction;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceUtil.java	Wed Jan 20 12:01:21 2016 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceUtil.java	Tue Jan 19 17:15:51 2016 +0100
@@ -24,7 +24,7 @@
 
 import jdk.vm.ci.meta.Value;
 
-import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult;
+import com.oracle.graal.compiler.common.alloc.TraceBuilderResult;
 import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
 
 public class TraceUtil {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/lsra/TraceLinearScan.java	Wed Jan 20 12:01:21 2016 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/lsra/TraceLinearScan.java	Tue Jan 19 17:15:51 2016 +0100
@@ -47,7 +47,7 @@
 import jdk.vm.ci.meta.Value;
 
 import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig;
-import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult;
+import com.oracle.graal.compiler.common.alloc.TraceBuilderResult;
 import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
 import com.oracle.graal.compiler.common.cfg.BlockMap;
 import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/lsra/TraceLinearScanAllocationPhase.java	Wed Jan 20 12:01:21 2016 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/lsra/TraceLinearScanAllocationPhase.java	Tue Jan 19 17:15:51 2016 +0100
@@ -23,7 +23,7 @@
 package com.oracle.graal.lir.alloc.trace.lsra;
 
 import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig;
-import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult;
+import com.oracle.graal.compiler.common.alloc.TraceBuilderResult;
 import com.oracle.graal.lir.gen.LIRGeneratorTool.MoveFactory;
 import com.oracle.graal.lir.phases.LIRPhase;
 
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/lsra/TraceLinearScanEliminateSpillMovePhase.java	Wed Jan 20 12:01:21 2016 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/lsra/TraceLinearScanEliminateSpillMovePhase.java	Tue Jan 19 17:15:51 2016 +0100
@@ -32,7 +32,7 @@
 import jdk.vm.ci.code.TargetDescription;
 import jdk.vm.ci.meta.AllocatableValue;
 
-import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult;
+import com.oracle.graal.compiler.common.alloc.TraceBuilderResult;
 import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
 import com.oracle.graal.debug.Debug;
 import com.oracle.graal.debug.Indent;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/lsra/TraceLinearScanLifetimeAnalysisPhase.java	Wed Jan 20 12:01:21 2016 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/lsra/TraceLinearScanLifetimeAnalysisPhase.java	Tue Jan 19 17:15:51 2016 +0100
@@ -50,7 +50,7 @@
 import jdk.vm.ci.meta.Value;
 
 import com.oracle.graal.compiler.common.alloc.ComputeBlockOrder;
-import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult;
+import com.oracle.graal.compiler.common.alloc.TraceBuilderResult;
 import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
 import com.oracle.graal.debug.Debug;
 import com.oracle.graal.debug.Indent;
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/lsra/TraceLinearScanResolveDataFlowPhase.java	Wed Jan 20 12:01:21 2016 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/lsra/TraceLinearScanResolveDataFlowPhase.java	Tue Jan 19 17:15:51 2016 +0100
@@ -36,7 +36,7 @@
 import jdk.vm.ci.code.TargetDescription;
 import jdk.vm.ci.meta.Value;
 
-import com.oracle.graal.compiler.common.alloc.TraceBuilder.TraceBuilderResult;
+import com.oracle.graal.compiler.common.alloc.TraceBuilderResult;
 import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
 import com.oracle.graal.debug.Debug;
 import com.oracle.graal.debug.DebugMetric;