changeset 22370:93662914fa2e

TraceRA: make accessRecursive iterative.
author Josef Eisl <josef.eisl@jku.at>
date Mon, 27 Jul 2015 16:12:28 +0200
parents 1884fa0c912e
children 417de0a82ff7
files graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssi/SSIBlockValueMapImpl.java
diffstat 1 files changed, 10 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssi/SSIBlockValueMapImpl.java	Mon Jul 27 17:05:38 2015 -0700
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssi/SSIBlockValueMapImpl.java	Mon Jul 27 16:12:28 2015 +0200
@@ -157,6 +157,15 @@
     // implementation
 
     private void accessRecursive(Value operand, AbstractBlockBase<?> defBlock, AbstractBlockBase<?> block) {
+        Deque<AbstractBlockBase<?>> worklist = new ArrayDeque<>();
+        worklist.add(block);
+
+        while (!worklist.isEmpty()) {
+            accessRecursive(operand, defBlock, worklist.pollLast(), worklist);
+        }
+    }
+
+    private void accessRecursive(Value operand, AbstractBlockBase<?> defBlock, AbstractBlockBase<?> block, Deque<AbstractBlockBase<?>> worklist) {
         try (Indent indent = Debug.logAndIndent("get operand %s in block %s", operand, block)) {
             if (block.equals(defBlock)) {
                 Debug.log("found definition!");
@@ -181,7 +190,7 @@
             data.setIncoming(idx, operand);
 
             for (AbstractBlockBase<?> pred : block.getPredecessors()) {
-                accessRecursive(operand, defBlock, pred);
+                worklist.addLast(pred);
             }
         }
     }