< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopFragmentWhole.java
Print this page
@@ -22,22 +22,18 @@
*/
package org.graalvm.compiler.loop;
-import jdk.internal.vm.compiler.collections.EconomicSet;
import org.graalvm.compiler.core.common.cfg.Loop;
-import org.graalvm.compiler.debug.DebugContext;
import org.graalvm.compiler.graph.Graph;
import org.graalvm.compiler.graph.Graph.DuplicationReplacement;
import org.graalvm.compiler.graph.Node;
import org.graalvm.compiler.graph.NodeBitMap;
import org.graalvm.compiler.nodes.EndNode;
import org.graalvm.compiler.nodes.FixedNode;
import org.graalvm.compiler.nodes.LoopBeginNode;
-import org.graalvm.compiler.nodes.LoopExitNode;
-import org.graalvm.compiler.nodes.StructuredGraph;
import org.graalvm.compiler.nodes.ValueNode;
import org.graalvm.compiler.nodes.cfg.Block;
public class LoopFragmentWhole extends LoopFragment {
@@ -66,11 +62,11 @@
@Override
public NodeBitMap nodes() {
if (nodes == null) {
Loop<Block> loop = loop().loop();
- nodes = LoopFragment.computeNodes(graph(), LoopFragment.toHirBlocks(loop.getBlocks()), LoopFragment.toHirExits(loop.getExits()));
+ nodes = LoopFragment.computeNodes(graph(), LoopFragment.toHirBlocks(loop.getBlocks()), LoopFragment.toHirBlocks(loop.getLoopExits()));
}
return nodes;
}
@Override
@@ -106,50 +102,12 @@
}
return loop().entryPoint();
}
@Override
- protected void finishDuplication() {
- // TODO (gd) ?
- }
-
- void cleanupLoopExits() {
- LoopBeginNode loopBegin = original().loop().loopBegin();
- assert nodes == null || nodes.contains(loopBegin);
- StructuredGraph graph = loopBegin.graph();
- if (graph.getGuardsStage() == StructuredGraph.GuardsStage.AFTER_FSA) {
- // After FrameStateAssignment ControlFlowGraph treats loop exits differently which means
- // that the LoopExitNodes can be in a block which post dominates the true loop exit. For
- // cloning to work right they must agree.
- EconomicSet<LoopExitNode> exits = EconomicSet.create();
- for (Block exitBlock : original().loop().loop().getExits()) {
- LoopExitNode exitNode = exitBlock.getLoopExit();
- if (exitNode == null) {
- exitNode = graph.add(new LoopExitNode(loopBegin));
- graph.addAfterFixed(exitBlock.getBeginNode(), exitNode);
- if (nodes != null) {
- nodes.mark(exitNode);
- }
- graph.getDebug().dump(DebugContext.VERBOSE_LEVEL, graph, "Adjusting loop exit node for %s", loopBegin);
- }
- exits.add(exitNode);
- }
- for (LoopExitNode exitNode : loopBegin.loopExits()) {
- if (!exits.contains(exitNode)) {
- if (nodes != null) {
- nodes.clear(exitNode);
- }
- graph.removeFixed(exitNode);
- }
- }
- }
-
- }
-
- @Override
protected void beforeDuplication() {
- cleanupLoopExits();
+ // nothing to do
}
@Override
public void insertBefore(LoopEx loop) {
// TODO Auto-generated method stub
< prev index next >