src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopFragment.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopFragment.java	Mon Mar 20 17:40:13 2017
--- new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopFragment.java	Mon Mar 20 17:40:13 2017

*** 22,32 **** --- 22,31 ---- */ package org.graalvm.compiler.loop; import java.util.Collections; import java.util.Iterator; import java.util.Map; import org.graalvm.compiler.debug.GraalError; import org.graalvm.compiler.graph.Graph; import org.graalvm.compiler.graph.Graph.DuplicationReplacement; import org.graalvm.compiler.graph.Node;
*** 34,43 **** --- 33,43 ---- import org.graalvm.compiler.graph.iterators.NodeIterable; import org.graalvm.compiler.nodes.AbstractBeginNode; import org.graalvm.compiler.nodes.EndNode; import org.graalvm.compiler.nodes.FixedNode; import org.graalvm.compiler.nodes.FrameState; + import org.graalvm.compiler.nodes.GuardNode; import org.graalvm.compiler.nodes.GuardPhiNode; import org.graalvm.compiler.nodes.GuardProxyNode; import org.graalvm.compiler.nodes.Invoke; import org.graalvm.compiler.nodes.LoopExitNode; import org.graalvm.compiler.nodes.MergeNode;
*** 51,68 **** --- 51,69 ---- import org.graalvm.compiler.nodes.cfg.Block; import org.graalvm.compiler.nodes.java.MonitorEnterNode; import org.graalvm.compiler.nodes.spi.NodeWithState; import org.graalvm.compiler.nodes.virtual.CommitAllocationNode; import org.graalvm.compiler.nodes.virtual.VirtualObjectNode; + import org.graalvm.util.EconomicMap; public abstract class LoopFragment { private final LoopEx loop; private final LoopFragment original; protected NodeBitMap nodes; protected boolean nodesReady; ! private EconomicMap<Node, Node> duplicationMap; public LoopFragment(LoopEx loop) { this(loop, null); this.nodesReady = true; }
*** 210,246 **** --- 211,247 ---- for (ProxyNode proxy : earlyExit.proxies()) { nodes.mark(proxy); } } ! final NodeBitMap notloopNodes = graph.createNodeBitMap(); ! final NodeBitMap nonLoopNodes = graph.createNodeBitMap(); for (AbstractBeginNode b : blocks) { if (b.isDeleted()) { continue; } for (Node n : b.getBlockNodes()) { if (n instanceof CommitAllocationNode) { for (VirtualObjectNode obj : ((CommitAllocationNode) n).getVirtualObjects()) { ! markFloating(obj, nodes, notloopNodes); ! markFloating(obj, nodes, nonLoopNodes); } } if (n instanceof MonitorEnterNode) { ! markFloating(((MonitorEnterNode) n).getMonitorId(), nodes, notloopNodes); ! markFloating(((MonitorEnterNode) n).getMonitorId(), nodes, nonLoopNodes); } for (Node usage : n.usages()) { ! markFloating(usage, nodes, notloopNodes); ! markFloating(usage, nodes, nonLoopNodes); } } } } ! private static boolean markFloating(Node n, NodeBitMap loopNodes, NodeBitMap notloopNodes) { ! private static boolean markFloating(Node n, NodeBitMap loopNodes, NodeBitMap nonLoopNodes) { if (loopNodes.isMarked(n)) { return true; } ! if (notloopNodes.isMarked(n)) { ! if (nonLoopNodes.isMarked(n)) { return false; } if (n instanceof FixedNode) { return false; }
*** 249,272 **** --- 250,278 ---- PhiNode phi = (PhiNode) n; mark = loopNodes.isMarked(phi.merge()); if (mark) { loopNodes.mark(n); } else { ! notloopNodes.mark(n); ! nonLoopNodes.mark(n); return false; } } for (Node usage : n.usages()) { ! if (markFloating(usage, loopNodes, notloopNodes)) { ! if (markFloating(usage, loopNodes, nonLoopNodes)) { mark = true; } } + if (!mark && n instanceof GuardNode) { + // (gd) this is only OK if we are not going to make loop transforms based on this + assert !((GuardNode) n).graph().hasValueProxies(); + mark = true; + } if (mark) { loopNodes.mark(n); return true; } ! notloopNodes.mark(n); ! nonLoopNodes.mark(n); return false; } public static NodeIterable<AbstractBeginNode> toHirBlocks(final Iterable<Block> blocks) { return new NodeIterable<AbstractBeginNode>() {

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop/src/org/graalvm/compiler/loop/LoopFragment.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File