src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/NodeWorkList.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
hotspot Cdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/NodeWorkList.java
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/NodeWorkList.java
Print this page
*** 25,34 ****
--- 25,36 ----
import java.util.ArrayDeque;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Queue;
+ import org.graalvm.compiler.core.common.PermanentBailoutException;
+
public abstract class NodeWorkList implements Iterable<Node> {
protected final Queue<Node> worklist;
private NodeWorkList(Graph graph, boolean fill) {
*** 68,100 ****
throw new UnsupportedOperationException();
}
}
public static final class IterativeNodeWorkList extends NodeWorkList {
!
private static final int EXPLICIT_BITMAP_THRESHOLD = 10;
protected NodeBitMap inQueue;
! private int iterationLimit = Integer.MAX_VALUE;
private Node firstNoChange;
private Node lastPull;
private Node lastChain;
public IterativeNodeWorkList(Graph graph, boolean fill, int iterationLimitPerNode) {
super(graph, fill);
if (iterationLimitPerNode > 0) {
! iterationLimit = iterationLimitPerNode * graph.getNodeCount();
}
}
@Override
public Iterator<Node> iterator() {
return new QueueConsumingIterator() {
@Override
public boolean hasNext() {
dropDeleted();
! return iterationLimit > 0 && !worklist.isEmpty();
}
@Override
public Node next() {
if (iterationLimit-- <= 0) {
--- 70,115 ----
throw new UnsupportedOperationException();
}
}
public static final class IterativeNodeWorkList extends NodeWorkList {
! private static final int HARD_ITERATION_LIMIT = 1_000_000;
private static final int EXPLICIT_BITMAP_THRESHOLD = 10;
protected NodeBitMap inQueue;
! private int iterationLimit;
! private boolean hardLimit;
private Node firstNoChange;
private Node lastPull;
private Node lastChain;
public IterativeNodeWorkList(Graph graph, boolean fill, int iterationLimitPerNode) {
super(graph, fill);
if (iterationLimitPerNode > 0) {
! long limit = (long) iterationLimitPerNode * graph.getNodeCount();
! iterationLimit = (int) Long.min(Integer.MAX_VALUE, limit);
! hardLimit = false;
! } else {
! iterationLimit = HARD_ITERATION_LIMIT;
! hardLimit = true;
}
}
@Override
public Iterator<Node> iterator() {
return new QueueConsumingIterator() {
@Override
public boolean hasNext() {
dropDeleted();
! if (iterationLimit <= 0) {
! if (hardLimit) {
! throw new PermanentBailoutException("Iteration limit reached");
! } else {
! return false;
! }
! }
! return !worklist.isEmpty();
}
@Override
public Node next() {
if (iterationLimit-- <= 0) {
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.graph/src/org/graalvm/compiler/graph/NodeWorkList.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File