src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/util/EconomicSetNodeEventListener.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/util/EconomicSetNodeEventListener.java Thu Jun 27 03:10:52 2019 +0200
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/util/EconomicSetNodeEventListener.java Thu Jun 27 03:33:44 2019 +0200
@@ -33,6 +33,7 @@
import org.graalvm.compiler.graph.Graph.NodeEventListener;
import org.graalvm.compiler.graph.Node;
import org.graalvm.compiler.graph.Node.IndirectCanonicalization;
+import org.graalvm.compiler.nodes.AbstractBeginNode;
/**
* A simple {@link NodeEventListener} implementation that accumulates event nodes in a
@@ -48,7 +49,7 @@
*/
public EconomicSetNodeEventListener() {
this.nodes = EconomicSet.create(Equivalence.IDENTITY);
- this.filter = EnumSet.allOf(NodeEvent.class);
+ this.filter = EnumSet.of(NodeEvent.INPUT_CHANGED, NodeEvent.NODE_ADDED, NodeEvent.ZERO_USAGES);
}
/**
@@ -71,12 +72,23 @@
@Override
public void changed(NodeEvent e, Node node) {
if (filter.contains(e)) {
- nodes.add(node);
+ add(node);
if (node instanceof IndirectCanonicalization) {
for (Node usage : node.usages()) {
- nodes.add(usage);
+ add(usage);
}
}
+
+ if (node instanceof AbstractBeginNode) {
+ AbstractBeginNode abstractBeginNode = (AbstractBeginNode) node;
+ add(abstractBeginNode.predecessor());
+ }
+ }
+ }
+
+ private void add(Node n) {
+ if (n != null) {
+ nodes.add(n);
}
}