changeset 23319:cde2f72cb163

TraceRA: don't use streams for TraceBuilderResult.incoming*Edges().
author Josef Eisl <josef.eisl@jku.at>
date Tue, 19 Jan 2016 10:05:58 +0100
parents 0adc3361952c
children 8be28ce060cc
files graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/TraceBuilder.java
diffstat 1 files changed, 18 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/TraceBuilder.java	Mon Jan 18 10:58:42 2016 -0800
+++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/alloc/TraceBuilder.java	Tue Jan 19 10:05:58 2016 +0100
@@ -55,13 +55,28 @@
         }
 
         public boolean incomingEdges(int traceNr) {
-            /* TODO (je): not efficient. find better solution. */
-            return getTraces().get(traceNr).stream().flatMap(b -> b.getPredecessors().stream()).anyMatch(s -> getTraceForBlock(s) != 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. */
-            return getTraces().get(traceNr).stream().skip(1).flatMap(b -> b.getPredecessors().stream()).anyMatch(s -> getTraceForBlock(s) != traceNr);
+            for (T block : trace) {
+                for (T pred : block.getPredecessors()) {
+                    if (getTraceForBlock(pred) != traceNr) {
+                        return true;
+                    }
+                }
+            }
+            return false;
         }
 
     }