changeset 3179:b9439feeec65

NodeArray uses modCount to assert in Iterators, variableInputs is now protected so that each Node class using it needs to export it explicitly (and thus give it a name)
author Lukas Stadler <lukas.stadler@jku.at>
date Thu, 07 Jul 2011 14:33:57 +0200
parents c7c5b06e92dd
children cb6e4d82ef3a
files graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/alloc/LinearScan.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/AbstractMemoryCheckpointNode.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/AccessNode.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Anchor.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/FixedGuard.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Merge.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Phi.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/MemoryPhase.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/ReadEliminationPhase.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameState.java graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java
diffstat 12 files changed, 51 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/alloc/LinearScan.java	Wed Jul 06 21:48:33 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/alloc/LinearScan.java	Thu Jul 07 14:33:57 2011 +0200
@@ -1953,7 +1953,7 @@
                 HashMap<VirtualObject, VirtualObjectField> objectStates = new HashMap<VirtualObject, VirtualObjectField>();
                 FrameState current = topState;
                 do {
-                    for (Node n : current.inputs().variablePart()) {
+                    for (Node n : current.virtualObjectMappings()) {
                         VirtualObjectField field = (VirtualObjectField) n;
                         // null states occur for objects with 0 fields
                         if (field != null && !objectStates.containsKey(field.object())) {
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/AbstractMemoryCheckpointNode.java	Wed Jul 06 21:48:33 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/AbstractMemoryCheckpointNode.java	Thu Jul 07 14:33:57 2011 +0200
@@ -49,6 +49,6 @@
     }
 
     public List<Node> mergedNodes() {
-        return inputs().variablePart();
+        return variableInputs();
     }
 }
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/AccessNode.java	Wed Jul 06 21:48:33 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/AccessNode.java	Thu Jul 07 14:33:57 2011 +0200
@@ -22,6 +22,8 @@
  */
 package com.oracle.max.graal.compiler.ir;
 
+import java.util.*;
+
 import com.oracle.max.graal.compiler.debug.*;
 import com.oracle.max.graal.graph.*;
 import com.sun.cri.ci.*;
@@ -72,6 +74,14 @@
         setObject(object);
     }
 
+    public void addDependency(Node x) {
+        variableInputs().add(x);
+    }
+
+    public List<Node> dependencies() {
+        return variableInputs();
+    }
+
     @Override
     public void print(LogStream out) {
         out.print("mem read from ").print(object());
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Anchor.java	Wed Jul 06 21:48:33 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Anchor.java	Thu Jul 07 14:33:57 2011 +0200
@@ -44,6 +44,10 @@
         super(CiKind.Illegal, INPUT_COUNT, SUCCESSOR_COUNT, graph);
     }
 
+    public void addGuard(GuardNode x) {
+        variableInputs().add(x);
+    }
+
     @Override
     public void accept(ValueVisitor v) {
         v.visitAnchor(this);
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/FixedGuard.java	Wed Jul 06 21:48:33 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/FixedGuard.java	Thu Jul 07 14:33:57 2011 +0200
@@ -22,6 +22,8 @@
  */
 package com.oracle.max.graal.compiler.ir;
 
+import java.util.*;
+
 import com.oracle.max.graal.compiler.*;
 import com.oracle.max.graal.compiler.debug.*;
 import com.oracle.max.graal.compiler.ir.Deoptimize.DeoptAction;
@@ -54,7 +56,7 @@
     }
 
     public void addNode(BooleanNode node) {
-        inputs().add(node);
+        variableInputs().add(node);
     }
 
     @Override
@@ -75,14 +77,16 @@
         @Override
         public Node canonical(Node node) {
             FixedGuard fixedGuard = (FixedGuard) node;
-            for (Node n : fixedGuard.inputs()) {
+            Iterator<Node> iter = fixedGuard.variableInputs().iterator();
+            while (iter.hasNext()) {
+                Node n = iter.next();
                 if (n instanceof Constant) {
                     Constant c = (Constant) n;
                     if (c.asConstant().asBoolean()) {
                         if (GraalOptions.TraceCanonicalizer) {
                             TTY.println("Removing redundant fixed guard " + fixedGuard);
                         }
-                        fixedGuard.inputs().remove(c);
+                        iter.remove();
                     } else {
                         if (GraalOptions.TraceCanonicalizer) {
                             TTY.println("Replacing fixed guard " + fixedGuard + " with deoptimization node");
@@ -92,7 +96,7 @@
                 }
             }
 
-            if (fixedGuard.inputs().size() == 0) {
+            if (fixedGuard.variableInputs().size() == 0) {
                 return fixedGuard.next();
             }
             return fixedGuard;
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Merge.java	Wed Jul 06 21:48:33 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Merge.java	Thu Jul 07 14:33:57 2011 +0200
@@ -76,20 +76,20 @@
     }
 
     public int endIndex(EndNode end) {
-        assert inputs().variablePart().contains(end);
-        return inputs().variablePart().indexOf(end);
+        assert variableInputs().contains(end);
+        return variableInputs().indexOf(end);
     }
 
     public void addEnd(EndNode end) {
-        inputs().variablePart().add(end);
+        variableInputs().add(end);
     }
 
     public int endCount() {
-        return inputs().variablePart().size();
+        return variableInputs().size();
     }
 
     public EndNode endAt(int index) {
-        return (EndNode) inputs().variablePart().get(index);
+        return (EndNode) variableInputs().get(index);
     }
 
     @Override
@@ -310,9 +310,9 @@
     }
 
     public void removeEnd(EndNode pred) {
-        int predIndex = inputs().variablePart().indexOf(pred);
+        int predIndex = variableInputs().indexOf(pred);
         assert predIndex != -1;
-        inputs().variablePart().remove(predIndex);
+        variableInputs().remove(predIndex);
 
         for (Node usage : usages()) {
             if (usage instanceof Phi) {
@@ -339,6 +339,6 @@
     }
 
     public List<Node> phiPredecessors() {
-        return Collections.unmodifiableList(inputs().variablePart());
+        return Collections.unmodifiableList(variableInputs());
     }
 }
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Phi.java	Wed Jul 06 21:48:33 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Phi.java	Thu Jul 07 14:33:57 2011 +0200
@@ -101,7 +101,7 @@
      * @return the instruction that produced the value in the i'th predecessor
      */
     public Value valueAt(int i) {
-        return (Value) inputs().variablePart().get(i);
+        return (Value) variableInputs().get(i);
     }
 
     public void setValueAt(int i, Value x) {
@@ -113,7 +113,7 @@
      * @return the number of inputs in this phi
      */
     public int valueCount() {
-        return inputs().variablePart().size();
+        return variableInputs().size();
     }
 
     @Override
@@ -150,11 +150,11 @@
     }
 
     public void addInput(Node y) {
-        inputs().variablePart().add(y);
+        variableInputs().add(y);
     }
 
     public void removeInput(int index) {
-        inputs().variablePart().remove(index);
+        variableInputs().remove(index);
     }
 
     @Override
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/MemoryPhase.java	Wed Jul 06 21:48:33 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/MemoryPhase.java	Thu Jul 07 14:33:57 2011 +0200
@@ -198,7 +198,7 @@
             }
 
             // Create dependency on previous write to same location.
-            node.inputs().variablePart().add(getLocationForWrite(node));
+            node.addDependency(getLocationForWrite(node));
 
             locationForWrite.put(location, node);
             locationForRead.put(location, node);
@@ -220,7 +220,7 @@
             }
 
             // Create dependency on previous node that creates the memory state for this location.
-            node.inputs().variablePart().add(getLocationForRead(node));
+            node.addDependency(getLocationForRead(node));
         }
 
         public Node getLocationForRead(ReadNode node) {
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/ReadEliminationPhase.java	Wed Jul 06 21:48:33 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/ReadEliminationPhase.java	Thu Jul 07 14:33:57 2011 +0200
@@ -35,8 +35,8 @@
     @Override
     protected void run(Graph graph) {
         for (ReadNode n : graph.getNodes(ReadNode.class)) {
-            if (n.inputs().variablePart().size() > 0) {
-                Node memoryInput = n.inputs().variablePart().get(0);
+            if (n.dependencies().size() > 0) {
+                Node memoryInput = n.dependencies().get(0);
                 if (memoryInput instanceof WriteNode) {
                     WriteNode other = (WriteNode) memoryInput;
                     if (other.object() == n.object() && other.location() == n.location()) {
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java	Wed Jul 06 21:48:33 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java	Thu Jul 07 14:33:57 2011 +0200
@@ -474,7 +474,7 @@
             // TODO(tw): Make sure every ReadNode that is connected to the same memory state is executed before every write node.
             WriteNode wn = (WriteNode) i;
             // TODO: Iterate over variablePart.
-            wn.inputs().variablePart();
+//            wn.variableInputs();
         }
 
         FrameState state = null;
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameState.java	Wed Jul 06 21:48:33 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameState.java	Thu Jul 07 14:33:57 2011 +0200
@@ -131,17 +131,20 @@
 
     public void addVirtualObjectMapping(Node virtualObject) {
         assert virtualObject instanceof VirtualObjectField || virtualObject instanceof Phi : virtualObject;
-        inputs().variablePart().add(virtualObject);
+        variableInputs().add(virtualObject);
     }
 
     public int virtualObjectMappingCount() {
-        return inputs().variablePart().size();
+        return variableInputs().size();
     }
 
     public Node virtualObjectMappingAt(int i) {
-        return inputs().variablePart().get(i);
+        return variableInputs().get(i);
     }
 
+    public List<Node> virtualObjectMappings() {
+        return variableInputs();
+    }
 
     /**
      * Gets a copy of this frame state.
@@ -149,7 +152,7 @@
     public FrameState duplicate(int bci) {
         FrameState other = new FrameState(method, bci, localsSize, stackSize, locksSize, rethrowException, graph());
         other.inputs().setAll(inputs());
-        other.inputs().variablePart().addAll(inputs().variablePart());
+        other.variableInputs().addAll(variableInputs());
         other.setOuterFrameState(outerFrameState());
         return other;
     }
@@ -181,7 +184,7 @@
         for (int i = 0; i < locksSize; i++) {
             other.setValueAt(localsSize + other.stackSize + i, lockAt(i));
         }
-        other.inputs().variablePart().addAll(inputs().variablePart());
+        other.variableInputs().addAll(variableInputs());
         other.setOuterFrameState(outerFrameState());
         return other;
     }
@@ -551,7 +554,7 @@
                 for (VirtualObject obj : vobjs) {
                     TTY.println("+" + obj);
                 }
-                for (Node vobj : inputs().variablePart()) {
+                for (Node vobj : variableInputs()) {
                     if (vobj instanceof VirtualObjectField) {
                         TTY.println("-" + ((VirtualObjectField) vobj).object());
                     } else {
--- a/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java	Wed Jul 06 21:48:33 2011 +0200
+++ b/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java	Thu Jul 07 14:33:57 2011 +0200
@@ -301,7 +301,7 @@
             Graph graph = storeIndexed.graph();
             Anchor anchor = new Anchor(graph);
             GuardNode boundsCheck = createBoundsCheck(storeIndexed, tool);
-            anchor.inputs().add(boundsCheck);
+            anchor.addGuard(boundsCheck);
 
 
             CiKind elementKind = storeIndexed.elementKind();