Mercurial > hg > graal-compiler
changeset 23147:2d578cb15516
Ensure indirect nodes trigger canonicalization
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Tue, 08 Dec 2015 17:24:35 -0800 |
parents | 5eb7281c661c |
children | fea7e5ffe8ce |
files | graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/address/AddressNode.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/util/HashSetNodeEventListener.java |
diffstat | 4 files changed, 21 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java Tue Dec 08 12:30:15 2015 -0800 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java Tue Dec 08 17:24:35 2015 -0800 @@ -201,6 +201,13 @@ public interface ValueNumberable { } + /** + * Marker interface for nodes that contains other nodes. When the inputs to this node changes, + * users of this node should also be placed on the work list for canonicalization. + */ + public interface IndirectCanonicalization { + } + private Graph graph; int id;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/address/AddressNode.java Tue Dec 08 12:30:15 2015 -0800 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/memory/address/AddressNode.java Tue Dec 08 17:24:35 2015 -0800 @@ -24,6 +24,7 @@ import com.oracle.graal.compiler.common.type.StampFactory; import com.oracle.graal.graph.NodeClass; +import com.oracle.graal.graph.Node.IndirectCanonicalization; import com.oracle.graal.nodeinfo.InputType; import com.oracle.graal.nodeinfo.NodeInfo; import com.oracle.graal.nodeinfo.StructuralInput; @@ -33,7 +34,7 @@ * Base class for nodes that deal with addressing calculation. */ @NodeInfo(allowedUsageTypes = InputType.Association) -public abstract class AddressNode extends FloatingNode { +public abstract class AddressNode extends FloatingNode implements IndirectCanonicalization { public static final NodeClass<AddressNode> TYPE = NodeClass.create(AddressNode.class); protected AddressNode(NodeClass<? extends AddressNode> c) {
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Tue Dec 08 12:30:15 2015 -0800 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Tue Dec 08 17:24:35 2015 -0800 @@ -33,6 +33,7 @@ import com.oracle.graal.graph.Graph.NodeEventListener; import com.oracle.graal.graph.Graph.NodeEventScope; import com.oracle.graal.graph.Node; +import com.oracle.graal.graph.Node.IndirectCanonicalization; import com.oracle.graal.graph.NodeClass; import com.oracle.graal.graph.NodeWorkList; import com.oracle.graal.graph.spi.Canonicalizable; @@ -186,6 +187,11 @@ public void inputChanged(Node node) { workList.add(node); + if (node instanceof IndirectCanonicalization) { + for (Node usage : node.usages()) { + workList.add(usage); + } + } } public void usagesDroppedToZero(Node node) {
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/util/HashSetNodeEventListener.java Tue Dec 08 12:30:15 2015 -0800 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/util/HashSetNodeEventListener.java Tue Dec 08 17:24:35 2015 -0800 @@ -28,6 +28,7 @@ import com.oracle.graal.graph.Graph.NodeEvent; import com.oracle.graal.graph.Graph.NodeEventListener; +import com.oracle.graal.graph.Node.IndirectCanonicalization; import com.oracle.graal.graph.Node; /** @@ -67,6 +68,11 @@ public void event(NodeEvent e, Node node) { if (filter.contains(e)) { nodes.add(node); + if (node instanceof IndirectCanonicalization) { + for (Node usage : node.usages()) { + nodes.add(usage); + } + } } }