< 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,52 **** 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.setStateAfter(null); ! if (stateAfter.hasNoUsages()) { ! GraphUtil.killWithUnusedFloatingInputs(stateAfter); ! } } } graph.setHasValueProxies(false); } } --- 24,50 ---- package org.graalvm.compiler.phases.common; import org.graalvm.compiler.nodes.FrameState; import org.graalvm.compiler.nodes.LoopExitNode; 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)) { ! 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); ! GraphUtil.tryKillUnused(frameState); } } graph.setHasValueProxies(false); } }
< prev index next >