< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/RemoveValueProxyPhase.java
Print this page
@@ -24,29 +24,27 @@
package org.graalvm.compiler.phases.common;
import org.graalvm.compiler.nodes.FrameState;
import org.graalvm.compiler.nodes.LoopExitNode;
-import org.graalvm.compiler.nodes.ProxyNode;
import org.graalvm.compiler.nodes.StructuredGraph;
import org.graalvm.compiler.nodes.util.GraphUtil;
import org.graalvm.compiler.phases.Phase;
public class RemoveValueProxyPhase extends Phase {
@Override
protected void run(StructuredGraph graph) {
for (LoopExitNode exit : graph.getNodes(LoopExitNode.TYPE)) {
- for (ProxyNode vpn : exit.proxies().snapshot()) {
- vpn.replaceAtUsagesAndDelete(vpn.value());
- }
- FrameState stateAfter = exit.stateAfter();
- if (stateAfter != null) {
+ exit.removeProxies();
+ FrameState frameState = exit.stateAfter();
+ if (frameState != null && frameState.isExceptionHandlingBCI()) {
+ // The parser will create loop exits with such BCIs on the exception handling path.
+ // Loop optimizations must avoid duplicating such exits
+ // We clean them up here otherwise they could survive until code generation
exit.setStateAfter(null);
- if (stateAfter.hasNoUsages()) {
- GraphUtil.killWithUnusedFloatingInputs(stateAfter);
- }
+ GraphUtil.tryKillUnused(frameState);
}
}
graph.setHasValueProxies(false);
}
}
< prev index next >