Mercurial > hg > graal-compiler
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); } } }