# HG changeset patch # User Thomas Wuerthinger # Date 1366994417 -7200 # Node ID 199c77760850d08d90d1f2891d2ca0b649060439 # Parent e162d9e32830d5f05f3fc79f76f86cc75d3e7df9 Rename InputChangedListener => NodeChangedListener. Add event for usage count of a node dropping to 0. diff -r e162d9e32830 -r 199c77760850 graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java Fri Apr 26 17:15:10 2013 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java Fri Apr 26 18:40:17 2013 +0200 @@ -47,7 +47,8 @@ private int deletedNodeCount; private GraphEventLog eventLog; - InputChangedListener inputChanged; + NodeChangedListener inputChanged; + NodeChangedListener usagesDroppedZero; private final HashMap cachedNodes = new HashMap<>(); private static final class CacheEntry { @@ -152,12 +153,12 @@ return node; } - public interface InputChangedListener { + public interface NodeChangedListener { - void inputChanged(Node node); + void nodeChanged(Node node); } - public void trackInputChange(InputChangedListener inputChangedListener) { + public void trackInputChange(NodeChangedListener inputChangedListener) { this.inputChanged = inputChangedListener; } @@ -165,6 +166,14 @@ inputChanged = null; } + public void trackUsagesDroppedZero(NodeChangedListener usagesDroppedZeroListener) { + this.usagesDroppedZero = usagesDroppedZeroListener; + } + + public void stopTrackingUsagesDroppedZero() { + usagesDroppedZero = null; + } + /** * Adds a new node to the graph, if a similar node already exists in the graph, the * provided node will not be added to the graph but the similar node will be returned diff -r e162d9e32830 -r 199c77760850 graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java Fri Apr 26 17:15:10 2013 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java Fri Apr 26 18:40:17 2013 +0200 @@ -22,10 +22,11 @@ */ package com.oracle.graal.graph; +import java.io.*; import java.lang.annotation.*; import java.util.*; -import com.oracle.graal.graph.Graph.InputChangedListener; +import com.oracle.graal.graph.Graph.NodeChangedListener; import com.oracle.graal.graph.NodeClass.*; import com.oracle.graal.graph.iterators.*; @@ -193,12 +194,17 @@ assert assertTrue(result, "not found in usages, old input: %s", oldInput); } if (newInput != null) { - InputChangedListener inputChanged = graph.inputChanged; + NodeChangedListener inputChanged = graph.inputChanged; if (inputChanged != null) { - inputChanged.inputChanged(this); + inputChanged.nodeChanged(this); } assert newInput.usages != null : "not yet added? " + newInput; newInput.usages.add(this); + } else if (oldInput != null && oldInput.usages().isEmpty()) { + NodeChangedListener nodeChangedListener = graph.usagesDroppedZero; + if (nodeChangedListener != null) { + nodeChangedListener.nodeChanged(oldInput); + } } } } @@ -253,9 +259,9 @@ boolean result = usage.getNodeClass().replaceFirstInput(usage, this, other); assert assertTrue(result, "not found in inputs, usage: %s", usage); if (other != null) { - InputChangedListener inputChanged = graph.inputChanged; + NodeChangedListener inputChanged = graph.inputChanged; if (inputChanged != null) { - inputChanged.inputChanged(usage); + inputChanged.nodeChanged(usage); } other.usages.add(usage); } @@ -299,6 +305,12 @@ for (Node input : inputs()) { removeThisFromUsages(input); + if (input.usages().isEmpty()) { + NodeChangedListener nodeChangedListener = graph.usagesDroppedZero; + if (nodeChangedListener != null) { + nodeChangedListener.nodeChanged(input); + } + } } getNodeClass().clearInputs(this); } diff -r e162d9e32830 -r 199c77760850 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Fri Apr 26 17:15:10 2013 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Fri Apr 26 18:40:17 2013 +0200 @@ -28,7 +28,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.debug.*; import com.oracle.graal.graph.*; -import com.oracle.graal.graph.Graph.InputChangedListener; +import com.oracle.graal.graph.Graph.NodeChangedListener; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; @@ -132,19 +132,22 @@ } private void processWorkSet(StructuredGraph graph) { - graph.trackInputChange(new InputChangedListener() { + NodeChangedListener nodeChangedListener = new NodeChangedListener() { @Override - public void inputChanged(Node node) { + public void nodeChanged(Node node) { workList.addAgain(node); } - }); + }; + graph.trackInputChange(nodeChangedListener); + graph.trackUsagesDroppedZero(nodeChangedListener); for (Node n : workList) { processNode(n, graph); } graph.stopTrackingInputChange(); + graph.stopTrackingUsagesDroppedZero(); } private void processNode(Node node, StructuredGraph graph) { diff -r e162d9e32830 -r 199c77760850 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/IterativeConditionalEliminationPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/IterativeConditionalEliminationPhase.java Fri Apr 26 17:15:10 2013 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/IterativeConditionalEliminationPhase.java Fri Apr 26 18:40:17 2013 +0200 @@ -24,7 +24,7 @@ import java.util.*; -import com.oracle.graal.graph.Graph.InputChangedListener; +import com.oracle.graal.graph.Graph.NodeChangedListener; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.phases.*; @@ -49,7 +49,7 @@ } } - private static class Listener implements InputChangedListener { + private static class Listener implements NodeChangedListener { private final Set canonicalizationRoots; @@ -58,7 +58,7 @@ } @Override - public void inputChanged(Node node) { + public void nodeChanged(Node node) { canonicalizationRoots.add(node); } }