Mercurial > hg > truffle
changeset 10892:caa8706c6202
CFG: attach proxies to loop exits
author | Bernhard Urban <bernhard.urban@jku.at> |
---|---|
date | Fri, 26 Jul 2013 20:18:41 +0200 |
parents | 8c0ab217ed00 |
children | 968215f13aad |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java |
diffstat | 2 files changed, 12 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java Fri Jul 26 20:18:41 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java Fri Jul 26 20:18:41 2013 +0200 @@ -123,6 +123,16 @@ private void identifyBlock(Block block) { Node cur = block.getBeginNode(); Node last; + + // assign proxies of a loop exit to this block + if (cur instanceof AbstractBeginNode) { + for (Node usage : cur.usages()) { + if (usage instanceof ProxyNode) { + nodeToBlock.set(usage, block); + } + } + } + do { assert !cur.isDeleted();
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java Fri Jul 26 20:18:41 2013 +0200 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java Fri Jul 26 20:18:41 2013 +0200 @@ -258,9 +258,9 @@ if (prevBlock != null) { return; } - // PhiNodes and FixedNodes should already have been placed in blocks by + // PhiNodes, ProxyNodes and FixedNodes should already have been placed in blocks by // ControlFlowGraph.identifyBlocks - if (node instanceof PhiNode || node instanceof FixedNode) { + if (node instanceof PhiNode || node instanceof ProxyNode || node instanceof FixedNode) { throw new SchedulingError("%s should already have been placed in a block", node); }