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