changeset 17328:c9bb0da795d4

Backed out of changeset 17322:655f3e6b467b
author Doug Simon <doug.simon@oracle.com>
date Fri, 03 Oct 2014 14:19:58 +0200
parents 655f3e6b467b
children 1e7e354e407f
files graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/Fields.java graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MonitorGraphTest.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/DebugInfoBuilder.java graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/TypedNodeIteratorTest.java graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/TypedNodeIteratorTest2.java graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Edges.java graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeList.java graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeSuccessorList.java graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotNodeLIRBuilder.java graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64RawNativeCallNode.java graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotNodeLIRBuilder.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotDebugInfoBuilder.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/AllocaNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CStringNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizationFetchUnrollInfoCallNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizeCallerNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DimensionsNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DirectCompareAndSwapNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1PostWriteBarrier.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1PreWriteBarrier.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1ReferentFieldReadBarrier.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewMultiArrayStubCall.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SerialWriteBarrier.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/StubForeignCallNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/StubStartNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/UncommonTrapCallNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VMErrorNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrier.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MethodHandleNode.java graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java graal/com.oracle.graal.nodeinfo.processor/src/com/oracle/graal/nodeinfo/processor/GraphNodeGenerator.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractFixedGuardNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractLocalNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardedValueNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InfopointNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicConstantNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoweredCallTargetNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryMapNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryPhiNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeProfileProxyNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryArithmeticNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatConvertNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatLessThanNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NormalizeCompareNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnaryArithmeticNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/DynamicCounterNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AbstractWriteNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BoxNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BytecodeExceptionNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ConstantLocationNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IntegerSwitchNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/JavaReadNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/JavaWriteNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadMethodNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MembarNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SwitchNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnboxNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeAccessNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewObjectNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessFieldNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessIndexedNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AtomicReadAndAddNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AtomicReadAndWriteNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastDynamicNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorExitNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewMultiArrayNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/SelfReplacingMethodCallTargetNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeSwitchNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualArrayNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualBoxingNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualInstanceNode.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/MultiTypeGuardInlineInfo.java graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64FloatConvertNode.java graal/com.oracle.graal.replacements.hsail/src/com/oracle/graal/replacements/hsail/HSAILMathIntrinsicsNode.java graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/ObjectAccessTest.java graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/PointerTest.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/AssertionNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectObjectStoreNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectReadNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectStoreNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroStateSplitNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MathIntrinsicNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReadRegisterNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/WriteRegisterNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/asserts/NeverPartOfCompilationNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadFinalNode.java graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/SnippetLocationNode.java
diffstat 112 files changed, 184 insertions(+), 319 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/Fields.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/Fields.java	Fri Oct 03 14:19:58 2014 +0200
@@ -77,36 +77,6 @@
         }
     }
 
-    public void copy(Object from, Object to) {
-        for (int index = 0; index < offsets.length; index++) {
-            long offset = offsets[index];
-            Class<?> type = types[index];
-            if (type.isPrimitive()) {
-                if (type == Integer.TYPE) {
-                    unsafe.putInt(to, offset, unsafe.getInt(from, offset));
-                } else if (type == Long.TYPE) {
-                    unsafe.putLong(to, offset, unsafe.getLong(from, offset));
-                } else if (type == Boolean.TYPE) {
-                    unsafe.putBoolean(to, offset, unsafe.getBoolean(from, offset));
-                } else if (type == Float.TYPE) {
-                    unsafe.putFloat(to, offset, unsafe.getFloat(from, offset));
-                } else if (type == Double.TYPE) {
-                    unsafe.putDouble(to, offset, unsafe.getDouble(from, offset));
-                } else if (type == Short.TYPE) {
-                    unsafe.putShort(to, offset, unsafe.getShort(from, offset));
-                } else if (type == Character.TYPE) {
-                    unsafe.putChar(to, offset, unsafe.getChar(from, offset));
-                } else if (type == Byte.TYPE) {
-                    unsafe.putByte(to, offset, unsafe.getByte(from, offset));
-                } else {
-                    assert false : "unhandled property type: " + type;
-                }
-            } else {
-                unsafe.putObject(to, offset, unsafe.getObject(from, offset));
-            }
-        }
-    }
-
     /**
      * Gets the value of a field for a given object.
      *
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MonitorGraphTest.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MonitorGraphTest.java	Fri Oct 03 14:19:58 2014 +0200
@@ -71,7 +71,7 @@
         StructuredGraph graph = parseAndProcess("test2Snippet");
         NodeIterable<MonitorExitNode> monitors = graph.getNodes(MonitorExitNode.class);
         Assert.assertEquals(1, monitors.count());
-        Assert.assertEquals(monitors.first().stateAfter().bci(), 3);
+        Assert.assertEquals(monitors.first().stateAfter().bci, 3);
     }
 
     @SuppressWarnings("all")
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/DebugInfoBuilder.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/DebugInfoBuilder.java	Fri Oct 03 14:19:58 2014 +0200
@@ -120,12 +120,12 @@
 
     protected BytecodeFrame computeFrameForState(FrameState state) {
         try {
-            assert state.bci() != BytecodeFrame.INVALID_FRAMESTATE_BCI;
-            assert state.bci() != BytecodeFrame.UNKNOWN_BCI;
-            assert state.bci() != BytecodeFrame.BEFORE_BCI || state.locksSize() == 0;
-            assert state.bci() != BytecodeFrame.AFTER_BCI || state.locksSize() == 0;
-            assert state.bci() != BytecodeFrame.AFTER_EXCEPTION_BCI || state.locksSize() == 0;
-            assert !(state.method().isSynchronized() && state.bci() != BytecodeFrame.BEFORE_BCI && state.bci() != BytecodeFrame.AFTER_BCI && state.bci() != BytecodeFrame.AFTER_EXCEPTION_BCI) ||
+            assert state.bci != BytecodeFrame.INVALID_FRAMESTATE_BCI;
+            assert state.bci != BytecodeFrame.UNKNOWN_BCI;
+            assert state.bci != BytecodeFrame.BEFORE_BCI || state.locksSize() == 0;
+            assert state.bci != BytecodeFrame.AFTER_BCI || state.locksSize() == 0;
+            assert state.bci != BytecodeFrame.AFTER_EXCEPTION_BCI || state.locksSize() == 0;
+            assert !(state.method().isSynchronized() && state.bci != BytecodeFrame.BEFORE_BCI && state.bci != BytecodeFrame.AFTER_BCI && state.bci != BytecodeFrame.AFTER_EXCEPTION_BCI) ||
                             state.locksSize() > 0;
             assert state.verify();
 
@@ -142,7 +142,7 @@
             if (state.outerFrameState() != null) {
                 caller = computeFrameForState(state.outerFrameState());
             }
-            return new BytecodeFrame(caller, state.method(), state.bci(), state.rethrowException(), state.duringCall(), values, numLocals, numStack, numLocks);
+            return new BytecodeFrame(caller, state.method(), state.bci, state.rethrowException(), state.duringCall(), values, numLocals, numStack, numLocks);
         } catch (GraalInternalError e) {
             throw e.addContext("FrameState: ", state);
         }
--- a/graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/TypedNodeIteratorTest.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/TypedNodeIteratorTest.java	Fri Oct 03 14:19:58 2014 +0200
@@ -36,7 +36,7 @@
     @NodeInfo
     static class TestNode extends Node implements IterableNodeType, TestNodeInterface {
 
-        protected String name;
+        protected final String name;
 
         public static TestNode create(String name) {
             return USE_GENERATED_NODES ? new TypedNodeIteratorTest_TestNodeGen(name) : new TestNode(name);
--- a/graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/TypedNodeIteratorTest2.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/TypedNodeIteratorTest2.java	Fri Oct 03 14:19:58 2014 +0200
@@ -34,7 +34,7 @@
     @NodeInfo
     static class NodeA extends Node implements TestNodeInterface {
 
-        protected String name;
+        protected final String name;
 
         public static NodeA create(String name) {
             return USE_GENERATED_NODES ? new TypedNodeIteratorTest2_NodeAGen(name) : new NodeA(name);
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Edges.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Edges.java	Fri Oct 03 14:19:58 2014 +0200
@@ -135,26 +135,6 @@
     }
 
     /**
-     * Clear edges in a given node. This is accomplished by setting {@linkplain #getDirectCount()
-     * direct} edges to null and replacing the lists containing indirect edges with new lists. The
-     * latter is important so that this method can be used to clear the edges of cloned nodes.
-     *
-     * @param toNode the node whose list edges are to be initialized
-     */
-    public void initializeLists(Node toNode, Node fromNode) {
-        int index = getDirectCount();
-        while (index < getCount()) {
-            NodeList<Node> list = getNodeList(fromNode, index);
-            int size = list.initialSize;
-            NodeList<Node> newList = type == Edges.Type.Inputs ? new NodeInputList<>(toNode, size) : new NodeSuccessorList<>(toNode, size);
-
-            // replacing with a new list object is the expected behavior!
-            initializeList(toNode, index, newList);
-            index++;
-        }
-    }
-
-    /**
      * Copies edges from {@code fromNode} to {@code toNode}. The nodes are expected to be of the
      * exact same type.
      *
@@ -170,13 +150,7 @@
         }
         while (index < getCount()) {
             NodeList<Node> list = getNodeList(toNode, index);
-            if (list == null) {
-                NodeList<Node> fromList = getNodeList(fromNode, index);
-                list = type == Edges.Type.Inputs ? new NodeInputList<>(toNode, fromList) : new NodeSuccessorList<>(toNode, fromList);
-                initializeList(toNode, index, list);
-            } else {
-                list.copy(getNodeList(fromNode, index));
-            }
+            list.copy(getNodeList(fromNode, index));
             index++;
         }
     }
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java	Fri Oct 03 14:19:58 2014 +0200
@@ -29,7 +29,6 @@
 
 import com.oracle.graal.compiler.common.*;
 import com.oracle.graal.debug.*;
-import com.oracle.graal.debug.internal.*;
 import com.oracle.graal.graph.Node.ValueNumberable;
 import com.oracle.graal.graph.iterators.*;
 import com.oracle.graal.options.*;
@@ -846,13 +845,9 @@
 
     }
 
-    private static final DebugTimer DuplicateGraph = Debug.timer("DuplicateGraph");
-
     @SuppressWarnings("all")
     public Map<Node, Node> addDuplicates(Iterable<Node> newNodes, final Graph oldGraph, int estimatedNodeCount, DuplicationReplacement replacements) {
-        try (TimerCloseable s = DuplicateGraph.start()) {
-            return NodeClass.addGraphDuplicate(this, oldGraph, estimatedNodeCount, newNodes, replacements);
-        }
+        return NodeClass.addGraphDuplicate(this, oldGraph, estimatedNodeCount, newNodes, replacements);
     }
 
     public boolean isFrozen() {
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java	Fri Oct 03 14:19:58 2014 +0200
@@ -58,8 +58,6 @@
 public abstract class Node implements Cloneable, Formattable {
 
     public final static boolean USE_GENERATED_NODES = Boolean.parseBoolean(System.getProperty("graal.useGeneratedNodes", "true"));
-    public final static boolean USE_GENERATED_COPY = Boolean.parseBoolean(System.getProperty("graal.useGeneratedCopy", "true"));
-    public final static boolean USE_NEW_CLONE = Boolean.parseBoolean(System.getProperty("graal.useNewClone", "true"));
 
     static final int DELETED_ID_START = -1000000000;
     static final int INITIAL_ID = -1;
@@ -747,13 +745,6 @@
         throw new UnsupportedOperationException();
     }
 
-    /**
-     * @param clearInputsAndSuccessors
-     */
-    protected Node copyGen(boolean clearInputsAndSuccessors) throws InstantiationException {
-        throw new InstantiationException();
-    }
-
     final Node clone(Graph into, boolean clearInputsAndSuccessors) {
         NodeClass nodeClass = getNodeClass();
         if (into != null && nodeClass.valueNumberable() && nodeClass.isLeafNode()) {
@@ -765,38 +756,24 @@
 
         Node newNode = null;
         try {
-            if (USE_GENERATED_NODES && USE_GENERATED_COPY) {
-                newNode = copyGen(clearInputsAndSuccessors);
-            } else if (USE_NEW_CLONE) {
-                newNode = (Node) UnsafeAccess.unsafe.allocateInstance(getClass());
-                nodeClass.getData().copy(this, newNode);
-                if (clearInputsAndSuccessors) {
-                    nodeClass.getEdges(Inputs).initializeLists(newNode, this);
-                    nodeClass.getEdges(Successors).initializeLists(newNode, this);
-                } else {
-                    nodeClass.getEdges(Inputs).copy(this, newNode);
-                    nodeClass.getEdges(Successors).copy(this, newNode);
-                }
-            } else {
-                newNode = (Node) this.clone();
-                if (clearInputsAndSuccessors) {
-                    nodeClass.getEdges(Inputs).clear(newNode);
-                    nodeClass.getEdges(Successors).clear(newNode);
-                }
-                newNode.typeCacheNext = null;
-                newNode.usage0 = null;
-                newNode.usage1 = null;
-                newNode.predecessor = null;
-            }
-        } catch (Exception e) {
+            newNode = (Node) this.clone();
+        } catch (CloneNotSupportedException e) {
             throw new GraalGraphInternalError(e).addContext(this);
         }
+        if (clearInputsAndSuccessors) {
+            nodeClass.getEdges(Inputs).clear(newNode);
+            nodeClass.getEdges(Successors).clear(newNode);
+        }
         newNode.graph = into;
+        newNode.typeCacheNext = null;
         newNode.id = INITIAL_ID;
         if (into != null) {
             into.register(newNode);
         }
+        newNode.usage0 = null;
+        newNode.usage1 = null;
         newNode.extraUsages = NO_NODES;
+        newNode.predecessor = null;
 
         if (into != null && nodeClass.valueNumberable() && nodeClass.isLeafNode()) {
             into.putNodeIntoCache(newNode);
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeList.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeList.java	Fri Oct 03 14:19:58 2014 +0200
@@ -101,8 +101,8 @@
         }
     }
 
-    public int getInitializeSize() {
-        return initialSize;
+    public boolean isList() {
+        return true;
     }
 
     protected abstract void update(T oldNode, T newNode);
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeSuccessorList.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeSuccessorList.java	Fri Oct 03 14:19:58 2014 +0200
@@ -24,8 +24,6 @@
 
 import static com.oracle.graal.graph.Edges.Type.*;
 
-import java.util.*;
-
 import com.oracle.graal.graph.Edges.*;
 
 public final class NodeSuccessorList<T extends Node> extends NodeList<T> {
@@ -43,11 +41,6 @@
         assert self.usages().isEmpty();
     }
 
-    public NodeSuccessorList(Node self, List<? extends T> elements) {
-        super(self, elements);
-        assert self.usages().isEmpty();
-    }
-
     @Override
     protected void update(T oldNode, T newNode) {
         self.updatePredecessor(oldNode, newNode);
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotNodeLIRBuilder.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotNodeLIRBuilder.java	Fri Oct 03 14:19:58 2014 +0200
@@ -193,7 +193,7 @@
 
     @Override
     public void visitFullInfopointNode(FullInfopointNode i) {
-        if (i.getState() != null && i.getState().bci() == BytecodeFrame.AFTER_BCI) {
+        if (i.getState() != null && i.getState().bci == BytecodeFrame.AFTER_BCI) {
             Debug.log("Ignoring InfopointNode for AFTER_BCI");
         } else {
             super.visitFullInfopointNode(i);
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64RawNativeCallNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64RawNativeCallNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -35,7 +35,7 @@
 @NodeInfo
 public class AMD64RawNativeCallNode extends FixedWithNextNode implements LIRLowerable {
 
-    protected Constant functionPointer;
+    protected final Constant functionPointer;
     @Input NodeInputList<ValueNode> args;
 
     public static AMD64RawNativeCallNode create(Kind returnType, Constant functionPointer, ValueNode[] args) {
--- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotNodeLIRBuilder.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotNodeLIRBuilder.java	Fri Oct 03 14:19:58 2014 +0200
@@ -144,7 +144,7 @@
 
     @Override
     public void visitFullInfopointNode(FullInfopointNode i) {
-        if (i.getState() != null && i.getState().bci() == BytecodeFrame.AFTER_BCI) {
+        if (i.getState() != null && i.getState().bci == BytecodeFrame.AFTER_BCI) {
             Debug.log("Ignoring InfopointNode for AFTER_BCI");
         } else {
             super.visitFullInfopointNode(i);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotDebugInfoBuilder.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotDebugInfoBuilder.java	Fri Oct 03 14:19:58 2014 +0200
@@ -67,7 +67,7 @@
 
     @Override
     protected BytecodeFrame computeFrameForState(FrameState state) {
-        assert state.bci() >= 0 || state.bci() == BytecodeFrame.BEFORE_BCI;
+        assert state.bci >= 0 || state.bci == BytecodeFrame.BEFORE_BCI;
         return super.computeFrameForState(state);
     }
 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/AllocaNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/AllocaNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -42,14 +42,14 @@
     /**
      * The number of slots in block.
      */
-    protected int slots;
+    protected final int slots;
 
     /**
      * The indexes of the object pointer slots in the block. Each such object pointer slot must be
      * initialized before any safepoint in the method otherwise the garbage collector will see
      * garbage values when processing these slots.
      */
-    protected BitSet objects;
+    protected final BitSet objects;
 
     public static AllocaNode create(int slots, BitSet objects) {
         return USE_GENERATED_NODES ? new AllocaNodeGen(slots, objects) : new AllocaNode(slots, objects);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CStringNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CStringNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -34,7 +34,7 @@
 @NodeInfo
 public class CStringNode extends FloatingNode implements LIRLowerable {
 
-    protected String string;
+    protected final String string;
 
     public static CStringNode create(String string) {
         return USE_GENERATED_NODES ? new CStringNodeGen(string) : new CStringNode(string);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -47,8 +47,8 @@
         Uncompress
     }
 
-    protected CompressionOp op;
-    protected CompressEncoding encoding;
+    protected final CompressionOp op;
+    protected final CompressEncoding encoding;
 
     public static CompressionNode create(CompressionOp op, ValueNode input, CompressEncoding encoding) {
         return USE_GENERATED_NODES ? new CompressionNodeGen(op, input, encoding) : new CompressionNode(op, input, encoding);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizationFetchUnrollInfoCallNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizationFetchUnrollInfoCallNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -42,7 +42,7 @@
 public class DeoptimizationFetchUnrollInfoCallNode extends FixedWithNextNode implements LIRLowerable, MemoryCheckpoint.Multi {
 
     @Input SaveAllRegistersNode registerSaver;
-    protected ForeignCallsProvider foreignCalls;
+    protected final ForeignCallsProvider foreignCalls;
 
     public static DeoptimizationFetchUnrollInfoCallNode create(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ValueNode registerSaver) {
         return USE_GENERATED_NODES ? new DeoptimizationFetchUnrollInfoCallNodeGen(foreignCalls, registerSaver) : new DeoptimizationFetchUnrollInfoCallNode(foreignCalls, registerSaver);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizeCallerNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizeCallerNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -35,8 +35,8 @@
 @NodeInfo(shortName = "DeoptCaller", nameTemplate = "DeoptCaller {p#reason/s}")
 public class DeoptimizeCallerNode extends ControlSinkNode implements LIRLowerable {
 
-    protected DeoptimizationAction action;
-    protected DeoptimizationReason reason;
+    protected final DeoptimizationAction action;
+    protected final DeoptimizationReason reason;
 
     public static DeoptimizeCallerNode create(DeoptimizationAction action, DeoptimizationReason reason) {
         return USE_GENERATED_NODES ? new DeoptimizeCallerNodeGen(action, reason) : new DeoptimizeCallerNode(action, reason);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DimensionsNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DimensionsNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -41,7 +41,7 @@
 @NodeInfo
 public class DimensionsNode extends FixedWithNextNode implements LIRLowerable {
 
-    protected int rank;
+    protected final int rank;
 
     public static DimensionsNode create(int rank) {
         return USE_GENERATED_NODES ? new DimensionsNodeGen(rank) : new DimensionsNode(rank);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DirectCompareAndSwapNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DirectCompareAndSwapNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -45,7 +45,7 @@
     @Input ValueNode expectedValue;
     @Input ValueNode newValue;
 
-    protected LocationIdentity locationIdentity;
+    protected final LocationIdentity locationIdentity;
 
     public static DirectCompareAndSwapNode create(ValueNode object, ValueNode offset, ValueNode expected, ValueNode newValue, LocationIdentity locationIdentity) {
         return USE_GENERATED_NODES ? new DirectCompareAndSwapNodeGen(object, offset, expected, newValue, locationIdentity) : new DirectCompareAndSwapNode(object, offset, expected, newValue,
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1PostWriteBarrier.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1PostWriteBarrier.java	Fri Oct 03 14:19:58 2014 +0200
@@ -29,7 +29,7 @@
 @NodeInfo
 public class G1PostWriteBarrier extends WriteBarrier {
 
-    protected boolean alwaysNull;
+    protected final boolean alwaysNull;
 
     public static G1PostWriteBarrier create(ValueNode object, ValueNode value, LocationNode location, boolean precise, boolean alwaysNull) {
         return USE_GENERATED_NODES ? new G1PostWriteBarrierGen(object, value, location, precise, alwaysNull) : new G1PostWriteBarrier(object, value, location, precise, alwaysNull);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1PreWriteBarrier.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1PreWriteBarrier.java	Fri Oct 03 14:19:58 2014 +0200
@@ -30,8 +30,8 @@
 public class G1PreWriteBarrier extends WriteBarrier implements DeoptimizingNode.DeoptBefore {
 
     @OptionalInput(InputType.State) FrameState stateBefore;
-    protected boolean nullCheck;
-    protected boolean doLoad;
+    protected final boolean nullCheck;
+    protected final boolean doLoad;
 
     public static G1PreWriteBarrier create(ValueNode object, ValueNode expectedObject, LocationNode location, boolean doLoad, boolean nullCheck) {
         return USE_GENERATED_NODES ? new G1PreWriteBarrierGen(object, expectedObject, location, doLoad, nullCheck) : new G1PreWriteBarrier(object, expectedObject, location, doLoad, nullCheck);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1ReferentFieldReadBarrier.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1ReferentFieldReadBarrier.java	Fri Oct 03 14:19:58 2014 +0200
@@ -35,7 +35,7 @@
 @NodeInfo
 public class G1ReferentFieldReadBarrier extends WriteBarrier {
 
-    protected boolean doLoad;
+    protected final boolean doLoad;
 
     public static G1ReferentFieldReadBarrier create(ValueNode object, ValueNode expectedObject, LocationNode location, boolean doLoad) {
         return USE_GENERATED_NODES ? new G1ReferentFieldReadBarrierGen(object, expectedObject, location, doLoad) : new G1ReferentFieldReadBarrier(object, expectedObject, location, doLoad);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewMultiArrayStubCall.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewMultiArrayStubCall.java	Fri Oct 03 14:19:58 2014 +0200
@@ -44,7 +44,7 @@
 
     @Input ValueNode hub;
     @Input ValueNode dims;
-    protected int rank;
+    protected final int rank;
 
     public static NewMultiArrayStubCall create(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ValueNode hub, int rank, ValueNode dims) {
         return USE_GENERATED_NODES ? new NewMultiArrayStubCallGen(foreignCalls, hub, rank, dims) : new NewMultiArrayStubCall(foreignCalls, hub, rank, dims);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SerialWriteBarrier.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SerialWriteBarrier.java	Fri Oct 03 14:19:58 2014 +0200
@@ -29,7 +29,7 @@
 @NodeInfo
 public class SerialWriteBarrier extends WriteBarrier {
 
-    protected boolean alwaysNull;
+    protected final boolean alwaysNull;
 
     public static SerialWriteBarrier create(ValueNode object, LocationNode location, boolean precise, boolean alwaysNull) {
         return USE_GENERATED_NODES ? new SerialWriteBarrierGen(object, location, precise, alwaysNull) : new SerialWriteBarrier(object, location, precise, alwaysNull);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/StubForeignCallNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/StubForeignCallNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -41,9 +41,9 @@
 public class StubForeignCallNode extends FixedWithNextNode implements LIRLowerable, MemoryCheckpoint.Multi {
 
     @Input NodeInputList<ValueNode> arguments;
-    protected ForeignCallsProvider foreignCalls;
+    protected final ForeignCallsProvider foreignCalls;
 
-    protected ForeignCallDescriptor descriptor;
+    protected final ForeignCallDescriptor descriptor;
 
     public static StubForeignCallNode create(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, ValueNode... arguments) {
         return USE_GENERATED_NODES ? new StubForeignCallNodeGen(foreignCalls, descriptor, arguments) : new StubForeignCallNode(foreignCalls, descriptor, arguments);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/StubStartNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/StubStartNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -32,7 +32,7 @@
 @NodeInfo
 public class StubStartNode extends StartNode {
 
-    protected Stub stub;
+    protected final Stub stub;
 
     public static StubStartNode create(Stub stub) {
         return USE_GENERATED_NODES ? new StubStartNodeGen(stub) : new StubStartNode(stub);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/UncommonTrapCallNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/UncommonTrapCallNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -43,7 +43,7 @@
 
     @Input ValueNode trapRequest;
     @Input SaveAllRegistersNode registerSaver;
-    protected ForeignCallsProvider foreignCalls;
+    protected final ForeignCallsProvider foreignCalls;
 
     public static UncommonTrapCallNode create(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ValueNode registerSaver, ValueNode trapRequest) {
         return USE_GENERATED_NODES ? new UncommonTrapCallNodeGen(foreignCalls, registerSaver, trapRequest) : new UncommonTrapCallNode(foreignCalls, registerSaver, trapRequest);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VMErrorNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VMErrorNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -40,7 +40,7 @@
 @NodeInfo
 public class VMErrorNode extends DeoptimizingStubCall implements LIRLowerable {
 
-    protected String format;
+    protected final String format;
     @Input ValueNode value;
 
     public static VMErrorNode create(String format, ValueNode value) {
@@ -61,7 +61,7 @@
             StringBuilder sb = new StringBuilder("in compiled code associated with frame state:");
             FrameState fs = stateBefore();
             while (fs != null) {
-                MetaUtil.appendLocation(sb.append(nl).append("\t"), fs.method(), fs.bci());
+                MetaUtil.appendLocation(sb.append(nl).append("\t"), fs.method(), fs.bci);
                 fs = fs.outerFrameState();
             }
             whereString = sb.toString();
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrier.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrier.java	Fri Oct 03 14:19:58 2014 +0200
@@ -34,7 +34,7 @@
     @Input protected ValueNode object;
     @OptionalInput protected ValueNode value;
     @OptionalInput(InputType.Association) protected LocationNode location;
-    protected boolean precise;
+    protected final boolean precise;
 
     public WriteBarrier(ValueNode object, ValueNode value, LocationNode location, boolean precise) {
         super(StampFactory.forVoid());
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MethodHandleNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MethodHandleNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -49,7 +49,7 @@
 public class MethodHandleNode extends MacroStateSplitNode implements Simplifiable {
 
     /** The method that this node is representing. */
-    protected IntrinsicMethod intrinsicMethod;
+    protected final IntrinsicMethod intrinsicMethod;
 
     // Replacement method data
     protected ResolvedJavaMethod replacementTargetMethod;
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Fri Oct 03 14:19:58 2014 +0200
@@ -108,7 +108,7 @@
              * the !NODE_CLASS.isAssignableFrom(type) guarantee in
              * NodeClass.FieldScanner.scanField() to fail.
              */
-            protected Object nextPlaceholder;
+            protected final Object nextPlaceholder;
 
             public static BlockPlaceholderNode create(BytecodeParser builder) {
                 return USE_GENERATED_NODES ? new GraphBuilderPhase_Instance_BlockPlaceholderNodeGen(builder) : new BlockPlaceholderNode(builder);
--- a/graal/com.oracle.graal.nodeinfo.processor/src/com/oracle/graal/nodeinfo/processor/GraphNodeGenerator.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodeinfo.processor/src/com/oracle/graal/nodeinfo/processor/GraphNodeGenerator.java	Fri Oct 03 14:19:58 2014 +0200
@@ -58,7 +58,6 @@
     private final TypeElement NodeInputList;
     private final TypeElement NodeSuccessorList;
     private final TypeElement ValueNumberable;
-    private final TypeElement UnsafeAccess;
 
     private final List<VariableElement> inputFields = new ArrayList<>();
     private final List<VariableElement> inputListFields = new ArrayList<>();
@@ -84,7 +83,6 @@
         this.NodeInputList = getTypeElement("com.oracle.graal.graph.NodeInputList");
         this.NodeSuccessorList = getTypeElement("com.oracle.graal.graph.NodeSuccessorList");
         this.ValueNumberable = getTypeElement("com.oracle.graal.graph.Node.ValueNumberable");
-        this.UnsafeAccess = getTypeElement("com.oracle.graal.compiler.common.UnsafeAccess");
     }
 
     @SafeVarargs
@@ -241,13 +239,10 @@
                     if (isAssignableWithErasure(field, NodeSuccessorList)) {
                         throw new ElementException(field, "NodeSuccessorList field must be annotated with @" + Successor.getSimpleName());
                     }
-                    if (modifiers.contains(FINAL)) {
-                        throw new ElementException(field, "Data field must not be final");
-                    }
                     if (modifiers.contains(PUBLIC)) {
-                        // if (!modifiers.contains(FINAL)) {
-                        throw new ElementException(field, "Data field must be final if public otherwise it must be protected");
-                        // }
+                        if (!modifiers.contains(FINAL)) {
+                            throw new ElementException(field, "Data field must be final if public otherwise it must be protected");
+                        }
                     } else if (!modifiers.contains(PROTECTED)) {
                         throw new ElementException(field, "Data field must be protected");
                     }
@@ -345,7 +340,6 @@
                 createValueNumberLeafMethod(node);
             }
             createDataEqualsMethod();
-            createCopyMethod();
         }
         compilationUnit.add(genClass);
         return compilationUnit;
@@ -395,40 +389,6 @@
         return executable;
     }
 
-    private void createCopyMethod() {
-        CodeExecutableElement method = new CodeExecutableElement(modifiers(PROTECTED), genClass.asType(), "copyGen");
-        method.getThrownTypes().add(getType(InstantiationException.class));
-        addParameter(method, getType(boolean.class), "clearInputsAndSuccessors");
-        CodeTreeBuilder b = method.createBuilder();
-        b.startStatement().string(genClassName, " newNode = (", genClassName, ") ").type(UnsafeAccess.asType()).string(".unsafe.allocateInstance(", genClassName, ".class)").end();
-        for (VariableElement f : dataFields) {
-            String fname = f.getSimpleName().toString();
-            b.startStatement().string("newNode.", fname, " = this.", fname).end();
-        }
-        b.startIf().string("!clearInputsAndSuccessors").end().startBlock();
-        for (List<VariableElement> fields : Arrays.asList(inputFields, inputListFields, successorFields, successorListFields)) {
-            for (VariableElement f : fields) {
-                String fname = f.getSimpleName().toString();
-                b.startStatement().string("newNode.", fname, " = this.", fname).end();
-            }
-        }
-        b.end().startElseBlock();
-        for (VariableElement f : inputListFields) {
-            String fname = f.getSimpleName().toString();
-            b.startStatement().string("newNode.", fname, " = new ").type(eraseGenericTypes(NodeInputList.asType())).string("<>(newNode, this.", fname, ".getInitializeSize())").end();
-        }
-        for (VariableElement f : successorListFields) {
-            String fname = f.getSimpleName().toString();
-            b.startStatement().string("newNode.", fname, " = new ").type(eraseGenericTypes(NodeSuccessorList.asType())).string("<>(newNode, this.", fname, ".getInitializeSize())").end();
-        }
-
-        b.end();
-
-        b.startReturn().string("newNode").end();
-        genClass.add(method);
-        checkOnlyInGenNode(method);
-    }
-
     private void reset() {
         inputFields.clear();
         inputListFields.clear();
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractFixedGuardNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractFixedGuardNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -33,8 +33,8 @@
 public abstract class AbstractFixedGuardNode extends DeoptimizingFixedWithNextNode implements Simplifiable, GuardingNode {
 
     @Input(InputType.Condition) protected LogicNode condition;
-    protected DeoptimizationReason reason;
-    protected DeoptimizationAction action;
+    protected final DeoptimizationReason reason;
+    protected final DeoptimizationAction action;
     protected boolean negated;
 
     public LogicNode condition() {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractLocalNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractLocalNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -29,7 +29,7 @@
 @NodeInfo
 public abstract class AbstractLocalNode extends FloatingNode {
 
-    protected int index;
+    protected final int index;
 
     public AbstractLocalNode(int index, Stamp stamp) {
         super(stamp);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -43,7 +43,7 @@
 
     private static final DebugMetric ConstantNodes = Debug.metric("ConstantNodes");
 
-    protected Constant value;
+    protected final Constant value;
 
     private static ConstantNode createPrimitive(Constant value) {
         assert value.getKind() != Kind.Object;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -29,10 +29,10 @@
 @NodeInfo(shortName = "Deopt", nameTemplate = "Deopt {p#reason/s}")
 public class DeoptimizeNode extends AbstractDeoptimizeNode implements Lowerable, LIRLowerable {
 
-    protected DeoptimizationAction action;
-    protected DeoptimizationReason reason;
-    protected int debugId;
-    protected Constant speculation;
+    protected final DeoptimizationAction action;
+    protected final DeoptimizationReason reason;
+    protected final int debugId;
+    protected final Constant speculation;
 
     public static DeoptimizeNode create(DeoptimizationAction action, DeoptimizationReason reason) {
         return USE_GENERATED_NODES ? new DeoptimizeNodeGen(action, reason) : new DeoptimizeNode(action, reason);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java	Fri Oct 03 14:19:58 2014 +0200
@@ -44,9 +44,9 @@
 
     private static final DebugMetric METRIC_FRAMESTATE_COUNT = Debug.metric("FrameStateCount");
 
-    protected int localsSize;
+    protected final int localsSize;
 
-    protected int stackSize;
+    protected final int stackSize;
 
     /**
      * @see BytecodeFrame#rethrowException
@@ -69,9 +69,9 @@
     /**
      * The bytecode index to which this frame state applies.
      */
-    protected int bci;
+    public final int bci;
 
-    protected ResolvedJavaMethod method;
+    protected final ResolvedJavaMethod method;
 
     /**
      * Creates a {@code FrameState} with the given locals, stack expressions and locked monitors.
@@ -157,10 +157,6 @@
         return values;
     }
 
-    public int bci() {
-        return bci;
-    }
-
     public NodeInputList<MonitorIdNode> monitorIds() {
         return monitorIds;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -45,7 +45,7 @@
 public class GuardNode extends FloatingAnchoredNode implements Canonicalizable, IterableNodeType, GuardingNode {
 
     @Input(InputType.Condition) protected LogicNode condition;
-    protected DeoptimizationReason reason;
+    protected final DeoptimizationReason reason;
     protected Constant speculation;
     protected DeoptimizationAction action;
     protected boolean negated;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardedValueNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardedValueNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -40,7 +40,7 @@
 public class GuardedValueNode extends FloatingGuardedNode implements LIRLowerable, Virtualizable, IterableNodeType, Canonicalizable, ValueProxy {
 
     @Input ValueNode object;
-    protected Stamp piStamp;
+    protected final Stamp piStamp;
 
     public static GuardedValueNode create(ValueNode object, GuardingNode guard, Stamp stamp) {
         return USE_GENERATED_NODES ? new GuardedValueNodeGen(object, guard, stamp) : new GuardedValueNode(object, guard, stamp);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -40,9 +40,9 @@
 
     @Input ValueNode object;
     @Input(InputType.Condition) LogicNode condition;
-    protected DeoptimizationReason reason;
-    protected DeoptimizationAction action;
-    protected Stamp piStamp;
+    protected final DeoptimizationReason reason;
+    protected final DeoptimizationAction action;
+    protected final Stamp piStamp;
     protected boolean negated;
 
     public ValueNode object() {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InfopointNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InfopointNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -28,7 +28,7 @@
 
 @NodeInfo
 public abstract class InfopointNode extends FixedWithNextNode {
-    protected InfopointReason reason;
+    protected final InfopointReason reason;
 
     public InfopointNode(InfopointReason reason) {
         super(StampFactory.forVoid());
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -42,7 +42,7 @@
     @Input(InputType.Extension) CallTargetNode callTarget;
     @OptionalInput(InputType.State) FrameState stateDuring;
     @OptionalInput(InputType.Guard) GuardingNode guard;
-    protected int bci;
+    protected final int bci;
     protected boolean polymorphic;
     protected boolean useForInlining;
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -43,7 +43,7 @@
     @OptionalInput(InputType.State) FrameState stateDuring;
     @OptionalInput(InputType.State) FrameState stateAfter;
     @OptionalInput(InputType.Guard) GuardingNode guard;
-    protected int bci;
+    protected final int bci;
     protected boolean polymorphic;
     protected boolean useForInlining;
     protected double exceptionProbability;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicConstantNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicConstantNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -32,7 +32,7 @@
 @NodeInfo(nameTemplate = "{p#value}")
 public class LogicConstantNode extends LogicNode implements LIRLowerable {
 
-    protected boolean value;
+    protected final boolean value;
 
     public static LogicConstantNode create(boolean value) {
         return USE_GENERATED_NODES ? new LogicConstantNodeGen(value) : new LogicConstantNode(value);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoweredCallTargetNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoweredCallTargetNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -32,9 +32,9 @@
 @NodeInfo
 public abstract class LoweredCallTargetNode extends CallTargetNode {
 
-    protected Stamp returnStamp;
-    protected JavaType[] signature;
-    protected CallingConvention.Type callType;
+    protected final Stamp returnStamp;
+    protected final JavaType[] signature;
+    protected final CallingConvention.Type callType;
 
     public LoweredCallTargetNode(List<ValueNode> arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, CallingConvention.Type callType, InvokeKind invokeKind) {
         super(arguments, target, invokeKind);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryMapNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryMapNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -37,7 +37,7 @@
 @NodeInfo(allowedUsageTypes = {InputType.Extension})
 public class MemoryMapNode extends FloatingNode implements MemoryMap, LIRLowerable {
 
-    protected List<LocationIdentity> locationIdentities;
+    protected final List<LocationIdentity> locationIdentities;
     @Input(InputType.Memory) NodeInputList<ValueNode> nodes;
 
     private boolean checkOrder(Map<LocationIdentity, MemoryNode> mmap) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryPhiNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryPhiNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -35,7 +35,7 @@
 public class MemoryPhiNode extends PhiNode implements MemoryNode {
 
     @Input(InputType.Memory) NodeInputList<ValueNode> values;
-    protected LocationIdentity locationIdentity;
+    protected final LocationIdentity locationIdentity;
 
     public static MemoryPhiNode create(MergeNode merge, LocationIdentity locationIdentity) {
         return USE_GENERATED_NODES ? new MemoryPhiNodeGen(merge, locationIdentity) : new MemoryPhiNode(merge, locationIdentity);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -45,7 +45,7 @@
 public class PiNode extends FloatingGuardedNode implements LIRLowerable, Virtualizable, IterableNodeType, Canonicalizable, ValueProxy {
 
     @Input ValueNode object;
-    protected Stamp piStamp;
+    protected final Stamp piStamp;
 
     public ValueNode object() {
         return object;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeProfileProxyNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeProfileProxyNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -39,7 +39,7 @@
 @NodeInfo
 public class TypeProfileProxyNode extends UnaryNode implements IterableNodeType, ValueProxy {
 
-    protected JavaTypeProfile profile;
+    protected final JavaTypeProfile profile;
     protected transient ResolvedJavaType lastCheckedType;
     protected transient JavaTypeProfile lastCheckedProfile;
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryArithmeticNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryArithmeticNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -35,7 +35,7 @@
 @NodeInfo
 public abstract class BinaryArithmeticNode extends BinaryNode implements ArithmeticLIRLowerable {
 
-    protected BinaryOp op;
+    protected final BinaryOp op;
 
     public BinaryArithmeticNode(BinaryOp op, ValueNode x, ValueNode y) {
         super(op.foldStamp(x.stamp(), y.stamp()), x, y);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatConvertNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatConvertNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -39,7 +39,7 @@
 @NodeInfo
 public class FloatConvertNode extends ConvertNode implements Lowerable, ArithmeticLIRLowerable {
 
-    protected FloatConvert op;
+    protected final FloatConvert op;
 
     public static FloatConvertNode create(FloatConvert op, ValueNode input) {
         return USE_GENERATED_NODES ? new FloatConvertNodeGen(op, input) : new FloatConvertNode(op, input);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatLessThanNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatLessThanNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -33,7 +33,7 @@
 @NodeInfo(shortName = "<")
 public class FloatLessThanNode extends CompareNode {
 
-    protected boolean unorderedIsTrue;
+    protected final boolean unorderedIsTrue;
 
     /**
      * Constructs a new floating point comparison node.
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -33,7 +33,7 @@
 @NodeInfo
 public abstract class IntegerConvertNode extends ConvertNode implements ArithmeticLIRLowerable {
 
-    protected int resultBits;
+    protected final int resultBits;
 
     protected IntegerConvertNode(Stamp stamp, ValueNode input, int resultBits) {
         super(stamp, input);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NormalizeCompareNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NormalizeCompareNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -37,7 +37,7 @@
 @NodeInfo
 public class NormalizeCompareNode extends BinaryNode implements Lowerable {
 
-    protected boolean isUnorderedLess;
+    protected final boolean isUnorderedLess;
 
     /**
      * Creates a new compare operation.
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnaryArithmeticNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnaryArithmeticNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -32,7 +32,7 @@
 @NodeInfo
 public abstract class UnaryArithmeticNode extends UnaryNode implements ArithmeticLIRLowerable {
 
-    protected UnaryOp op;
+    protected final UnaryOp op;
 
     protected UnaryArithmeticNode(UnaryOp op, ValueNode value) {
         super(op.foldStamp(value.stamp()), value);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/DynamicCounterNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/DynamicCounterNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -40,9 +40,9 @@
 
     @Input ValueNode increment;
 
-    protected String name;
-    protected String group;
-    protected boolean withContext;
+    protected final String name;
+    protected final String group;
+    protected final boolean withContext;
 
     public static DynamicCounterNode create(String name, String group, ValueNode increment, boolean withContext) {
         return USE_GENERATED_NODES ? new DynamicCounterNodeGen(name, group, increment, withContext) : new DynamicCounterNode(name, group, increment, withContext);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AbstractWriteNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AbstractWriteNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -35,7 +35,7 @@
     @OptionalInput(InputType.State) FrameState stateAfter;
     @OptionalInput(InputType.Memory) Node lastLocationAccess;
 
-    protected boolean initialization;
+    protected final boolean initialization;
 
     public FrameState stateAfter() {
         return stateAfter;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BoxNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BoxNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -42,7 +42,7 @@
 @NodeInfo
 public class BoxNode extends UnaryNode implements VirtualizableAllocation, Lowerable {
 
-    protected Kind boxingKind;
+    protected final Kind boxingKind;
 
     public static BoxNode create(ValueNode value, ResolvedJavaType resultType, Kind boxingKind) {
         return USE_GENERATED_NODES ? new BoxNodeGen(value, resultType, boxingKind) : new BoxNode(value, resultType, boxingKind);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BytecodeExceptionNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BytecodeExceptionNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -36,7 +36,7 @@
 @NodeInfo
 public class BytecodeExceptionNode extends AbstractMemoryCheckpoint implements Lowerable, MemoryCheckpoint.Single {
 
-    protected Class<? extends Throwable> exceptionClass;
+    protected final Class<? extends Throwable> exceptionClass;
     @Input NodeInputList<ValueNode> arguments;
 
     public static BytecodeExceptionNode create(MetaAccessProvider metaAccess, Class<? extends Throwable> exceptionClass, ValueNode... arguments) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ConstantLocationNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ConstantLocationNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -36,9 +36,9 @@
 @NodeInfo(nameTemplate = "Loc {p#locationIdentity/s}")
 public class ConstantLocationNode extends LocationNode {
 
-    protected Kind valueKind;
-    protected LocationIdentity locationIdentity;
-    protected long displacement;
+    protected final Kind valueKind;
+    protected final LocationIdentity locationIdentity;
+    protected final long displacement;
 
     public static ConstantLocationNode create(LocationIdentity identity, Kind kind, long displacement, Graph graph) {
         return graph.unique(ConstantLocationNode.create(identity, kind, displacement));
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -40,9 +40,9 @@
 
     @Input protected NodeInputList<ValueNode> arguments;
     @OptionalInput(InputType.State) protected FrameState stateDuring;
-    protected ForeignCallsProvider foreignCalls;
+    protected final ForeignCallsProvider foreignCalls;
 
-    protected ForeignCallDescriptor descriptor;
+    protected final ForeignCallDescriptor descriptor;
 
     public static ForeignCallNode create(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, ValueNode... arguments) {
         return USE_GENERATED_NODES ? new ForeignCallNodeGen(foreignCalls, descriptor, arguments) : new ForeignCallNode(foreignCalls, descriptor, arguments);
@@ -133,7 +133,7 @@
         FrameState newStateDuring;
         if ((currentStateAfter.stackSize() > 0 && currentStateAfter.stackAt(currentStateAfter.stackSize() - 1) == this) ||
                         (currentStateAfter.stackSize() > 1 && currentStateAfter.stackAt(currentStateAfter.stackSize() - 2) == this)) {
-            newStateDuring = currentStateAfter.duplicateModified(currentStateAfter.bci(), currentStateAfter.rethrowException(), this.getKind());
+            newStateDuring = currentStateAfter.duplicateModified(currentStateAfter.bci, currentStateAfter.rethrowException(), this.getKind());
         } else {
             newStateDuring = currentStateAfter;
         }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -41,11 +41,11 @@
 @NodeInfo(nameTemplate = "IdxLoc {p#locationIdentity/s}")
 public class IndexedLocationNode extends LocationNode implements Canonicalizable {
 
-    protected Kind valueKind;
-    protected LocationIdentity locationIdentity;
-    protected long displacement;
+    protected final Kind valueKind;
+    protected final LocationIdentity locationIdentity;
+    protected final long displacement;
     @Input ValueNode index;
-    protected int indexScaling;
+    protected final int indexScaling;
 
     /**
      * Gets the index or offset of this location.
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IntegerSwitchNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IntegerSwitchNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -39,7 +39,7 @@
 @NodeInfo
 public class IntegerSwitchNode extends SwitchNode implements LIRLowerable, Simplifiable {
 
-    protected int[] keys;
+    protected final int[] keys;
 
     /**
      * Constructs a integer switch instruction. The keyProbabilities and keySuccessors array contain
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/JavaReadNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/JavaReadNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -34,7 +34,7 @@
 @NodeInfo
 public class JavaReadNode extends FixedAccessNode implements Lowerable, GuardingNode {
 
-    protected boolean compressible;
+    protected final boolean compressible;
 
     public static JavaReadNode create(ValueNode object, LocationNode location, BarrierType barrierType, boolean compressible) {
         return USE_GENERATED_NODES ? new JavaReadNodeGen(object, location, barrierType, compressible) : new JavaReadNode(object, location, barrierType, compressible);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/JavaWriteNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/JavaWriteNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -33,7 +33,7 @@
 @NodeInfo
 public class JavaWriteNode extends AbstractWriteNode implements Lowerable, StateSplit, MemoryAccess, MemoryCheckpoint.Single {
 
-    protected boolean compressible;
+    protected final boolean compressible;
 
     public static JavaWriteNode create(ValueNode object, ValueNode value, ValueNode location, BarrierType barrierType, boolean compressible, boolean initialization) {
         return USE_GENERATED_NODES ? new JavaWriteNodeGen(object, value, location, barrierType, compressible, initialization) : new JavaWriteNode(object, value, location, barrierType, compressible,
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadMethodNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadMethodNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -38,8 +38,8 @@
 public class LoadMethodNode extends FixedWithNextNode implements Lowerable, Canonicalizable {
 
     @Input ValueNode hub;
-    protected ResolvedJavaMethod method;
-    protected ResolvedJavaType receiverType;
+    protected final ResolvedJavaMethod method;
+    protected final ResolvedJavaType receiverType;
 
     public ValueNode getHub() {
         return hub;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MembarNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MembarNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -42,7 +42,7 @@
 @NodeInfo(allowedUsageTypes = {InputType.Memory})
 public class MembarNode extends FixedWithNextNode implements LIRLowerable, MemoryCheckpoint.Single {
 
-    protected int barriers;
+    protected final int barriers;
 
     /**
      * @param barriers a mask of the barrier constants defined in {@link MemoryBarriers}
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SwitchNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/SwitchNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -41,8 +41,8 @@
     @Input protected ValueNode value;
 
     // do not change the contents of these arrays:
-    protected double[] keyProbabilities;
-    protected int[] keySuccessors;
+    protected final double[] keyProbabilities;
+    protected final int[] keySuccessors;
 
     /**
      * Constructs a new Switch.
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnboxNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnboxNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -33,7 +33,7 @@
 @NodeInfo
 public class UnboxNode extends UnaryNode implements Virtualizable, Lowerable {
 
-    protected Kind boxingKind;
+    protected final Kind boxingKind;
 
     public static UnboxNode create(ValueNode value, Kind boxingKind) {
         return USE_GENERATED_NODES ? new UnboxNodeGen(value, boxingKind) : new UnboxNode(value, boxingKind);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeAccessNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeAccessNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -35,8 +35,8 @@
 
     @Input ValueNode object;
     @Input ValueNode offset;
-    protected Kind accessKind;
-    protected LocationIdentity locationIdentity;
+    protected final Kind accessKind;
+    protected final LocationIdentity locationIdentity;
 
     public UnsafeAccessNode(Stamp stamp, ValueNode object, ValueNode offset, Kind accessKind, LocationIdentity locationIdentity) {
         super(stamp);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewObjectNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewObjectNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -38,7 +38,7 @@
 @NodeInfo
 public class AbstractNewObjectNode extends DeoptimizingFixedWithNextNode implements Simplifiable, Lowerable {
 
-    protected boolean fillContents;
+    protected final boolean fillContents;
 
     /**
      * Constructs a new AbstractNewObjectNode.
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessFieldNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessFieldNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -36,7 +36,7 @@
 
     @OptionalInput ValueNode object;
 
-    protected ResolvedJavaField field;
+    protected final ResolvedJavaField field;
 
     public ValueNode object() {
         return object;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessIndexedNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AccessIndexedNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -36,7 +36,7 @@
 public abstract class AccessIndexedNode extends AccessArrayNode implements Lowerable {
 
     @Input protected ValueNode index;
-    protected Kind elementKind;
+    protected final Kind elementKind;
 
     public ValueNode index() {
         return index;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AtomicReadAndAddNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AtomicReadAndAddNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -42,7 +42,7 @@
     @Input ValueNode offset;
     @Input ValueNode delta;
 
-    protected LocationIdentity locationIdentity;
+    protected final LocationIdentity locationIdentity;
 
     public static AtomicReadAndAddNode create(ValueNode object, ValueNode offset, ValueNode delta, LocationIdentity locationIdentity) {
         return USE_GENERATED_NODES ? new AtomicReadAndAddNodeGen(object, offset, delta, locationIdentity) : new AtomicReadAndAddNode(object, offset, delta, locationIdentity);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AtomicReadAndWriteNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AtomicReadAndWriteNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -43,8 +43,8 @@
     @Input ValueNode offset;
     @Input ValueNode newValue;
 
-    protected Kind valueKind;
-    protected LocationIdentity locationIdentity;
+    protected final Kind valueKind;
+    protected final LocationIdentity locationIdentity;
 
     public static AtomicReadAndWriteNode create(ValueNode object, ValueNode offset, ValueNode newValue, Kind valueKind, LocationIdentity locationIdentity) {
         return USE_GENERATED_NODES ? new AtomicReadAndWriteNodeGen(object, offset, newValue, valueKind, locationIdentity) : new AtomicReadAndWriteNode(object, offset, newValue, valueKind,
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastDynamicNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastDynamicNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -43,7 +43,7 @@
      * Determines the exception thrown by this node if the check fails: {@link ClassCastException}
      * if false; {@link ArrayStoreException} if true.
      */
-    protected boolean forStoreCheck;
+    protected final boolean forStoreCheck;
 
     /**
      * @param hub the type being cast to
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -44,14 +44,14 @@
 public class CheckCastNode extends FixedWithNextNode implements Canonicalizable, Simplifiable, Lowerable, Virtualizable, ValueProxy {
 
     @Input protected ValueNode object;
-    protected ResolvedJavaType type;
-    protected JavaTypeProfile profile;
+    protected final ResolvedJavaType type;
+    protected final JavaTypeProfile profile;
 
     /**
      * Determines the exception thrown by this node if the check fails: {@link ClassCastException}
      * if false; {@link ArrayStoreException} if true.
      */
-    protected boolean forStoreCheck;
+    protected final boolean forStoreCheck;
 
     /**
      * Creates a new CheckCast instruction.
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -43,8 +43,8 @@
     @Input ValueNode expected;
     @Input ValueNode newValue;
 
-    protected Kind valueKind;
-    protected LocationIdentity locationIdentity;
+    protected final Kind valueKind;
+    protected final LocationIdentity locationIdentity;
 
     public static CompareAndSwapNode create(ValueNode object, ValueNode offset, ValueNode expected, ValueNode newValue, Kind valueKind, LocationIdentity locationIdentity) {
         return USE_GENERATED_NODES ? new CompareAndSwapNodeGen(object, offset, expected, newValue, valueKind, locationIdentity) : new CompareAndSwapNode(object, offset, expected, newValue, valueKind,
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -36,7 +36,7 @@
 @NodeInfo
 public class InstanceOfNode extends UnaryOpLogicNode implements Lowerable, Virtualizable {
 
-    protected ResolvedJavaType type;
+    protected final ResolvedJavaType type;
     protected JavaTypeProfile profile;
 
     /**
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -32,7 +32,7 @@
 
 @NodeInfo
 public class MethodCallTargetNode extends CallTargetNode implements IterableNodeType, Canonicalizable {
-    protected JavaType returnType;
+    protected final JavaType returnType;
 
     /**
      * @param arguments
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorExitNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorExitNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -69,7 +69,7 @@
 
     @Override
     public void simplify(SimplifierTool tool) {
-        if (escapedReturnValue != null && stateAfter() != null && stateAfter().bci() != BytecodeFrame.AFTER_BCI) {
+        if (escapedReturnValue != null && stateAfter() != null && stateAfter().bci != BytecodeFrame.AFTER_BCI) {
             ValueNode returnValue = escapedReturnValue;
             setEscapedReturnValue(null);
             tool.removeIfUnused(returnValue);
@@ -85,7 +85,7 @@
     public void virtualize(VirtualizerTool tool) {
         State state = tool.getObjectState(object());
         // the monitor exit for a synchronized method should never be virtualized
-        assert stateAfter().bci() != BytecodeFrame.AFTER_BCI || state == null;
+        assert stateAfter().bci != BytecodeFrame.AFTER_BCI || state == null;
         if (state != null && state.getState() == EscapeState.Virtual && state.getVirtualObject().hasIdentity()) {
             MonitorIdNode removedLock = state.removeLock();
             assert removedLock == getMonitorId() : "mismatch at " + this + ": " + removedLock + " vs. " + getMonitorId();
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -38,7 +38,7 @@
 @NodeInfo(nameTemplate = "New {p#instanceClass/s}")
 public class NewInstanceNode extends AbstractNewObjectNode implements VirtualizableAllocation {
 
-    protected ResolvedJavaType instanceClass;
+    protected final ResolvedJavaType instanceClass;
 
     /**
      * Constructs a NewInstanceNode.
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewMultiArrayNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewMultiArrayNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -36,7 +36,7 @@
 public class NewMultiArrayNode extends DeoptimizingFixedWithNextNode implements Lowerable, ArrayLengthProvider {
 
     @Input protected NodeInputList<ValueNode> dimensions;
-    protected ResolvedJavaType type;
+    protected final ResolvedJavaType type;
 
     public ValueNode dimension(int index) {
         return dimensions.get(index);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/SelfReplacingMethodCallTargetNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/SelfReplacingMethodCallTargetNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -40,8 +40,8 @@
 public class SelfReplacingMethodCallTargetNode extends MethodCallTargetNode implements Lowerable {
 
     // Replacement method data
-    protected ResolvedJavaMethod replacementTargetMethod;
-    protected JavaType replacementReturnType;
+    protected final ResolvedJavaMethod replacementTargetMethod;
+    protected final JavaType replacementReturnType;
     @Input NodeInputList<ValueNode> replacementArguments;
 
     public static SelfReplacingMethodCallTargetNode create(InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] arguments, JavaType returnType,
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeSwitchNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeSwitchNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -41,7 +41,7 @@
 @NodeInfo
 public class TypeSwitchNode extends SwitchNode implements LIRLowerable, Simplifiable {
 
-    protected ResolvedJavaType[] keys;
+    protected final ResolvedJavaType[] keys;
 
     /**
      * Constructs a type switch instruction. The keyProbabilities array contain key.length + 1
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java	Fri Oct 03 14:19:58 2014 +0200
@@ -245,7 +245,7 @@
                 while (state != null) {
                     ResolvedJavaMethod method = state.method();
                     if (method != null) {
-                        elements.add(method.asStackTraceElement(state.bci() - 1));
+                        elements.add(method.asStackTraceElement(state.bci - 1));
                     }
                     state = state.outerFrameState();
                 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualArrayNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualArrayNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -32,8 +32,8 @@
 @NodeInfo(nameTemplate = "VirtualArray {p#componentType/s}[{p#length}]")
 public class VirtualArrayNode extends VirtualObjectNode implements ArrayLengthProvider {
 
-    protected ResolvedJavaType componentType;
-    protected int length;
+    protected final ResolvedJavaType componentType;
+    protected final int length;
 
     public static VirtualArrayNode create(ResolvedJavaType componentType, int length) {
         return USE_GENERATED_NODES ? new VirtualArrayNodeGen(componentType, length) : new VirtualArrayNode(componentType, length);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualBoxingNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualBoxingNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -30,7 +30,7 @@
 @NodeInfo
 public class VirtualBoxingNode extends VirtualInstanceNode {
 
-    protected Kind boxingKind;
+    protected final Kind boxingKind;
 
     public static VirtualBoxingNode create(ResolvedJavaType type, Kind boxingKind) {
         return USE_GENERATED_NODES ? new VirtualBoxingNodeGen(type, boxingKind) : new VirtualBoxingNode(type, boxingKind);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualInstanceNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualInstanceNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -29,8 +29,8 @@
 @NodeInfo(nameTemplate = "VirtualInstance {p#type/s}")
 public class VirtualInstanceNode extends VirtualObjectNode {
 
-    protected ResolvedJavaType type;
-    protected ResolvedJavaField[] fields;
+    protected final ResolvedJavaType type;
+    protected final ResolvedJavaField[] fields;
 
     public static VirtualInstanceNode create(ResolvedJavaType type, boolean hasIdentity) {
         return USE_GENERATED_NODES ? new VirtualInstanceNodeGen(type, hasIdentity) : new VirtualInstanceNode(type, hasIdentity);
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java	Fri Oct 03 14:19:58 2014 +0200
@@ -166,7 +166,7 @@
     private static String methodName(FrameState frameState, int bci) {
         StringBuilder sb = new StringBuilder();
         if (frameState.outerFrameState() != null) {
-            sb.append(methodName(frameState.outerFrameState(), frameState.outerFrameState().bci()));
+            sb.append(methodName(frameState.outerFrameState(), frameState.outerFrameState().bci));
             sb.append("->");
         }
         sb.append(frameState.method().format("%h.%n"));
@@ -370,7 +370,7 @@
         if (fs == null) {
             return null;
         }
-        return new BytecodePosition(toBytecodePosition(fs.outerFrameState()), fs.method(), fs.bci());
+        return new BytecodePosition(toBytecodePosition(fs.outerFrameState()), fs.method(), fs.bci);
     }
 
     protected static void processFrameStates(Invoke invoke, StructuredGraph inlineGraph, Map<Node, Node> duplicates, FrameState stateAtExceptionEdge, boolean alwaysDuplicateStateAfter) {
@@ -380,7 +380,7 @@
         for (FrameState original : inlineGraph.getNodes(FrameState.class)) {
             FrameState frameState = (FrameState) duplicates.get(original);
             if (frameState != null && frameState.isAlive()) {
-                if (frameState.bci() == BytecodeFrame.AFTER_BCI) {
+                if (frameState.bci == BytecodeFrame.AFTER_BCI) {
                     /*
                      * pop return kind from invoke's stateAfter and replace with this frameState's
                      * return value (top of stack)
@@ -400,15 +400,15 @@
                         stateAfterException = stateAtExceptionEdge.duplicateModified(Kind.Object, frameState.stackAt(0));
                     }
                     frameState.replaceAndDelete(stateAfterException);
-                } else if (frameState.bci() == BytecodeFrame.UNWIND_BCI || frameState.bci() == BytecodeFrame.AFTER_EXCEPTION_BCI) {
+                } else if (frameState.bci == BytecodeFrame.UNWIND_BCI || frameState.bci == BytecodeFrame.AFTER_EXCEPTION_BCI) {
                     handleMissingAfterExceptionFrameState(frameState);
                 } else {
                     // only handle the outermost frame states
                     if (frameState.outerFrameState() == null) {
-                        assert frameState.bci() != BytecodeFrame.BEFORE_BCI : frameState;
-                        assert frameState.bci() == BytecodeFrame.INVALID_FRAMESTATE_BCI || frameState.method().equals(inlineGraph.method());
-                        assert frameState.bci() != BytecodeFrame.AFTER_EXCEPTION_BCI && frameState.bci() != BytecodeFrame.BEFORE_BCI && frameState.bci() != BytecodeFrame.AFTER_EXCEPTION_BCI &&
-                                        frameState.bci() != BytecodeFrame.UNWIND_BCI : frameState.bci();
+                        assert frameState.bci != BytecodeFrame.BEFORE_BCI : frameState;
+                        assert frameState.bci == BytecodeFrame.INVALID_FRAMESTATE_BCI || frameState.method().equals(inlineGraph.method());
+                        assert frameState.bci != BytecodeFrame.AFTER_EXCEPTION_BCI && frameState.bci != BytecodeFrame.BEFORE_BCI && frameState.bci != BytecodeFrame.AFTER_EXCEPTION_BCI &&
+                                        frameState.bci != BytecodeFrame.UNWIND_BCI : frameState.bci;
                         if (outerFrameState == null) {
                             outerFrameState = stateAtReturn.duplicateModified(invoke.bci(), stateAtReturn.rethrowException(), invokeReturnKind);
                             outerFrameState.setDuringCall(true);
@@ -421,7 +421,7 @@
     }
 
     private static boolean isStateAfterException(FrameState frameState) {
-        return frameState.bci() == BytecodeFrame.AFTER_EXCEPTION_BCI || (frameState.bci() == BytecodeFrame.UNWIND_BCI && !frameState.method().isSynchronized());
+        return frameState.bci == BytecodeFrame.AFTER_EXCEPTION_BCI || (frameState.bci == BytecodeFrame.UNWIND_BCI && !frameState.method().isSynchronized());
     }
 
     protected static void handleMissingAfterExceptionFrameState(FrameState nonReplaceableFrameState) {
@@ -487,7 +487,7 @@
         for (Node node : duplicates.values()) {
             if (node instanceof FrameState) {
                 FrameState frameState = (FrameState) node;
-                assert frameState.bci() == BytecodeFrame.AFTER_BCI || frameState.bci() == BytecodeFrame.INVALID_FRAMESTATE_BCI : node.toString(Verbosity.Debugger);
+                assert frameState.bci == BytecodeFrame.AFTER_BCI || frameState.bci == BytecodeFrame.INVALID_FRAMESTATE_BCI : node.toString(Verbosity.Debugger);
             }
         }
         return true;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/MultiTypeGuardInlineInfo.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/MultiTypeGuardInlineInfo.java	Fri Oct 03 14:19:58 2014 +0200
@@ -191,7 +191,7 @@
             FixedNode exceptionSux = exceptionEdge.next();
             graph.addBeforeFixed(exceptionSux, exceptionMerge);
             exceptionObjectPhi = graph.addWithoutUnique(ValuePhiNode.create(StampFactory.forKind(Kind.Object), exceptionMerge));
-            exceptionMerge.setStateAfter(exceptionEdge.stateAfter().duplicateModified(invoke.stateAfter().bci(), true, Kind.Object, exceptionObjectPhi));
+            exceptionMerge.setStateAfter(exceptionEdge.stateAfter().duplicateModified(invoke.stateAfter().bci, true, Kind.Object, exceptionObjectPhi));
         }
 
         // create one separate block for each invoked method
@@ -484,7 +484,7 @@
         Kind kind = invoke.asNode().getKind();
         if (kind != Kind.Void) {
             FrameState stateAfter = invoke.stateAfter();
-            stateAfter = stateAfter.duplicate(stateAfter.bci());
+            stateAfter = stateAfter.duplicate(stateAfter.bci);
             stateAfter.replaceFirstInput(invoke.asNode(), result.asNode());
             result.setStateAfter(stateAfter);
         }
@@ -498,7 +498,7 @@
 
             ExceptionObjectNode newExceptionEdge = (ExceptionObjectNode) exceptionEdge.copyWithInputs();
             // set new state (pop old exception object, push new one)
-            newExceptionEdge.setStateAfter(stateAfterException.duplicateModified(stateAfterException.bci(), stateAfterException.rethrowException(), Kind.Object, newExceptionEdge));
+            newExceptionEdge.setStateAfter(stateAfterException.duplicateModified(stateAfterException.bci, stateAfterException.rethrowException(), Kind.Object, newExceptionEdge));
 
             AbstractEndNode endNode = graph.add(EndNode.create());
             newExceptionEdge.setNext(endNode);
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java	Fri Oct 03 14:19:58 2014 +0200
@@ -392,7 +392,7 @@
         StringBuilder buf = new StringBuilder();
         FrameState curState = state;
         do {
-            buf.append(MetaUtil.toLocation(curState.method(), curState.bci())).append('\n');
+            buf.append(MetaUtil.toLocation(curState.method(), curState.bci)).append('\n');
 
             if (curState.stackSize() > 0) {
                 buf.append("stack: ");
--- a/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64FloatConvertNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64FloatConvertNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -41,7 +41,7 @@
 @NodeInfo
 public class AMD64FloatConvertNode extends UnaryNode implements ArithmeticLIRLowerable {
 
-    protected FloatConvert op;
+    protected final FloatConvert op;
 
     public static AMD64FloatConvertNode create(Stamp stamp, FloatConvert op, ValueNode value) {
         return USE_GENERATED_NODES ? new AMD64FloatConvertNodeGen(stamp, op, value) : new AMD64FloatConvertNode(stamp, op, value);
--- a/graal/com.oracle.graal.replacements.hsail/src/com/oracle/graal/replacements/hsail/HSAILMathIntrinsicsNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.replacements.hsail/src/com/oracle/graal/replacements/hsail/HSAILMathIntrinsicsNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -49,7 +49,7 @@
     /**
      * The math operation that this Node represents.
      */
-    protected HSAILArithmetic operation;
+    protected final HSAILArithmetic operation;
 
     /**
      * Gets the parameter passed to the math operation that this node represents.
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/ObjectAccessTest.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/ObjectAccessTest.java	Fri Oct 03 14:19:58 2014 +0200
@@ -127,7 +127,7 @@
         JavaWriteNode write = (JavaWriteNode) graph.start().next();
         Assert.assertEquals(graph.getParameter(2), write.value());
         Assert.assertEquals(graph.getParameter(0), write.object());
-        Assert.assertEquals(BytecodeFrame.AFTER_BCI, write.stateAfter().bci());
+        Assert.assertEquals(BytecodeFrame.AFTER_BCI, write.stateAfter().bci);
 
         IndexedLocationNode location = (IndexedLocationNode) write.location();
         Assert.assertEquals(kind, location.getValueKind());
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/PointerTest.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/PointerTest.java	Fri Oct 03 14:19:58 2014 +0200
@@ -139,7 +139,7 @@
 
         JavaWriteNode write = (JavaWriteNode) cast.next();
         Assert.assertEquals(graph.getParameter(2), write.value());
-        Assert.assertEquals(BytecodeFrame.AFTER_BCI, write.stateAfter().bci());
+        Assert.assertEquals(BytecodeFrame.AFTER_BCI, write.stateAfter().bci);
 
         Assert.assertEquals(cast, write.object());
         Assert.assertEquals(graph.getParameter(0), cast.getInput());
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java	Fri Oct 03 14:19:58 2014 +0200
@@ -384,7 +384,7 @@
     @NodeInfo
     static class VarargsPlaceholderNode extends FloatingNode implements ArrayLengthProvider {
 
-        protected Varargs varargs;
+        protected final Varargs varargs;
 
         public static VarargsPlaceholderNode create(Varargs varargs, MetaAccessProvider metaAccess) {
             return USE_GENERATED_NODES ? new SnippetTemplate_VarargsPlaceholderNodeGen(varargs, metaAccess) : new VarargsPlaceholderNode(varargs, metaAccess);
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -39,7 +39,7 @@
 public class ArrayEqualsNode extends FixedWithNextNode implements LIRLowerable, Canonicalizable, Virtualizable, MemoryAccess {
 
     /** {@link Kind} of the arrays to compare. */
-    protected Kind kind;
+    protected final Kind kind;
 
     /** One array to be tested for equality. */
     @Input ValueNode array1;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/AssertionNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/AssertionNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -40,8 +40,8 @@
 
     @Input ValueNode value;
 
-    protected boolean compileTimeAssertion;
-    protected String message;
+    protected final boolean compileTimeAssertion;
+    protected final String message;
 
     public static AssertionNode create(boolean compileTimeAssertion, ValueNode value, String message) {
         return USE_GENERATED_NODES ? new AssertionNodeGen(compileTimeAssertion, value, message) : new AssertionNode(compileTimeAssertion, value, message);
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectObjectStoreNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectObjectStoreNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -40,8 +40,8 @@
     @Input ValueNode object;
     @Input ValueNode value;
     @Input ValueNode offset;
-    protected int displacement;
-    protected LocationIdentity locationIdentity;
+    protected final int displacement;
+    protected final LocationIdentity locationIdentity;
 
     public static DirectObjectStoreNode create(ValueNode object, int displacement, ValueNode offset, ValueNode value, LocationIdentity locationIdentity) {
         return USE_GENERATED_NODES ? new DirectObjectStoreNodeGen(object, displacement, offset, value, locationIdentity) : new DirectObjectStoreNode(object, displacement, offset, value,
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectReadNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectReadNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -39,7 +39,7 @@
 public class DirectReadNode extends FixedWithNextNode implements LIRLowerable {
 
     @Input protected ValueNode address;
-    protected Kind readKind;
+    protected final Kind readKind;
 
     public static DirectReadNode create(ValueNode address, Kind readKind) {
         return USE_GENERATED_NODES ? new DirectReadNodeGen(address, readKind) : new DirectReadNode(address, readKind);
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectStoreNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectStoreNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -40,7 +40,7 @@
 
     @Input protected ValueNode address;
     @Input protected ValueNode value;
-    protected Kind kind;
+    protected final Kind kind;
 
     public static DirectStoreNode create(ValueNode address, ValueNode value, Kind kind) {
         return USE_GENERATED_NODES ? new DirectStoreNodeGen(address, value, kind) : new DirectStoreNode(address, value, kind);
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -61,10 +61,10 @@
 
     @Input protected NodeInputList<ValueNode> arguments;
 
-    protected int bci;
-    protected ResolvedJavaMethod targetMethod;
-    protected JavaType returnType;
-    protected InvokeKind invokeKind;
+    protected final int bci;
+    protected final ResolvedJavaMethod targetMethod;
+    protected final JavaType returnType;
+    protected final InvokeKind invokeKind;
 
     public static MacroNode create(Invoke invoke) {
         return USE_GENERATED_NODES ? new MacroNodeGen(invoke) : new MacroNode(invoke);
@@ -115,7 +115,7 @@
         StructuredGraph methodSubstitution = tool.getReplacements().getMethodSubstitution(getTargetMethod());
         if (methodSubstitution != null) {
             methodSubstitution = methodSubstitution.copy();
-            if (stateAfter() == null || stateAfter().bci() == BytecodeFrame.AFTER_BCI) {
+            if (stateAfter() == null || stateAfter().bci == BytecodeFrame.AFTER_BCI) {
                 /*
                  * handles the case of a MacroNode inside a snippet used for another MacroNode
                  * lowering
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroStateSplitNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroStateSplitNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -73,7 +73,7 @@
             if (!call.targetMethod().equals(getTargetMethod())) {
                 throw new GraalInternalError("unexpected invoke %s in snippet", getClass().getSimpleName());
             }
-            assert invoke.stateAfter().bci() == BytecodeFrame.AFTER_BCI;
+            assert invoke.stateAfter().bci == BytecodeFrame.AFTER_BCI;
             // Here we need to fix the bci of the invoke
             InvokeNode newInvoke = snippetGraph.add(InvokeNode.create(invoke.callTarget(), getBci()));
             newInvoke.setStateAfter(invoke.stateAfter());
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MathIntrinsicNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MathIntrinsicNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -35,7 +35,7 @@
 @NodeInfo
 public class MathIntrinsicNode extends UnaryNode implements ArithmeticLIRLowerable {
 
-    protected Operation operation;
+    protected final Operation operation;
 
     public enum Operation {
         ABS,
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReadRegisterNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReadRegisterNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -38,20 +38,20 @@
     /**
      * The fixed register to access.
      */
-    protected Register register;
+    protected final Register register;
 
     /**
      * When true, subsequent uses of this node use the fixed register; when false, the value is
      * moved into a new virtual register so that the fixed register is not seen by uses.
      */
-    protected boolean directUse;
+    protected final boolean directUse;
 
     /**
      * When true, this node is also an implicit definition of the value for the register allocator,
      * i.e., the register is an implicit incoming value; when false, the register must be defined in
      * the same method or must be an register excluded from register allocation.
      */
-    protected boolean incoming;
+    protected final boolean incoming;
 
     public static ReadRegisterNode create(Register register, Kind kind, boolean directUse, boolean incoming) {
         return USE_GENERATED_NODES ? new ReadRegisterNodeGen(register, kind, directUse, incoming) : new ReadRegisterNode(register, kind, directUse, incoming);
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/WriteRegisterNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/WriteRegisterNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -38,7 +38,7 @@
     /**
      * The fixed register to access.
      */
-    protected Register register;
+    protected final Register register;
 
     /**
      * The new value assigned to the register.
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/asserts/NeverPartOfCompilationNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/asserts/NeverPartOfCompilationNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -30,7 +30,7 @@
 @NodeInfo
 public class NeverPartOfCompilationNode extends MacroStateSplitNode implements IterableNodeType {
 
-    protected String message;
+    protected final String message;
 
     public static NeverPartOfCompilationNode create(Invoke invoke) {
         return USE_GENERATED_NODES ? new NeverPartOfCompilationNodeGen(invoke) : new NeverPartOfCompilationNode(invoke);
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadFinalNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadFinalNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -46,7 +46,7 @@
     @Input ValueNode offset;
     @Input ValueNode condition;
     @Input ValueNode location;
-    protected Kind accessKind;
+    protected final Kind accessKind;
 
     public static CustomizedUnsafeLoadFinalNode create(ValueNode object, ValueNode offset, ValueNode condition, ValueNode location, Kind accessKind) {
         return USE_GENERATED_NODES ? new CustomizedUnsafeLoadFinalNodeGen(object, offset, condition, location, accessKind) : new CustomizedUnsafeLoadFinalNode(object, offset, condition, location,
--- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/SnippetLocationNode.java	Fri Oct 03 14:19:31 2014 +0200
+++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/SnippetLocationNode.java	Fri Oct 03 14:19:58 2014 +0200
@@ -46,7 +46,7 @@
 @NodeInfo
 public class SnippetLocationNode extends LocationNode implements Canonicalizable {
 
-    protected SnippetReflectionProvider snippetReflection;
+    protected final SnippetReflectionProvider snippetReflection;
 
     @Input ValueNode valueKind;
     @Input(InputType.Association) ValueNode locationIdentity;