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