# HG changeset patch # User Gilles Duboscq # Date 1303993662 -7200 # Node ID 9db994445118108c009b2b156142eb6210a646a4 # Parent d9b2a865305479c4f3858f80a478f7721d9f559d more tests for GraalGraph, some changes and fixes diff -r d9b2a8653054 -r 9db994445118 graal/GraalGraph/src/com/oracle/graal/graph/Graph.java --- a/graal/GraalGraph/src/com/oracle/graal/graph/Graph.java Wed Apr 27 22:13:30 2011 +0200 +++ b/graal/GraalGraph/src/com/oracle/graal/graph/Graph.java Thu Apr 28 14:27:42 2011 +0200 @@ -46,7 +46,7 @@ } public Node local(Node node) { - if (node.getGraph() == this) { + if (node.graph() == this) { return node; } return node.cloneNode(this); diff -r d9b2a8653054 -r 9db994445118 graal/GraalGraph/src/com/oracle/graal/graph/Node.java --- a/graal/GraalGraph/src/com/oracle/graal/graph/Node.java Wed Apr 27 22:13:30 2011 +0200 +++ b/graal/GraalGraph/src/com/oracle/graal/graph/Node.java Thu Apr 28 14:27:42 2011 +0200 @@ -48,6 +48,12 @@ this.successors = new NodeArray(successors); this.predecessors = new ArrayList(); this.usages = new ArrayList(); + for(Node input : inputs) { + input.usages.add(this); + } + for(Node successor : successors) { + successor.predecessors.add(this); + } } public Node(int inputs, int successors, Graph graph) { @@ -69,7 +75,8 @@ public Node set(int index, Node node) { if (node.graph != Node.this.graph) { - // fail ? + // fail + System.err.println("node.graph != Node.this.graph"); } Node old = nodes[index]; nodes[index] = node; @@ -109,6 +116,10 @@ System.arraycopy(nodes, 0, copy, 0, nodes.length); return copy; } + + public int size() { + return nodes.length; + } } public Collection getPredecessors() { @@ -127,11 +138,11 @@ return successors; } - public int getId() { + public int id() { return id; } - public Graph getGraph() { + public Graph graph() { return graph; } @@ -143,7 +154,8 @@ for (int i = 0; i < myInputs.length; i++) { other.inputs.set(i, myInputs[i]); } - for (Node usage : usages) { + while(!usages.isEmpty()) { + Node usage = usages.get(0); usage.inputs.replace(this, other); } @@ -155,23 +167,17 @@ predecessor.successors.replace(this, other); } } + + protected Node setInput(int index, Node in) { + return this.getInputs().set(index, in); + } + + protected Node setSuccessor(int index, Node sux) { + return this.getSuccessors().set(index, sux); + } public abstract Node cloneNode(Graph into); - @Override - public boolean equals(Object obj) { - if (obj == this) { - return true; - } - if (obj.getClass() == this.getClass()) { - Node other = (Node) obj; - if (other.id == this.id && other.graph == this.graph) { - return true; - } - } - return false; - } - protected Node getInput(int index) { return this.inputs.nodes[index]; } @@ -187,4 +193,4 @@ } return nodes; } -} +} \ No newline at end of file diff -r d9b2a8653054 -r 9db994445118 graal/GraalGraph/src/com/oracle/graal/graph/NullNode.java --- a/graal/GraalGraph/src/com/oracle/graal/graph/NullNode.java Wed Apr 27 22:13:30 2011 +0200 +++ b/graal/GraalGraph/src/com/oracle/graal/graph/NullNode.java Thu Apr 28 14:27:42 2011 +0200 @@ -27,6 +27,10 @@ public NullNode(int inputs, int successors, Graph graph) { super(inputs, successors, graph); } + + public NullNode(Graph graph) { + super(0, 0, graph); + } @Override public NullNode cloneNode(Graph into) { diff -r d9b2a8653054 -r 9db994445118 graal/GraalGraph/test/com/oracle/graal/graph/NodeTest.java --- a/graal/GraalGraph/test/com/oracle/graal/graph/NodeTest.java Wed Apr 27 22:13:30 2011 +0200 +++ b/graal/GraalGraph/test/com/oracle/graal/graph/NodeTest.java Thu Apr 28 14:27:42 2011 +0200 @@ -29,13 +29,48 @@ public class NodeTest { @Test - public void testReplace() { + public void testBasics() { DummyNode n1 = new DummyNode(2, 1, null); Graph g1 = new Graph(); DummyNode n2 = new DummyNode(1, 1, g1); - assertNotSame(n1, n2); + NullNode null1 = new NullNode(g1); + DummyNode n3 = new DummyNode(0, 0, g1); + n2.dummySetInput(0, null1); + n2.dummySetSuccessor(0, n3); + + assertSame(null1, n2.getInput(0)); + assertSame(n3, n2.getSuccessor(0)); + + for(Node in : n1.getInputs()) + assertNotNull(in); + for(Node sux : n1.getSuccessors()) + assertNotNull(sux); + assertEquals(n1.getInputs().size(), 2); + assertEquals(n1.getSuccessors().size(), 1); + } + + @Test + public void testReplace() { + Graph g2 = new Graph(); + + NullNode null2 = new NullNode(g2); + NullNode null3 = new NullNode(g2); + NullNode null4 = new NullNode(g2); + NullNode null5 = new NullNode(g2); + + DummyOp2 o1 = new DummyOp2(null2, null3, g2); + DummyOp2 o2 = new DummyOp2(o1, null4, g2); + DummyOp2 o3 = new DummyOp2(o2, null4, g2); + DummyOp2 o4 = new DummyOp2(null5, null5, g2); + + o2.replace(o4); + + assertTrue(o1.getUsages().contains(o4)); + assertTrue(null4.getUsages().contains(o4)); + assertFalse(o3.getInputs().contains(o2)); + assertTrue(o3.getInputs().contains(o4)); } private static class DummyNode extends Node { @@ -47,6 +82,14 @@ public DummyNode(Node[] inputs, Node[] successors, Graph graph) { super(inputs, successors, graph); } + + public void dummySetInput(int idx, Node n) { + this.setInput(idx, n); + } + + public void dummySetSuccessor(int idx, Node n) { + this.setSuccessor(idx, n); + } @Override public Node cloneNode(Graph into) { @@ -54,4 +97,25 @@ } } + + private static class DummyOp2 extends Node{ + + public DummyOp2(Node x, Node y, Graph graph) { + super(new Node[] {x, y}, new Node[] {}, graph); + } + + public Node x() { + return this.getInput(0); + } + + public Node y() { + return this.getInput(1); + } + + @Override + public Node cloneNode(Graph into) { + return new DummyOp2(x(), y(), into); // this may create a Node which has inputs which do not belong to its graph + } + + } }