# HG changeset patch # User Gilles Duboscq # Date 1397496432 -7200 # Node ID 1dc1af3bf4021d8d5ea1f9bb65a31b9172eef484 # Parent 101a31da0dd06f0287823e161b54547caa026ec9 use node.replaceAtMatchingUsages in LoopFragment.mergeEarlyExits diff -r 101a31da0dd0 -r 1dc1af3bf402 graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java Tue Apr 15 18:33:33 2014 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java Mon Apr 14 19:27:12 2014 +0200 @@ -355,6 +355,7 @@ } }); } + FrameState finalExitState = exitState; for (Node anchored : loopEarlyExit.anchored().snapshot()) { anchored.replaceFirstInput(loopEarlyExit, merge); @@ -384,17 +385,18 @@ } else { replaceWith = vpn.value(); } - for (Node usage : vpn.usages().snapshot()) { - if (!merge.isPhiAtMerge(usage)) { - if (usage instanceof VirtualState) { - VirtualState stateUsage = (VirtualState) usage; - if (exitState.isPartOfThisState(stateUsage)) { - continue; - } + vpn.replaceAtMatchingUsages(replaceWith, usage -> { + if (merge.isPhiAtMerge(usage)) { + return false; + } + if (usage instanceof VirtualState) { + VirtualState stateUsage = (VirtualState) usage; + if (finalExitState.isPartOfThisState(stateUsage)) { + return false; } - usage.replaceFirstInput(vpn, replaceWith); } - } + return true; + }); } } }