# HG changeset patch # User Bernhard Urban # Date 1374862721 -7200 # Node ID caa8706c620245ae18e885c40a2ec5be30a68543 # Parent 8c0ab217ed00185c8bd0828f0e73bb4700f92dda CFG: attach proxies to loop exits diff -r 8c0ab217ed00 -r caa8706c6202 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java --- 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(); diff -r 8c0ab217ed00 -r caa8706c6202 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java --- 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); }