< 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 >