# HG changeset patch # User Josef Eisl # Date 1438006348 -7200 # Node ID 93662914fa2e59e77d0af03ae8267eeb76eb05d6 # Parent 1884fa0c912e16cf81542cf2c6d66013c8fe8d60 TraceRA: make accessRecursive iterative. diff -r 1884fa0c912e -r 93662914fa2e graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ssi/SSIBlockValueMapImpl.java --- 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> 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> 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); } } }