# HG changeset patch # User Lukas Stadler # Date 1310042037 -7200 # Node ID b9439feeec65324535a8e9bd33247ecfde458b6f # Parent c7c5b06e92ddcf477056b8e62bef05229affa826 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) diff -r c7c5b06e92dd -r b9439feeec65 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/alloc/LinearScan.java --- 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 objectStates = new HashMap(); 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())) { diff -r c7c5b06e92dd -r b9439feeec65 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/AbstractMemoryCheckpointNode.java --- 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 mergedNodes() { - return inputs().variablePart(); + return variableInputs(); } } diff -r c7c5b06e92dd -r b9439feeec65 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/AccessNode.java --- 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 dependencies() { + return variableInputs(); + } + @Override public void print(LogStream out) { out.print("mem read from ").print(object()); diff -r c7c5b06e92dd -r b9439feeec65 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Anchor.java --- 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); diff -r c7c5b06e92dd -r b9439feeec65 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/FixedGuard.java --- 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 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; diff -r c7c5b06e92dd -r b9439feeec65 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Merge.java --- 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 phiPredecessors() { - return Collections.unmodifiableList(inputs().variablePart()); + return Collections.unmodifiableList(variableInputs()); } } diff -r c7c5b06e92dd -r b9439feeec65 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/Phi.java --- 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 diff -r c7c5b06e92dd -r b9439feeec65 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/MemoryPhase.java --- 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) { diff -r c7c5b06e92dd -r b9439feeec65 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/ReadEliminationPhase.java --- 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()) { diff -r c7c5b06e92dd -r b9439feeec65 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java --- 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; diff -r c7c5b06e92dd -r b9439feeec65 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameState.java --- 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 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 { diff -r c7c5b06e92dd -r b9439feeec65 graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java --- 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();