changeset 9602:19c5a07c7843

Introduce a graph() method that returns a StructuredGraph, to make many explicit casts unnecessary
author Christian Wimmer <christian.wimmer@oracle.com>
date Tue, 07 May 2013 12:03:21 -0700
parents 278a50fb49c7
children c010001c38ce
files graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.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/HotSpotInstalledCodeExecuteNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CheckCastSnippets.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ReflectionGetCallerClassNode.java graal/com.oracle.graal.loop/src/com/oracle/graal/loop/CountedLoopInfo.java graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopEx.java graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopTransformations.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractBeginNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedGuardNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.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/LoopBeginNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MergeNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ScheduledNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NormalizeCompareNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/DynamicCounterNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/SurvivingCounterNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IntegerSwitchNode.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/ExceptionObjectNode.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.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64ConvertSnippets.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/BoxingSnippets.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationVerificationPhase.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.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/MacroNode.java graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/nodes/CyclicMaterializeStoreNode.java graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java
diffstat 44 files changed, 108 insertions(+), 119 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java	Tue May 07 12:03:21 2013 -0700
@@ -185,7 +185,7 @@
     @Test
     public void testArrayCopy() {
         SchedulePhase schedule = getFinalSchedule("testArrayCopySnippet", TestMode.INLINED_WITHOUT_FRAMESTATES);
-        StructuredGraph graph = (StructuredGraph) schedule.getCFG().getStartBlock().getBeginNode().graph();
+        StructuredGraph graph = schedule.getCFG().getStartBlock().getBeginNode().graph();
         ReturnNode ret = graph.getNodes(ReturnNode.class).first();
         assertTrue(ret.result() instanceof FloatingReadNode);
         assertEquals(schedule.getCFG().blockFor(ret), schedule.getCFG().blockFor(ret.result()));
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java	Tue May 07 12:03:21 2013 -0700
@@ -1125,7 +1125,7 @@
     }
 
     private static ValueNode createBoundsCheck(AccessIndexedNode n, LoweringTool tool) {
-        StructuredGraph graph = (StructuredGraph) n.graph();
+        StructuredGraph graph = n.graph();
         ArrayLengthNode arrayLength = graph.add(new ArrayLengthNode(n.array()));
         ValueNode guard = tool.createGuard(graph.unique(new IntegerBelowThanNode(n.index(), arrayLength)), BoundsCheckException, InvalidateReprofile);
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CStringNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CStringNode.java	Tue May 07 12:03:21 2013 -0700
@@ -51,9 +51,8 @@
             unsafe.putByte(cstring + i, formatBytes[i]);
         }
         unsafe.putByte(cstring + formatBytes.length, (byte) 0);
-        StructuredGraph graph = (StructuredGraph) graph();
-        ConstantNode replacement = ConstantNode.forLong(cstring, graph);
-        graph.replaceFloating(this, replacement);
+        ConstantNode replacement = ConstantNode.forLong(cstring, graph());
+        graph().replaceFloating(this, replacement);
     }
 
     @NodeIntrinsic
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotInstalledCodeExecuteNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotInstalledCodeExecuteNode.java	Tue May 07 12:03:21 2013 -0700
@@ -85,25 +85,24 @@
         }
         final int verifiedEntryPointOffset = HotSpotReplacementsUtil.verifiedEntryPointOffset();
 
-        StructuredGraph g = (StructuredGraph) graph();
-
-        LoadFieldNode loadCodeBlob = g.add(new LoadFieldNode(code, codeBlobField));
-        UnsafeLoadNode load = g.add(new UnsafeLoadNode(loadCodeBlob, verifiedEntryPointOffset, ConstantNode.forLong(0, graph()), graalRuntime().getTarget().wordKind));
+        LoadFieldNode loadCodeBlob = graph().add(new LoadFieldNode(code, codeBlobField));
+        UnsafeLoadNode load = graph().add(new UnsafeLoadNode(loadCodeBlob, verifiedEntryPointOffset, ConstantNode.forLong(0, graph()), graalRuntime().getTarget().wordKind));
 
-        LoadFieldNode loadMethod = g.add(new LoadFieldNode(code, methodField));
-        LoadFieldNode loadmetaspaceMethod = g.add(new LoadFieldNode(loadMethod, metaspaceMethodField));
+        LoadFieldNode loadMethod = graph().add(new LoadFieldNode(code, methodField));
+        LoadFieldNode loadmetaspaceMethod = graph().add(new LoadFieldNode(loadMethod, metaspaceMethodField));
 
-        HotSpotIndirectCallTargetNode callTarget = g.add(new HotSpotIndirectCallTargetNode(loadmetaspaceMethod, load, arguments, stamp(), signatureTypes, method, CallingConvention.Type.JavaCall));
+        HotSpotIndirectCallTargetNode callTarget = graph().add(
+                        new HotSpotIndirectCallTargetNode(loadmetaspaceMethod, load, arguments, stamp(), signatureTypes, method, CallingConvention.Type.JavaCall));
 
-        InvokeNode invoke = g.add(new InvokeNode(callTarget, 0));
+        InvokeNode invoke = graph().add(new InvokeNode(callTarget, 0));
 
         invoke.setStateAfter(stateAfter());
-        g.replaceFixedWithFixed(this, invoke);
+        graph().replaceFixedWithFixed(this, invoke);
 
-        g.addBeforeFixed(invoke, loadmetaspaceMethod);
-        g.addBeforeFixed(loadmetaspaceMethod, loadMethod);
-        g.addBeforeFixed(invoke, load);
-        g.addBeforeFixed(load, loadCodeBlob);
+        graph().addBeforeFixed(invoke, loadmetaspaceMethod);
+        graph().addBeforeFixed(loadmetaspaceMethod, loadMethod);
+        graph().addBeforeFixed(invoke, load);
+        graph().addBeforeFixed(load, loadCodeBlob);
 
         return invoke;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java	Tue May 07 12:03:21 2013 -0700
@@ -67,13 +67,12 @@
 
     @Override
     public void lower(LoweringTool tool, LoweringType loweringType) {
-        StructuredGraph graph = (StructuredGraph) graph();
         ConstantNode target = getConstantCallTarget(tool.getRuntime(), tool.assumptions());
 
         if (target != null) {
-            graph.replaceFixedWithFloating(this, target);
+            graph().replaceFixedWithFloating(this, target);
         } else {
-            graph.replaceFixedWithFixed(this, createInvoke());
+            graph().replaceFixedWithFixed(this, createInvoke());
         }
     }
 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CheckCastSnippets.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CheckCastSnippets.java	Tue May 07 12:03:21 2013 -0700
@@ -164,7 +164,7 @@
          * Lowers a checkcast node.
          */
         public void lower(CheckCastNode checkcast, LoweringTool tool) {
-            StructuredGraph graph = (StructuredGraph) checkcast.graph();
+            StructuredGraph graph = checkcast.graph();
             ValueNode object = checkcast.object();
             HotSpotResolvedObjectType type = (HotSpotResolvedObjectType) checkcast.type();
             TypeCheckHints hintInfo = new TypeCheckHints(checkcast.type(), checkcast.profile(), tool.assumptions(), GraalOptions.CheckcastMinHintHitProbability, GraalOptions.CheckcastMaxHints);
@@ -200,7 +200,7 @@
          * Lowers a dynamic checkcast node.
          */
         public void lower(CheckCastDynamicNode checkcast) {
-            StructuredGraph graph = (StructuredGraph) checkcast.graph();
+            StructuredGraph graph = checkcast.graph();
             ValueNode object = checkcast.object();
 
             Arguments args = new Arguments(dynamic);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java	Tue May 07 12:03:21 2013 -0700
@@ -398,7 +398,7 @@
         }
 
         public void lower(MonitorEnterNode monitorenterNode, @SuppressWarnings("unused") LoweringTool tool) {
-            StructuredGraph graph = (StructuredGraph) monitorenterNode.graph();
+            StructuredGraph graph = monitorenterNode.graph();
             checkBalancedMonitors(graph);
             FrameState stateAfter = monitorenterNode.stateAfter();
 
@@ -425,7 +425,7 @@
         }
 
         public void lower(MonitorExitNode monitorexitNode, @SuppressWarnings("unused") LoweringTool tool) {
-            StructuredGraph graph = (StructuredGraph) monitorexitNode.graph();
+            StructuredGraph graph = monitorexitNode.graph();
             FrameState stateAfter = monitorexitNode.stateAfter();
 
             Arguments args;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java	Tue May 07 12:03:21 2013 -0700
@@ -216,7 +216,7 @@
          */
         @SuppressWarnings("unused")
         public void lower(NewInstanceNode newInstanceNode, LoweringTool tool) {
-            StructuredGraph graph = (StructuredGraph) newInstanceNode.graph();
+            StructuredGraph graph = newInstanceNode.graph();
             HotSpotResolvedObjectType type = (HotSpotResolvedObjectType) newInstanceNode.instanceClass();
             ConstantNode hub = ConstantNode.forConstant(type.klass(), runtime, graph);
             int size = instanceSize(type);
@@ -239,7 +239,7 @@
          */
         @SuppressWarnings("unused")
         public void lower(NewArrayNode newArrayNode, LoweringTool tool) {
-            StructuredGraph graph = (StructuredGraph) newArrayNode.graph();
+            StructuredGraph graph = newArrayNode.graph();
             ValueNode lengthNode = newArrayNode.length();
             TLABAllocateNode tlabAllocateNode;
             ResolvedJavaType elementType = newArrayNode.elementType();
@@ -283,7 +283,7 @@
 
         @SuppressWarnings("unused")
         public void lower(TLABAllocateNode tlabAllocateNode, LoweringTool tool) {
-            StructuredGraph graph = (StructuredGraph) tlabAllocateNode.graph();
+            StructuredGraph graph = tlabAllocateNode.graph();
             ValueNode size = tlabAllocateNode.size();
             Arguments args = new Arguments(allocate).add("size", size);
 
@@ -294,7 +294,7 @@
 
         @SuppressWarnings("unused")
         public void lower(InitializeObjectNode initializeNode, LoweringTool tool) {
-            StructuredGraph graph = (StructuredGraph) initializeNode.graph();
+            StructuredGraph graph = initializeNode.graph();
             HotSpotResolvedObjectType type = (HotSpotResolvedObjectType) initializeNode.type();
             assert !type.isArray();
             ConstantNode hub = ConstantNode.forConstant(type.klass(), runtime, graph);
@@ -314,7 +314,7 @@
 
         @SuppressWarnings("unused")
         public void lower(InitializeArrayNode initializeNode, LoweringTool tool) {
-            StructuredGraph graph = (StructuredGraph) initializeNode.graph();
+            StructuredGraph graph = initializeNode.graph();
             HotSpotResolvedObjectType type = (HotSpotResolvedObjectType) initializeNode.type();
             ResolvedJavaType elementType = type.getComponentType();
             assert elementType != null;
@@ -339,7 +339,7 @@
 
         @SuppressWarnings("unused")
         public void lower(NewMultiArrayNode newmultiarrayNode, LoweringTool tool) {
-            StructuredGraph graph = (StructuredGraph) newmultiarrayNode.graph();
+            StructuredGraph graph = newmultiarrayNode.graph();
             int rank = newmultiarrayNode.dimensionCount();
             ValueNode[] dims = new ValueNode[rank];
             for (int i = 0; i < newmultiarrayNode.dimensionCount(); i++) {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneNode.java	Tue May 07 12:03:21 2013 -0700
@@ -125,12 +125,11 @@
                         state[i] = loads[i] = new LoadFieldNode(obj, fields[i]);
                     }
 
-                    final StructuredGraph structuredGraph = (StructuredGraph) graph();
                     tool.customAction(new Runnable() {
 
                         public void run() {
                             for (LoadFieldNode load : loads) {
-                                structuredGraph.addBeforeFixed(ObjectCloneNode.this, structuredGraph.add(load));
+                                graph().addBeforeFixed(ObjectCloneNode.this, graph().add(load));
                             }
                         }
                     });
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ReflectionGetCallerClassNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ReflectionGetCallerClassNode.java	Tue May 07 12:03:21 2013 -0700
@@ -47,14 +47,12 @@
 
     @Override
     public void lower(LoweringTool tool, LoweringType loweringType) {
-        StructuredGraph graph = (StructuredGraph) graph();
-
         ConstantNode callerClassNode = getCallerClassNode(tool.getRuntime());
 
         if (callerClassNode != null) {
-            graph.replaceFixedWithFloating(this, callerClassNode);
+            graph().replaceFixedWithFloating(this, callerClassNode);
         } else {
-            graph.replaceFixedWithFixed(this, createInvoke());
+            graph().replaceFixedWithFixed(this, createInvoke());
         }
     }
 
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/CountedLoopInfo.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/CountedLoopInfo.java	Tue May 07 12:03:21 2013 -0700
@@ -53,7 +53,7 @@
     }
 
     public ValueNode maxTripCountNode(boolean assumePositive) {
-        StructuredGraph graph = (StructuredGraph) iv.valueNode().graph();
+        StructuredGraph graph = iv.valueNode().graph();
         Kind kind = iv.valueNode().kind();
         IntegerArithmeticNode range = IntegerArithmeticNode.sub(end, iv.initNode());
         if (oneOff) {
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopEx.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopEx.java	Tue May 07 12:03:21 2013 -0700
@@ -126,7 +126,7 @@
 
     public void reassociateInvariants() {
         InvariantPredicate invariant = new InvariantPredicate();
-        StructuredGraph graph = (StructuredGraph) loopBegin().graph();
+        StructuredGraph graph = loopBegin().graph();
         for (BinaryNode binary : whole().nodes().filter(BinaryNode.class)) {
             if (!BinaryNode.canTryReassociate(binary)) {
                 continue;
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java	Tue May 07 12:03:21 2013 -0700
@@ -95,7 +95,7 @@
         } else {
             l = loop();
         }
-        return (StructuredGraph) l.loopBegin().graph();
+        return l.loopBegin().graph();
     }
 
     protected abstract DuplicationReplacement getDuplicationReplacement();
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java	Tue May 07 12:03:21 2013 -0700
@@ -148,7 +148,7 @@
 
     private void patchPeeling(LoopFragmentInside peel) {
         LoopBeginNode loopBegin = loop().loopBegin();
-        StructuredGraph graph = (StructuredGraph) loopBegin.graph();
+        StructuredGraph graph = loopBegin.graph();
         List<PhiNode> newPhis = new LinkedList<>();
         for (PhiNode phi : loopBegin.phis().snapshot()) {
             ValueNode first;
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopTransformations.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopTransformations.java	Tue May 07 12:03:21 2013 -0700
@@ -56,7 +56,7 @@
         // assert loop.isCounted(); //TODO (gd) strenghten : counted with known trip count
         int iterations = 0;
         LoopBeginNode loopBegin = loop.loopBegin();
-        StructuredGraph graph = (StructuredGraph) loopBegin.graph();
+        StructuredGraph graph = loopBegin.graph();
         while (!loopBegin.isDeleted()) {
             int mark = graph.getMark();
             peel(loop);
@@ -80,7 +80,7 @@
         NodeClass controlSplitClass = controlSplitNode.getNodeClass();
         controlSplitClass.set(newControlSplit, firstPosition, AbstractBeginNode.begin(originalLoop.entryPoint()));
 
-        StructuredGraph graph = (StructuredGraph) controlSplitNode.graph();
+        StructuredGraph graph = controlSplitNode.graph();
         while (successors.hasNext()) {
             Position position = successors.nextPosition();
             // create a new loop duplicate, connect it and simplify it
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractBeginNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractBeginNode.java	Tue May 07 12:03:21 2013 -0700
@@ -77,7 +77,7 @@
             // This begin node can be removed and all guards moved up to the preceding begin node.
             prepareDelete();
             tool.addToWorkList(next());
-            ((StructuredGraph) graph()).removeFixed(this);
+            graph().removeFixed(this);
         }
     }
 
@@ -121,7 +121,7 @@
 
     @Override
     public boolean verify() {
-        assertTrue(predecessor() != null || this == ((StructuredGraph) graph()).start() || this instanceof MergeNode, "begin nodes must be connected");
+        assertTrue(predecessor() != null || this == graph().start() || this instanceof MergeNode, "begin nodes must be connected");
         return super.verify();
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedGuardNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedGuardNode.java	Tue May 07 12:03:21 2013 -0700
@@ -84,7 +84,7 @@
         if (condition instanceof LogicConstantNode) {
             LogicConstantNode c = (LogicConstantNode) condition;
             if (c.getValue() != negated) {
-                ((StructuredGraph) graph()).removeFixed(this);
+                graph().removeFixed(this);
             } else {
                 FixedNode next = this.next();
                 if (next != null) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java	Tue May 07 12:03:21 2013 -0700
@@ -151,12 +151,12 @@
             if (c.getValue()) {
                 tool.deleteBranch(falseSuccessor());
                 tool.addToWorkList(trueSuccessor());
-                ((StructuredGraph) graph()).removeSplit(this, trueSuccessor());
+                graph().removeSplit(this, trueSuccessor());
                 return;
             } else {
                 tool.deleteBranch(trueSuccessor());
                 tool.addToWorkList(falseSuccessor());
-                ((StructuredGraph) graph()).removeSplit(this, falseSuccessor());
+                graph().removeSplit(this, falseSuccessor());
                 return;
             }
         } else if (trueSuccessor().usages().isEmpty() && falseSuccessor().usages().isEmpty()) {
@@ -354,7 +354,7 @@
                         }
                         if (trueValue.isConstant() && falseValue.isConstant()) {
                             ConditionalNode materialize = graph().unique(new ConditionalNode(condition(), trueValue, falseValue));
-                            ((StructuredGraph) graph()).replaceFloating(singlePhi, materialize);
+                            graph().replaceFloating(singlePhi, materialize);
                             removeEmptyIf(tool);
                             return true;
                         }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java	Tue May 07 12:03:21 2013 -0700
@@ -144,14 +144,14 @@
             stateSplit.setStateAfter(stateAfter);
         }
         if (node instanceof FixedWithNextNode) {
-            ((StructuredGraph) graph()).replaceFixedWithFixed(this, (FixedWithNextNode) node);
+            graph().replaceFixedWithFixed(this, (FixedWithNextNode) node);
         } else if (node instanceof ControlSinkNode) {
             this.replaceAtPredecessor(node);
             this.replaceAtUsages(null);
             GraphUtil.killCFG(this);
             return;
         } else {
-            ((StructuredGraph) graph()).replaceFixed(this, node);
+            graph().replaceFixed(this, node);
         }
         call.safeDelete();
         if (stateAfter.usages().isEmpty()) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java	Tue May 07 12:03:21 2013 -0700
@@ -188,14 +188,14 @@
         }
         if (node == null) {
             assert kind() == Kind.Void && usages().isEmpty();
-            ((StructuredGraph) graph()).removeSplit(this, next());
+            graph().removeSplit(this, next());
         } else if (node instanceof ControlSinkNode) {
             this.replaceAtPredecessor(node);
             this.replaceAtUsages(null);
             GraphUtil.killCFG(this);
             return;
         } else {
-            ((StructuredGraph) graph()).replaceSplit(this, node, next());
+            graph().replaceSplit(this, node, next());
         }
         call.safeDelete();
         if (state.usages().isEmpty()) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopBeginNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopBeginNode.java	Tue May 07 12:03:21 2013 -0700
@@ -178,10 +178,9 @@
     }
 
     public void removeExits() {
-        StructuredGraph graph = (StructuredGraph) graph();
         for (LoopExitNode loopexit : loopExits().snapshot()) {
             loopexit.removeProxies();
-            graph.replaceFixedWithFixed(loopexit, graph.add(new BeginNode()));
+            graph().replaceFixedWithFixed(loopexit, graph().add(new BeginNode()));
         }
     }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MergeNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MergeNode.java	Tue May 07 12:03:21 2013 -0700
@@ -167,14 +167,13 @@
             }
             Debug.log("Split %s into ends for %s.", this, merge);
             int numEnds = this.forwardEndCount();
-            StructuredGraph graph = (StructuredGraph) graph();
             for (int i = 0; i < numEnds - 1; i++) {
                 AbstractEndNode end = forwardEndAt(numEnds - 1 - i);
                 AbstractEndNode newEnd;
                 if (merge instanceof LoopBeginNode) {
-                    newEnd = graph.add(new LoopEndNode((LoopBeginNode) merge));
+                    newEnd = graph().add(new LoopEndNode((LoopBeginNode) merge));
                 } else {
-                    newEnd = graph.add(new EndNode());
+                    newEnd = graph().add(new EndNode());
                     merge.addForwardEnd(newEnd);
                 }
                 for (PhiNode phi : merge.phis()) {
@@ -193,7 +192,7 @@
                 end.safeDelete();
                 tool.addToWorkList(newEnd.predecessor()); // ?
             }
-            graph.reduceTrivialMerge(this);
+            graph().reduceTrivialMerge(this);
         }
     }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ScheduledNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ScheduledNode.java	Tue May 07 12:03:21 2013 -0700
@@ -36,4 +36,9 @@
         updatePredecessor(scheduledNext, x);
         scheduledNext = x;
     }
+
+    @Override
+    public StructuredGraph graph() {
+        return (StructuredGraph) super.graph();
+    }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java	Tue May 07 12:03:21 2013 -0700
@@ -97,7 +97,7 @@
     public Negatable negate(LogicNode cond) {
         assert condition() == cond;
         ConditionalNode replacement = graph().unique(new ConditionalNode(condition, falseValue(), trueValue()));
-        ((StructuredGraph) graph()).replaceFloating(this, replacement);
+        graph().replaceFloating(this, replacement);
         return replacement;
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NormalizeCompareNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NormalizeCompareNode.java	Tue May 07 12:03:21 2013 -0700
@@ -49,21 +49,19 @@
 
     @Override
     public void lower(LoweringTool tool, LoweringType loweringType) {
-        StructuredGraph graph = (StructuredGraph) graph();
-
         LogicNode equalComp;
         LogicNode lessComp;
         if (x().kind() == Kind.Double || x().kind() == Kind.Float) {
-            equalComp = graph.unique(new FloatEqualsNode(x(), y()));
-            lessComp = graph.unique(new FloatLessThanNode(x(), y(), isUnorderedLess));
+            equalComp = graph().unique(new FloatEqualsNode(x(), y()));
+            lessComp = graph().unique(new FloatLessThanNode(x(), y(), isUnorderedLess));
         } else {
-            equalComp = graph.unique(new IntegerEqualsNode(x(), y()));
-            lessComp = graph.unique(new IntegerLessThanNode(x(), y()));
+            equalComp = graph().unique(new IntegerEqualsNode(x(), y()));
+            lessComp = graph().unique(new IntegerLessThanNode(x(), y()));
         }
 
-        ConditionalNode equalValue = graph.unique(new ConditionalNode(equalComp, ConstantNode.forInt(0, graph), ConstantNode.forInt(1, graph)));
-        ConditionalNode value = graph.unique(new ConditionalNode(lessComp, ConstantNode.forInt(-1, graph), equalValue));
+        ConditionalNode equalValue = graph().unique(new ConditionalNode(equalComp, ConstantNode.forInt(0, graph()), ConstantNode.forInt(1, graph())));
+        ConditionalNode value = graph().unique(new ConditionalNode(lessComp, ConstantNode.forInt(-1, graph()), equalValue));
 
-        graph.replaceFloating(this, value);
+        graph().replaceFloating(this, value);
     }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/DynamicCounterNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/DynamicCounterNode.java	Tue May 07 12:03:21 2013 -0700
@@ -150,27 +150,26 @@
         if (!enabled) {
             throw new GraalInternalError("counter nodes shouldn't exist when not enabled");
         }
-        StructuredGraph graph = (StructuredGraph) graph();
-        if (excludedClassPrefix == null || !graph.method().getDeclaringClass().getName().startsWith(excludedClassPrefix)) {
-            int index = addContext ? getIndex(name + " @ " + MetaUtil.format("%h.%n", ((StructuredGraph) graph()).method())) : getIndex(name);
+        if (excludedClassPrefix == null || !graph().method().getDeclaringClass().getName().startsWith(excludedClassPrefix)) {
+            int index = addContext ? getIndex(name + " @ " + MetaUtil.format("%h.%n", graph().method())) : getIndex(name);
             STATIC_COUNTERS[index] += increment;
             GROUPS[index] = group;
 
-            ConstantNode arrayConstant = ConstantNode.forObject(COUNTERS, tool.getRuntime(), graph);
-            ConstantNode indexConstant = ConstantNode.forInt(index, graph);
-            LoadIndexedNode load = graph.add(new LoadIndexedNode(arrayConstant, indexConstant, Kind.Long));
-            IntegerAddNode add = graph.add(new IntegerAddNode(Kind.Long, load, ConstantNode.forLong(increment, graph)));
-            StoreIndexedNode store = graph.add(new StoreIndexedNode(arrayConstant, indexConstant, Kind.Long, add));
+            ConstantNode arrayConstant = ConstantNode.forObject(COUNTERS, tool.getRuntime(), graph());
+            ConstantNode indexConstant = ConstantNode.forInt(index, graph());
+            LoadIndexedNode load = graph().add(new LoadIndexedNode(arrayConstant, indexConstant, Kind.Long));
+            IntegerAddNode add = graph().add(new IntegerAddNode(Kind.Long, load, ConstantNode.forLong(increment, graph())));
+            StoreIndexedNode store = graph().add(new StoreIndexedNode(arrayConstant, indexConstant, Kind.Long, add));
 
-            graph.addBeforeFixed(this, load);
-            graph.addBeforeFixed(this, store);
+            graph().addBeforeFixed(this, load);
+            graph().addBeforeFixed(this, store);
         }
-        graph.removeFixed(this);
+        graph().removeFixed(this);
     }
 
     public static void addCounterBefore(String group, String name, long increment, boolean addContext, FixedNode position) {
         if (enabled) {
-            StructuredGraph graph = (StructuredGraph) position.graph();
+            StructuredGraph graph = position.graph();
             DynamicCounterNode counter = graph.add(new DynamicCounterNode(name, group, increment, addContext));
             graph.addBeforeFixed(position, counter);
         }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/SurvivingCounterNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/SurvivingCounterNode.java	Tue May 07 12:03:21 2013 -0700
@@ -44,9 +44,7 @@
     public void simplify(SimplifierTool tool) {
         if (checkedValue instanceof FloatingNode && checkedValue.usages().count() == 1) {
             tool.addToWorkList(checkedValue);
-            ((StructuredGraph) graph()).removeFixed(this);
-            // ((StructuredGraph) graph()).replaceFixedWithFixed(this, graph().add(new
-            // DynamicCounterNode("non-surviving " + getName(), getIncrement(), isAddContext())));
+            graph().removeFixed(this);
         }
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IntegerSwitchNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IntegerSwitchNode.java	Tue May 07 12:03:21 2013 -0700
@@ -94,7 +94,7 @@
     public void simplify(SimplifierTool tool) {
         if (blockSuccessorCount() == 1) {
             tool.addToWorkList(defaultSuccessor());
-            ((StructuredGraph) graph()).removeSplitPropagate(this, defaultSuccessor());
+            graph().removeSplitPropagate(this, defaultSuccessor());
         } else if (value() instanceof ConstantNode) {
             int constant = value().asConstant().asInt();
 
@@ -110,7 +110,7 @@
                 }
             }
             tool.addToWorkList(blockSuccessor(survivingEdge));
-            ((StructuredGraph) graph()).removeSplit(this, blockSuccessor(survivingEdge));
+            graph().removeSplit(this, blockSuccessor(survivingEdge));
         } else if (value() != null) {
             IntegerStamp stamp = value().integerStamp();
             if (!stamp.isUnrestricted()) {
@@ -122,7 +122,7 @@
                 }
                 if (validKeys == 0) {
                     tool.addToWorkList(defaultSuccessor());
-                    ((StructuredGraph) graph()).removeSplitPropagate(this, defaultSuccessor());
+                    graph().removeSplitPropagate(this, defaultSuccessor());
                 } else if (validKeys != keys.length) {
                     ArrayList<AbstractBeginNode> newSuccessors = new ArrayList<>(blockSuccessorCount());
                     int[] newKeys = new int[validKeys];
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java	Tue May 07 12:03:21 2013 -0700
@@ -90,7 +90,7 @@
         if (predecessor() instanceof CheckCastNode) {
             CheckCastNode ccn = (CheckCastNode) predecessor();
             if (ccn != null && ccn.type != null && ccn == object && ccn.forStoreCheck == forStoreCheck && ccn.type.isAssignableFrom(type)) {
-                StructuredGraph graph = (StructuredGraph) ccn.graph();
+                StructuredGraph graph = ccn.graph();
                 CheckCastNode newccn = graph.add(new CheckCastNode(type, ccn.object, ccn.profile, ccn.forStoreCheck));
                 graph.replaceFixedWithFixed(ccn, newccn);
                 return newccn;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ExceptionObjectNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ExceptionObjectNode.java	Tue May 07 12:03:21 2013 -0700
@@ -58,11 +58,10 @@
         if (isLowered()) {
             return;
         }
-        StructuredGraph graph = (StructuredGraph) graph();
-        LoadExceptionObjectNode loadException = graph.add(new LoadExceptionObjectNode(stamp()));
+        LoadExceptionObjectNode loadException = graph().add(new LoadExceptionObjectNode(stamp()));
         loadException.setStateAfter(stateAfter());
         replaceAtUsages(loadException);
-        graph.addAfterFixed(this, loadException);
+        graph().addAfterFixed(this, loadException);
         tool.setLastFixedNode(loadException);
         setStateAfter(null);
         setStamp(StampFactory.forVoid());
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeSwitchNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeSwitchNode.java	Tue May 07 12:03:21 2013 -0700
@@ -95,7 +95,7 @@
                 }
             }
             tool.addToWorkList(blockSuccessor(survivingEdge));
-            ((StructuredGraph) graph()).removeSplit(this, blockSuccessor(survivingEdge));
+            graph().removeSplit(this, blockSuccessor(survivingEdge));
         }
         if (value() instanceof LoadHubNode) {
             ObjectStamp stamp = ((LoadHubNode) value()).object().objectStamp();
@@ -108,7 +108,7 @@
                 }
                 if (validKeys == 0) {
                     tool.addToWorkList(defaultSuccessor());
-                    ((StructuredGraph) graph()).removeSplitPropagate(this, defaultSuccessor());
+                    graph().removeSplitPropagate(this, defaultSuccessor());
                 } else if (validKeys != keys.length) {
                     ArrayList<AbstractBeginNode> newSuccessors = new ArrayList<>(blockSuccessorCount());
                     ResolvedJavaType[] newKeys = new ResolvedJavaType[validKeys];
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/util/GraphUtil.java	Tue May 07 12:03:21 2013 -0700
@@ -67,7 +67,7 @@
         MergeNode merge = end.merge();
         if (merge != null) {
             merge.removeEnd(end);
-            StructuredGraph graph = (StructuredGraph) end.graph();
+            StructuredGraph graph = end.graph();
             if (merge instanceof LoopBeginNode && merge.forwardEndCount() == 0) { // dead loop
                 for (PhiNode phi : merge.phis().snapshot()) {
                     propagateKill(phi);
@@ -141,7 +141,7 @@
         if (singleValue != null) {
             Collection<PhiNode> phiUsages = phiNode.usages().filter(PhiNode.class).snapshot();
             Collection<ProxyNode> proxyUsages = phiNode.usages().filter(ProxyNode.class).snapshot();
-            ((StructuredGraph) phiNode.graph()).replaceFloating(phiNode, singleValue);
+            phiNode.graph().replaceFloating(phiNode, singleValue);
             for (PhiNode phi : phiUsages) {
                 checkRedundantPhi(phi);
             }
@@ -165,7 +165,7 @@
                 if (vpnValue == v2) {
                     Collection<PhiNode> phiUsages = vpn.usages().filter(PhiNode.class).snapshot();
                     Collection<ProxyNode> proxyUsages = vpn.usages().filter(ProxyNode.class).snapshot();
-                    ((StructuredGraph) vpn.graph()).replaceFloating(vpn, vpnValue);
+                    vpn.graph().replaceFloating(vpn, vpnValue);
                     for (PhiNode phi : phiUsages) {
                         checkRedundantPhi(phi);
                     }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java	Tue May 07 12:03:21 2013 -0700
@@ -155,7 +155,7 @@
         }
 
         private static void processFloatable(FloatableAccessNode accessNode, MemoryMap state) {
-            StructuredGraph graph = (StructuredGraph) accessNode.graph();
+            StructuredGraph graph = accessNode.graph();
             assert accessNode.getNullCheck() == false;
             LocationIdentity locationIdentity = accessNode.location().getLocationIdentity();
             if (locationIdentity != LocationNode.ANY_LOCATION) {
@@ -266,7 +266,7 @@
                 for (LocationIdentity location : modifiedLocations) {
                     ValueNode lastAccessAtExit = state.lastMemorySnapshot.get(location);
                     if (lastAccessAtExit != null) {
-                        state.lastMemorySnapshot.put(location, ProxyNode.forMemory(lastAccessAtExit, exit, location, (StructuredGraph) loop.graph()));
+                        state.lastMemorySnapshot.put(location, ProxyNode.forMemory(lastAccessAtExit, exit, location, loop.graph()));
                     }
                 }
             }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java	Tue May 07 12:03:21 2013 -0700
@@ -170,7 +170,7 @@
         }
 
         private void lowerToIf(GuardNode guard) {
-            StructuredGraph graph = (StructuredGraph) guard.graph();
+            StructuredGraph graph = guard.graph();
             AbstractBeginNode fastPath = graph.add(new BeginNode());
             DeoptimizeNode deopt = graph.add(new DeoptimizeNode(guard.action(), guard.reason()));
             AbstractBeginNode deoptBranch = AbstractBeginNode.begin(deopt);
@@ -200,7 +200,7 @@
 
         private void insertLoopExits(DeoptimizeNode deopt) {
             Loop loop = block.getLoop();
-            StructuredGraph graph = (StructuredGraph) deopt.graph();
+            StructuredGraph graph = deopt.graph();
             while (loop != null) {
                 LoopExitNode exit = graph.add(new LoopExitNode(loop.loopBegin()));
                 graph.addBeforeFixed(deopt, exit);
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java	Tue May 07 12:03:21 2013 -0700
@@ -253,7 +253,7 @@
 
         protected static void inline(Invoke invoke, ResolvedJavaMethod concrete, InliningCallback callback, Replacements replacements, Assumptions assumptions, boolean receiverNullCheck) {
             Class<? extends FixedWithNextNode> macroNodeClass = getMacroNodeClass(replacements, concrete);
-            StructuredGraph graph = (StructuredGraph) invoke.asNode().graph();
+            StructuredGraph graph = invoke.asNode().graph();
             if (macroNodeClass != null) {
                 if (((MethodCallTargetNode) invoke.callTarget()).targetMethod() != concrete) {
                     assert ((MethodCallTargetNode) invoke.callTarget()).invokeKind() != InvokeKind.Static;
@@ -1154,7 +1154,7 @@
      */
     public static Map<Node, Node> inline(Invoke invoke, StructuredGraph inlineGraph, boolean receiverNullCheck) {
         NodeInputList<ValueNode> parameters = invoke.callTarget().arguments();
-        StructuredGraph graph = (StructuredGraph) invoke.asNode().graph();
+        StructuredGraph graph = invoke.asNode().graph();
 
         FrameState stateAfter = invoke.stateAfter();
         assert stateAfter.isAlive();
@@ -1286,7 +1286,7 @@
 
     public static void receiverNullCheck(Invoke invoke) {
         MethodCallTargetNode callTarget = (MethodCallTargetNode) invoke.callTarget();
-        StructuredGraph graph = (StructuredGraph) callTarget.graph();
+        StructuredGraph graph = callTarget.graph();
         NodeInputList<ValueNode> parameters = callTarget.arguments();
         ValueNode firstParam = parameters.size() <= 0 ? null : parameters.get(0);
         if (!callTarget.isStatic() && firstParam.kind() == Kind.Object && !firstParam.objectStamp().nonNull()) {
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java	Tue May 07 12:03:21 2013 -0700
@@ -209,7 +209,7 @@
         public DuplicationOperation(MergeNode merge, List<PiNode> replacements) {
             this.merge = merge;
             this.replacements = replacements;
-            this.graph = (StructuredGraph) merge.graph();
+            this.graph = merge.graph();
         }
 
         /**
--- a/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64ConvertSnippets.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64ConvertSnippets.java	Tue May 07 12:03:21 2013 -0700
@@ -165,7 +165,7 @@
                 return;
             }
 
-            StructuredGraph graph = (StructuredGraph) convert.graph();
+            StructuredGraph graph = convert.graph();
 
             // Insert a unique placeholder node in place of the Convert node so that the
             // Convert node can be used as an input to the snippet. All usage of the
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/BoxingSnippets.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/BoxingSnippets.java	Tue May 07 12:03:21 2013 -0700
@@ -216,7 +216,7 @@
         public void lower(BoxNode box) {
             FloatingNode canonical = canonicalizeBoxing(box, runtime);
             if (canonical != null) {
-                ((StructuredGraph) box.graph()).replaceFixedWithFloating(box, canonical);
+                box.graph().replaceFixedWithFloating(box, canonical);
             } else {
                 Arguments args = new Arguments(boxSnippets.get(box.getBoxingKind()));
                 args.add("value", box.getValue());
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationVerificationPhase.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationVerificationPhase.java	Tue May 07 12:03:21 2013 -0700
@@ -57,7 +57,7 @@
     }
 
     private static void error(MethodCallTargetNode n, String failedAction) throws GraalInternalError {
-        String context = MetaUtil.format("%H.%n", ((StructuredGraph) n.graph()).method());
+        String context = MetaUtil.format("%H.%n", n.graph().method());
         String target = n.invoke().callTarget().targetName();
         throw new GraalInternalError(failedAction + " of call to '" + target + "' in '" + context + "' failed, most likely due to a parameter annotated with @" +
                         ConstantNodeParameter.class.getSimpleName() + " not being resolvable to a constant during compilation");
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java	Tue May 07 12:03:21 2013 -0700
@@ -688,7 +688,7 @@
         StructuredGraph snippetCopy = new StructuredGraph(name, snippet.method());
         StartNode entryPointNode = snippet.start();
         FixedNode firstCFGNode = entryPointNode.next();
-        StructuredGraph replaceeGraph = (StructuredGraph) replacee.graph();
+        StructuredGraph replaceeGraph = replacee.graph();
         IdentityHashMap<Node, Node> replacements = bind(replaceeGraph, runtime, args);
         Map<Node, Node> duplicates = replaceeGraph.addDuplicates(nodes, replacements);
         Debug.dump(replaceeGraph, "After inlining snippet %s", snippetCopy.method());
@@ -764,7 +764,7 @@
         StructuredGraph snippetCopy = new StructuredGraph(name, snippet.method());
         StartNode entryPointNode = snippet.start();
         FixedNode firstCFGNode = entryPointNode.next();
-        StructuredGraph replaceeGraph = (StructuredGraph) replacee.graph();
+        StructuredGraph replaceeGraph = replacee.graph();
         IdentityHashMap<Node, Node> replacements = bind(replaceeGraph, runtime, args);
         Map<Node, Node> duplicates = replaceeGraph.addDuplicates(nodes, replacements);
         Debug.dump(replaceeGraph, "After inlining snippet %s", snippetCopy.method());
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectObjectStoreNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectObjectStoreNode.java	Tue May 07 12:03:21 2013 -0700
@@ -62,9 +62,8 @@
 
     @Override
     public void lower(LoweringTool tool, LoweringType loweringType) {
-        StructuredGraph graph = (StructuredGraph) this.graph();
-        IndexedLocationNode location = IndexedLocationNode.create(LocationNode.ANY_LOCATION, value.kind(), displacement, offset, graph, 1);
-        WriteNode write = graph.add(new WriteNode(object, value, location, WriteBarrierType.NONE));
-        graph.replaceFixedWithFixed(this, write);
+        IndexedLocationNode location = IndexedLocationNode.create(LocationNode.ANY_LOCATION, value.kind(), displacement, offset, graph(), 1);
+        WriteNode write = graph().add(new WriteNode(object, value, location, WriteBarrierType.NONE));
+        graph().replaceFixedWithFixed(this, write);
     }
 }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java	Tue May 07 12:03:21 2013 -0700
@@ -80,7 +80,7 @@
 
     private InvokeNode replaceWithInvoke() {
         InvokeNode invoke = createInvoke();
-        ((StructuredGraph) graph()).replaceFixedWithFixed(this, invoke);
+        graph().replaceFixedWithFixed(this, invoke);
         return invoke;
     }
 
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/nodes/CyclicMaterializeStoreNode.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/nodes/CyclicMaterializeStoreNode.java	Tue May 07 12:03:21 2013 -0700
@@ -69,16 +69,15 @@
 
     @Override
     public void lower(LoweringTool tool, LoweringType loweringType) {
-        StructuredGraph graph = (StructuredGraph) graph();
         ResolvedJavaType type = object.objectStamp().type();
         FixedWithNextNode store;
         if (target instanceof Integer) {
-            store = graph.add(new StoreIndexedNode(object, ConstantNode.forInt((int) target, graph), type.getComponentType().getKind(), value));
+            store = graph().add(new StoreIndexedNode(object, ConstantNode.forInt((int) target, graph()), type.getComponentType().getKind(), value));
         } else {
             assert target instanceof ResolvedJavaField;
-            store = graph.add(new StoreFieldNode(object, (ResolvedJavaField) target, value));
+            store = graph().add(new StoreFieldNode(object, (ResolvedJavaField) target, value));
         }
-        graph.replaceFixedWithFixed(this, store);
+        graph().replaceFixedWithFixed(this, store);
     }
 
     @Override
--- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java	Tue May 07 11:12:28 2013 -0700
+++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java	Tue May 07 12:03:21 2013 -0700
@@ -374,7 +374,7 @@
         if (valueNode.isConstant() && valueNode.asConstant().getKind() == Kind.Object) {
             WordBase value = (WordBase) valueNode.asConstant().asObject();
             ConstantNode newConstant = ConstantNode.forIntegerKind(wordKind, value.rawValue(), valueNode.graph());
-            ((StructuredGraph) valueNode.graph()).replaceFloating((ConstantNode) valueNode, newConstant);
+            valueNode.graph().replaceFloating((ConstantNode) valueNode, newConstant);
         } else {
             assert !(valueNode instanceof ConstantNode) : "boxed Word constants should not appear in a snippet graph: " + valueNode + ", stamp: " + valueNode.stamp();
             valueNode.setStamp(StampFactory.forKind(wordKind));