changeset 18845:f57d86eb036f

removed Node factory methods
author Doug Simon <doug.simon@oracle.com>
date Mon, 12 Jan 2015 20:39:04 +0100
parents f2261069ba99
children edbac8edc2e1
files graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/MemoryBarriers.java graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaMethod.java graal/com.oracle.graal.api.replacements/src/com/oracle/graal/api/replacements/SnippetReflectionProvider.java graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FlowSensitiveReductionTest.java graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/NodePosIteratorTest.java graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/SimpleCFGTest.java graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/NodeMapTest.java graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/NodeUsagesTests.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/Graph.java graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/DataPatchInConstantsTest.java graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64RawNativeCallNode.java graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLoweringProvider.java graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/replacements/HSAILDirectLoadAcquireNode.java graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/replacements/HSAILDirectStoreReleaseNode.java graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/replacements/HSAILWorkItemAbsIdNode.java graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXWrapperBuilder.java graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/DataPatchTest.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/debug/BenchmarkCounters.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nfi/NativeCallStubGraphBuilder.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/BeginLockScopeNode.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/ClassCastNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetClassLoader0Node.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetComponentTypeNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetModifiersNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetSuperclassNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsArrayNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsAssignableFromNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInstanceNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInterfaceNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsPrimitiveNode.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/CurrentJavaThreadNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CurrentLockNode.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/DeoptimizingStubCall.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/EndLockScopeNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EnterUnpackFramesStackFrameNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1ArrayRangePostWriteBarrier.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1ArrayRangePreWriteBarrier.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/GetObjectAddressNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotDirectCallTargetNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotIndirectCallTargetNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/JumpToExceptionHandlerInCallerNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LeaveCurrentStackFrameNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LeaveDeoptimizedStackFrameNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LeaveUnpackFramesStackFrameNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LoadIndexedPointerNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/MonitorCounterNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewArrayStubCall.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewInstanceStubCall.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/PatchReturnAddressNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PrefetchAllocateNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PushInterpreterFrameNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SaveAllRegistersNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SerialArrayRangeWriteBarrier.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/SnippetAnchorNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SnippetLocationProxyNode.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/TailcallNode.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/phases/LoadJavaMirrorWithKlassPhase.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/OnStackReplacementPhase.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.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/CardTableAddressNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CardTableShiftNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ClassGetHubNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CompositeValueClassSubstitutions.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotNodeClassSubstitutions.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HubGetClassNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/KlassLayoutHelperNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/LoadExceptionObjectSnippets.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MethodHandleNode.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/ObjectCloneNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ReflectionGetCallerClassNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/SystemIdentityHashCodeNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopyCallNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopyNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/CheckcastArrayCopyCallNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/UnsafeArrayCopyNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/ForeignCallStub.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/word/HotSpotWordTypeRewriterPhase.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/word/PointerCastNode.java graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java graal/com.oracle.graal.java/src/com/oracle/graal/java/HIRFrameStateBuilder.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerationResultBase.java graal/com.oracle.graal.loop/src/com/oracle/graal/loop/BasicInductionVariable.java graal/com.oracle.graal.loop/src/com/oracle/graal/loop/CountedLoopInfo.java graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DerivedOffsetInductionVariable.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/LoopFragmentWhole.java graal/com.oracle.graal.nodeinfo.processor/src/com/oracle/graal/nodeinfo/processor/GraphNodeVerifier.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractFixedGuardNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BreakpointNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConditionAnchorNode.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/DirectCallTargetNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DispatchBeginNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DynamicDeoptimizeNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EndNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EntryMarkerNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedGuardNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FullInfopointNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardPhiNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardProxyNode.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/IfNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IndirectCallTargetNode.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/KillingBeginNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicConstantNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicNegationNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopBeginNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopEndNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.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/MergeNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ParameterNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PhiNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiArrayNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ReturnNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SafepointNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ShortCircuitOrNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SimpleInfopointNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StartNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeProfileProxyNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnwindNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValuePhiNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueProxyNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AbsNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AddNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AndNode.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/CompareNode.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/DivNode.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/FloatEqualsNode.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/IntegerBelowNode.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/IntegerDivNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerRemNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IsNullNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/LeftShiftNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/MulNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NarrowNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NegateNode.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/NotNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ObjectEqualsNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/OrNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/PointerEqualsNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ReinterpretNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/RemNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/RightShiftNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SignExtendNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SqrtNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SubNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedDivNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRemNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRightShiftNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/XorNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ZeroExtendNode.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/VerifyHeapNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/WeakCounterNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AddLocationNode.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/BranchProbabilityNode.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/ComputeAddressNode.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/FixedValueAnchorNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.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/LoadHubNode.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/NullCheckNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/OSRLocalNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/OSRStartNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/StoreHubNode.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/UnsafeCastNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ValueAnchorNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewArrayNode.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/ArrayLengthNode.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/DynamicNewArrayNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewInstanceNode.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/InstanceOfDynamicNode.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/LoadExceptionObjectNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadIndexedNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredAtomicReadAndWriteNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredCompareAndSwapNode.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/MonitorEnterNode.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/MonitorIdNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.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/RegisterFinalizerNode.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/StoreFieldNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeSwitchNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/AllocatedObjectNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/CommitAllocationNode.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/ConditionalEliminationPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConvertDeoptimizeToGuardPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeoptimizationGroupingPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ExpandLogicPhase.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/LoopSafepointInsertionPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/OptimizeGuardAnchorsPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/UseTrappingNullChecksPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/BaseReduction.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/CheckCastReduction.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/EquationalReasoner.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FixedGuardReduction.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FlowSensitiveReduction.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/GuardingPiReduction.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.phases.common/src/com/oracle/graal/phases/common/inlining/info/TypeGuardInlineInfo.java graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/InferStamps.java graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64ConvertSnippets.java graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64CountLeadingZerosNode.java graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64CountTrailingZerosNode.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/CheckCastTest.java graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/EdgesTest.java graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/InstanceOfTest.java graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/NewMultiArrayTest.java graal/com.oracle.graal.replacements.verifier/src/com/oracle/graal/replacements/verifier/NodeIntrinsicVerifier.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/CollapseFrameForSingleSideEffectPhase.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraphKit.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/InstanceOfSnippetsTemplates.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPhase.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.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/BasicArrayCopyNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BasicObjectCloneNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitCountNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitScanForwardNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitScanReverseNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DeferredPiNode.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/ExplodeLoopNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/LoadSnippetVarargParameterNode.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/MemoryAnchorNode.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/ReverseBytesNode.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/WriteRegisterNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCacheImpl.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/AssumptionNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/BailoutNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/IsCompilationConstantNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerAddExactNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerAddExactSplitNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerExactArithmeticSplitNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerMulExactNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerMulExactSplitNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerMulHighNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerSubExactNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerSubExactSplitNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/UnsignedMulHighNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/asserts/CompilationConstantNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/asserts/NeverInlineMacroNode.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/frame/ForceMaterializeNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/MaterializeFrameNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/NewFrameNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadFinalNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadMacroNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeStoreMacroNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/UnsafeTypeCastMacroNode.java graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/nodes/MaterializedObjectState.java graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/nodes/VirtualObjectState.java graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PEReadEliminationClosure.java graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeBlockState.java graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationClosure.java graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/SnippetLocationNode.java graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/WordCastNode.java graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java graal/com.oracle.nfi/src/com/oracle/nfi/api/NativeFunctionPointer.java graal/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/TypeSystem.java graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/RootNode.java graal/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/ConditionProfile.java graal/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/ValueProfile.java
diffstat 360 files changed, 1265 insertions(+), 2877 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/MemoryBarriers.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/MemoryBarriers.java	Mon Jan 12 20:39:04 2015 +0100
@@ -24,7 +24,7 @@
 
 /**
  * Constants and intrinsic definition for memory barriers.
- *
+ * 
  * The documentation for each constant is taken from Doug Lea's <a
  * href="http://gee.cs.oswego.edu/dl/jmm/cookbook.html">The JSR-133 Cookbook for Compiler
  * Writers</a>.
@@ -32,7 +32,7 @@
  * The {@code JMM_*} constants capture the memory barriers necessary to implement the Java Memory
  * Model with respect to volatile field accesses. Their values are explained by this comment from
  * templateTable_i486.cpp in the HotSpot source code:
- *
+ * 
  * <pre>
  * Volatile variables demand their effects be made known to all CPU's in
  * order.  Store buffers on most chips allow reads &amp; writes to reorder; the
--- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaMethod.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ResolvedJavaMethod.java	Mon Jan 12 20:39:04 2015 +0100
@@ -245,7 +245,7 @@
     }
 
     default JavaType[] toParameterTypes() {
-        JavaType receiver = isStatic() ? null : getDeclaringClass();
+        JavaType receiver = isStatic() || isConstructor() ? null : getDeclaringClass();
         return getSignature().toParameterTypes(receiver);
     }
 
--- a/graal/com.oracle.graal.api.replacements/src/com/oracle/graal/api/replacements/SnippetReflectionProvider.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.api.replacements/src/com/oracle/graal/api/replacements/SnippetReflectionProvider.java	Mon Jan 12 20:39:04 2015 +0100
@@ -110,10 +110,16 @@
             }
 
             Class<?> c = resolveClassForSnippet(method.getDeclaringClass());
-            Method javaMethod = c.getDeclaredMethod(method.getName(), parameterClasses);
-            javaMethod.setAccessible(true);
-            return javaMethod.invoke(receiver, args);
-        } catch (IllegalAccessException | InvocationTargetException | ClassNotFoundException | NoSuchMethodException ex) {
+            if (method.isConstructor()) {
+                Constructor<?> javaConstructor = c.getDeclaredConstructor(parameterClasses);
+                javaConstructor.setAccessible(true);
+                return javaConstructor.newInstance(args);
+            } else {
+                Method javaMethod = c.getDeclaredMethod(method.getName(), parameterClasses);
+                javaMethod.setAccessible(true);
+                return javaMethod.invoke(receiver, args);
+            }
+        } catch (IllegalAccessException | InstantiationException | InvocationTargetException | ClassNotFoundException | NoSuchMethodException ex) {
             throw new IllegalArgumentException(ex);
         }
     }
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FlowSensitiveReductionTest.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FlowSensitiveReductionTest.java	Mon Jan 12 20:39:04 2015 +0100
@@ -175,10 +175,10 @@
         new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), null));
         IfNode ifNode = (IfNode) graph.start().next();
         InstanceOfNode instanceOf = (InstanceOfNode) ifNode.condition();
-        IsNullNode x = graph.unique(IsNullNode.create(graph.getParameter(0)));
+        IsNullNode x = graph.unique(new IsNullNode(graph.getParameter(0)));
         InstanceOfNode y = instanceOf;
-        ShortCircuitOrNode disjunction = graph.unique(ShortCircuitOrNode.create(x, false, y, false, NOT_FREQUENT_PROBABILITY));
-        LogicNegationNode negation = graph.unique(LogicNegationNode.create(disjunction));
+        ShortCircuitOrNode disjunction = graph.unique(new ShortCircuitOrNode(x, false, y, false, NOT_FREQUENT_PROBABILITY));
+        LogicNegationNode negation = graph.unique(new LogicNegationNode(disjunction));
         ifNode.setCondition(negation);
         new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), null));
         new FlowSensitiveReductionPhase(getMetaAccess()).apply(graph, new PhaseContext(getProviders(), null));
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/NodePosIteratorTest.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/NodePosIteratorTest.java	Mon Jan 12 20:39:04 2015 +0100
@@ -41,18 +41,14 @@
         @Input ConstantNode i1;
         @Input FloatingNode i2;
 
-        public static TestNode create() {
-            return new TestNode();
+        public TestNode() {
         }
 
-        protected TestNode() {
-            // TODO Auto-generated constructor stub
-        }
     }
 
     @Test
     public void testInputs() {
-        TestNode n = TestNode.create();
+        TestNode n = new TestNode();
 
         ConstantNode i1 = ConstantNode.forInt(1);
         ConstantNode i2 = ConstantNode.forDouble(1.0d);
@@ -139,11 +135,11 @@
 
     @Test
     public void testSuccessors() {
-        TestNode n = TestNode.create();
-        EndNode s1 = EndNode.create();
-        EndNode s2 = EndNode.create();
-        EndNode s3 = EndNode.create();
-        EndNode s4 = EndNode.create();
+        TestNode n = new TestNode();
+        EndNode s1 = new EndNode();
+        EndNode s2 = new EndNode();
+        EndNode s3 = new EndNode();
+        EndNode s4 = new EndNode();
         n.s1 = s1;
         n.s2 = s2;
         n.stail = new NodeSuccessorList<>(n, new Node[]{s3, s4});
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/SimpleCFGTest.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/SimpleCFGTest.java	Mon Jan 12 20:39:04 2015 +0100
@@ -42,21 +42,21 @@
     public void testImplies() {
         StructuredGraph graph = new StructuredGraph();
 
-        AbstractEndNode trueEnd = graph.add(EndNode.create());
-        AbstractEndNode falseEnd = graph.add(EndNode.create());
+        AbstractEndNode trueEnd = graph.add(new EndNode());
+        AbstractEndNode falseEnd = graph.add(new EndNode());
 
-        BeginNode trueBegin = graph.add(BeginNode.create());
+        BeginNode trueBegin = graph.add(new BeginNode());
         trueBegin.setNext(trueEnd);
-        BeginNode falseBegin = graph.add(BeginNode.create());
+        BeginNode falseBegin = graph.add(new BeginNode());
         falseBegin.setNext(falseEnd);
 
-        IfNode ifNode = graph.add(IfNode.create(null, trueBegin, falseBegin, 0.5));
+        IfNode ifNode = graph.add(new IfNode(null, trueBegin, falseBegin, 0.5));
         graph.start().setNext(ifNode);
 
-        MergeNode merge = graph.add(MergeNode.create());
+        MergeNode merge = graph.add(new MergeNode());
         merge.addForwardEnd(trueEnd);
         merge.addForwardEnd(falseEnd);
-        ReturnNode returnNode = graph.add(ReturnNode.create(null));
+        ReturnNode returnNode = graph.add(new ReturnNode(null));
         merge.setNext(returnNode);
 
         dumpGraph(graph);
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/EscapeAnalysisTest.java	Mon Jan 12 20:39:04 2015 +0100
@@ -276,8 +276,9 @@
         return obj2.x instanceof TestClassObject;
     }
 
+    @SuppressWarnings("unused")
     public static void testNewNodeSnippet() {
-        ValueAnchorNode.create(null);
+        new ValueAnchorNode(null);
     }
 
     /**
--- a/graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/NodeMapTest.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/NodeMapTest.java	Mon Jan 12 20:39:04 2015 +0100
@@ -36,10 +36,6 @@
     static class TestNode extends Node {
         protected TestNode() {
         }
-
-        public static TestNode create() {
-            return new TestNode();
-        }
     }
 
     private Graph graph;
@@ -53,7 +49,7 @@
 
         graph = new Graph();
         for (int i = 0; i < nodes.length; i++) {
-            nodes[i] = graph.add(TestNode.create());
+            nodes[i] = graph.add(new TestNode());
         }
         map = new NodeMap<>(graph);
         for (int i = 0; i < nodes.length; i += 2) {
@@ -114,7 +110,7 @@
          * Failing here is not required, but if this behavior changes, usages of get need to be
          * checked for compatibility.
          */
-        TestNode newNode = graph.add(TestNode.create());
+        TestNode newNode = graph.add(new TestNode());
         try {
             map.get(newNode);
             fail("expected " + (assertionsEnabled() ? AssertionError.class.getSimpleName() : ArrayIndexOutOfBoundsException.class.getSimpleName()));
@@ -131,7 +127,7 @@
          * Failing here is not required, but if this behavior changes, usages of set need to be
          * checked for compatibility.
          */
-        TestNode newNode = graph.add(TestNode.create());
+        TestNode newNode = graph.add(new TestNode());
         try {
             map.set(newNode, 1);
             fail("expected " + (assertionsEnabled() ? AssertionError.class.getSimpleName() : ArrayIndexOutOfBoundsException.class.getSimpleName()));
@@ -144,13 +140,13 @@
 
     @Test
     public void testNewGetAndGrow() {
-        TestNode newNode = graph.add(TestNode.create());
+        TestNode newNode = graph.add(new TestNode());
         assertEquals(null, map.getAndGrow(newNode));
     }
 
     @Test
     public void testNewSetAndGrow() {
-        TestNode newNode = graph.add(TestNode.create());
+        TestNode newNode = graph.add(new TestNode());
         map.setAndGrow(newNode, 1);
         assertEquals((Integer) 1, map.get(newNode));
     }
--- a/graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/NodeUsagesTests.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/NodeUsagesTests.java	Mon Jan 12 20:39:04 2015 +0100
@@ -36,11 +36,6 @@
     @NodeInfo
     static class Def extends Node {
         protected Def() {
-            // TODO Auto-generated constructor stub
-        }
-
-        public static Def create() {
-            return new Def();
         }
     }
 
@@ -50,25 +45,22 @@
         @Input Def in1;
         @Input Def in2;
 
-        public static Use create(Def in0, Def in1, Def in2) {
-            return new Use(in0, in1, in2);
-        }
-
-        protected Use(Def in0, Def in1, Def in2) {
+        public Use(Def in0, Def in1, Def in2) {
             this.in0 = in0;
             this.in1 = in1;
             this.in2 = in2;
         }
+
     }
 
     @Test
     public void testReplaceAtUsages() {
         Graph graph = new Graph();
-        Def def0 = graph.add(Def.create());
-        Def def1 = graph.add(Def.create());
-        Use use0 = graph.add(Use.create(def0, null, null));
-        Use use1 = graph.add(Use.create(null, def0, null));
-        Use use2 = graph.add(Use.create(null, null, def0));
+        Def def0 = graph.add(new Def());
+        Def def1 = graph.add(new Def());
+        Use use0 = graph.add(new Use(def0, null, null));
+        Use use1 = graph.add(new Use(null, def0, null));
+        Use use2 = graph.add(new Use(null, null, def0));
 
         assertEquals(3, def0.usages().count());
         assertThat(def0.usages(), contains(use0));
@@ -93,11 +85,11 @@
     @Test
     public void testReplaceAtUsagesWithPredicateAll() {
         Graph graph = new Graph();
-        Def def0 = graph.add(Def.create());
-        Def def1 = graph.add(Def.create());
-        Use use0 = graph.add(Use.create(def0, null, null));
-        Use use1 = graph.add(Use.create(null, def0, null));
-        Use use2 = graph.add(Use.create(null, null, def0));
+        Def def0 = graph.add(new Def());
+        Def def1 = graph.add(new Def());
+        Use use0 = graph.add(new Use(def0, null, null));
+        Use use1 = graph.add(new Use(null, def0, null));
+        Use use2 = graph.add(new Use(null, null, def0));
 
         assertEquals(3, def0.usages().count());
         assertThat(def0.usages(), contains(use0));
@@ -122,11 +114,11 @@
     @Test
     public void testReplaceAtUsagesWithPredicateNone() {
         Graph graph = new Graph();
-        Def def0 = graph.add(Def.create());
-        Def def1 = graph.add(Def.create());
-        Use use0 = graph.add(Use.create(def0, null, null));
-        Use use1 = graph.add(Use.create(null, def0, null));
-        Use use2 = graph.add(Use.create(null, null, def0));
+        Def def0 = graph.add(new Def());
+        Def def1 = graph.add(new Def());
+        Use use0 = graph.add(new Use(def0, null, null));
+        Use use1 = graph.add(new Use(null, def0, null));
+        Use use2 = graph.add(new Use(null, null, def0));
 
         assertEquals(3, def0.usages().count());
         assertThat(def0.usages(), contains(use0));
@@ -151,11 +143,11 @@
     @Test
     public void testReplaceAtUsagesWithPredicate1() {
         Graph graph = new Graph();
-        Def def0 = graph.add(Def.create());
-        Def def1 = graph.add(Def.create());
-        Use use0 = graph.add(Use.create(def0, null, null));
-        Use use1 = graph.add(Use.create(null, def0, null));
-        Use use2 = graph.add(Use.create(null, null, def0));
+        Def def0 = graph.add(new Def());
+        Def def1 = graph.add(new Def());
+        Use use0 = graph.add(new Use(def0, null, null));
+        Use use1 = graph.add(new Use(null, def0, null));
+        Use use2 = graph.add(new Use(null, null, def0));
 
         assertEquals(3, def0.usages().count());
         assertThat(def0.usages(), contains(use0));
@@ -182,11 +174,11 @@
     @Test
     public void testReplaceAtUsagesWithPredicate2() {
         Graph graph = new Graph();
-        Def def0 = graph.add(Def.create());
-        Def def1 = graph.add(Def.create());
-        Use use0 = graph.add(Use.create(def0, null, null));
-        Use use1 = graph.add(Use.create(null, def0, null));
-        Use use2 = graph.add(Use.create(null, null, def0));
+        Def def0 = graph.add(new Def());
+        Def def1 = graph.add(new Def());
+        Use use0 = graph.add(new Use(def0, null, null));
+        Use use1 = graph.add(new Use(null, def0, null));
+        Use use2 = graph.add(new Use(null, null, def0));
 
         assertEquals(3, def0.usages().count());
         assertThat(def0.usages(), contains(use0));
@@ -213,11 +205,11 @@
     @Test
     public void testReplaceAtUsagesWithPredicate0() {
         Graph graph = new Graph();
-        Def def0 = graph.add(Def.create());
-        Def def1 = graph.add(Def.create());
-        Use use0 = graph.add(Use.create(def0, null, null));
-        Use use1 = graph.add(Use.create(null, def0, null));
-        Use use2 = graph.add(Use.create(null, null, def0));
+        Def def0 = graph.add(new Def());
+        Def def1 = graph.add(new Def());
+        Use use0 = graph.add(new Use(def0, null, null));
+        Use use1 = graph.add(new Use(null, def0, null));
+        Use use2 = graph.add(new Use(null, null, def0));
 
         assertEquals(3, def0.usages().count());
         assertThat(def0.usages(), contains(use0));
@@ -244,11 +236,11 @@
     @Test
     public void testReplaceAtUsagesWithPredicate02() {
         Graph graph = new Graph();
-        Def def0 = graph.add(Def.create());
-        Def def1 = graph.add(Def.create());
-        Use use0 = graph.add(Use.create(def0, null, null));
-        Use use1 = graph.add(Use.create(null, def0, null));
-        Use use2 = graph.add(Use.create(null, null, def0));
+        Def def0 = graph.add(new Def());
+        Def def1 = graph.add(new Def());
+        Use use0 = graph.add(new Use(def0, null, null));
+        Use use1 = graph.add(new Use(null, def0, null));
+        Use use2 = graph.add(new Use(null, null, def0));
 
         assertEquals(3, def0.usages().count());
         assertThat(def0.usages(), contains(use0));
@@ -275,12 +267,12 @@
     @Test
     public void testReplaceAtUsagesWithPredicate023() {
         Graph graph = new Graph();
-        Def def0 = graph.add(Def.create());
-        Def def1 = graph.add(Def.create());
-        Use use0 = graph.add(Use.create(def0, null, null));
-        Use use1 = graph.add(Use.create(null, def0, null));
-        Use use2 = graph.add(Use.create(null, null, def0));
-        Use use3 = graph.add(Use.create(null, null, def0));
+        Def def0 = graph.add(new Def());
+        Def def1 = graph.add(new Def());
+        Use use0 = graph.add(new Use(def0, null, null));
+        Use use1 = graph.add(new Use(null, def0, null));
+        Use use2 = graph.add(new Use(null, null, def0));
+        Use use3 = graph.add(new Use(null, null, def0));
 
         assertEquals(4, def0.usages().count());
         assertThat(def0.usages(), contains(use0));
@@ -309,12 +301,12 @@
     @Test
     public void testReplaceAtUsagesWithPredicate013() {
         Graph graph = new Graph();
-        Def def0 = graph.add(Def.create());
-        Def def1 = graph.add(Def.create());
-        Use use0 = graph.add(Use.create(def0, null, null));
-        Use use1 = graph.add(Use.create(null, def0, null));
-        Use use2 = graph.add(Use.create(null, null, def0));
-        Use use3 = graph.add(Use.create(null, null, def0));
+        Def def0 = graph.add(new Def());
+        Def def1 = graph.add(new Def());
+        Use use0 = graph.add(new Use(def0, null, null));
+        Use use1 = graph.add(new Use(null, def0, null));
+        Use use2 = graph.add(new Use(null, null, def0));
+        Use use3 = graph.add(new Use(null, null, def0));
 
         assertEquals(4, def0.usages().count());
         assertThat(def0.usages(), contains(use0));
@@ -343,12 +335,12 @@
     @Test
     public void testReplaceAtUsagesWithPredicate203() {
         Graph graph = new Graph();
-        Def def0 = graph.add(Def.create());
-        Def def1 = graph.add(Def.create());
-        Use use0 = graph.add(Use.create(def0, null, null));
-        Use use1 = graph.add(Use.create(null, def0, null));
-        Use use2 = graph.add(Use.create(null, null, def0));
-        Use use3 = graph.add(Use.create(null, null, def0));
+        Def def0 = graph.add(new Def());
+        Def def1 = graph.add(new Def());
+        Use use0 = graph.add(new Use(def0, null, null));
+        Use use1 = graph.add(new Use(null, def0, null));
+        Use use2 = graph.add(new Use(null, null, def0));
+        Use use3 = graph.add(new Use(null, null, def0));
 
         assertEquals(4, def0.usages().count());
         assertThat(def0.usages(), contains(use0));
@@ -377,11 +369,11 @@
     @Test
     public void testReplaceAtUsagesWithPredicate01() {
         Graph graph = new Graph();
-        Def def0 = graph.add(Def.create());
-        Def def1 = graph.add(Def.create());
-        Use use0 = graph.add(Use.create(def0, null, null));
-        Use use1 = graph.add(Use.create(null, def0, null));
-        Use use2 = graph.add(Use.create(null, null, def0));
+        Def def0 = graph.add(new Def());
+        Def def1 = graph.add(new Def());
+        Use use0 = graph.add(new Use(def0, null, null));
+        Use use1 = graph.add(new Use(null, def0, null));
+        Use use2 = graph.add(new Use(null, null, def0));
 
         assertEquals(3, def0.usages().count());
         assertThat(def0.usages(), contains(use0));
@@ -408,11 +400,11 @@
     @Test
     public void testReplaceAtUsagesWithPredicate12() {
         Graph graph = new Graph();
-        Def def0 = graph.add(Def.create());
-        Def def1 = graph.add(Def.create());
-        Use use0 = graph.add(Use.create(def0, null, null));
-        Use use1 = graph.add(Use.create(null, def0, null));
-        Use use2 = graph.add(Use.create(null, null, def0));
+        Def def0 = graph.add(new Def());
+        Def def1 = graph.add(new Def());
+        Use use0 = graph.add(new Use(def0, null, null));
+        Use use1 = graph.add(new Use(null, def0, null));
+        Use use2 = graph.add(new Use(null, null, def0));
 
         assertEquals(3, def0.usages().count());
         assertThat(def0.usages(), contains(use0));
--- a/graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/TypedNodeIteratorTest.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/TypedNodeIteratorTest.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
 
         protected final String name;
 
-        public static TestNode create(String name) {
-            return new TestNode(name);
-        }
-
-        protected TestNode(String name) {
+        public TestNode(String name) {
             this.name = name;
         }
 
@@ -54,14 +50,14 @@
     @Test
     public void singleNodeTest() {
         Graph graph = new Graph();
-        graph.add(TestNode.create("a"));
+        graph.add(new TestNode("a"));
         assertTrue(graph.hasNode(TestNode.class));
         assertEquals("a", toString(graph.getNodes(TestNode.class)));
     }
 
     @Test
     public void deletingNodeTest() {
-        TestNode testNode = TestNode.create("a");
+        TestNode testNode = new TestNode("a");
         Graph graph = new Graph();
         graph.add(testNode);
         testNode.safeDelete();
@@ -70,29 +66,29 @@
 
     @Test
     public void deleteAndAddTest() {
-        TestNode testNode = TestNode.create("b");
+        TestNode testNode = new TestNode("b");
         Graph graph = new Graph();
-        graph.add(TestNode.create("a"));
+        graph.add(new TestNode("a"));
         graph.add(testNode);
         testNode.safeDelete();
         assertEquals("a", toString(graph.getNodes(TestNode.class)));
-        graph.add(TestNode.create("c"));
+        graph.add(new TestNode("c"));
         assertEquals("ac", toString(graph.getNodes(TestNode.class)));
     }
 
     @Test
     public void iteratorBehaviorTest() {
         Graph graph = new Graph();
-        graph.add(TestNode.create("a"));
+        graph.add(new TestNode("a"));
         Iterator<TestNode> iterator = graph.getNodes(TestNode.class).iterator();
         assertTrue(iterator.hasNext());
         assertEquals("a", iterator.next().getName());
         assertFalse(iterator.hasNext());
-        graph.add(TestNode.create("b"));
+        graph.add(new TestNode("b"));
         assertTrue(iterator.hasNext());
         assertEquals("b", iterator.next().getName());
         assertFalse(iterator.hasNext());
-        TestNode c = TestNode.create("c");
+        TestNode c = new TestNode("c");
         graph.add(c);
         assertTrue(iterator.hasNext());
         c.safeDelete();
@@ -102,26 +98,26 @@
     @Test
     public void complicatedIterationTest() {
         Graph graph = new Graph();
-        graph.add(TestNode.create("a"));
+        graph.add(new TestNode("a"));
         for (TestNode tn : graph.getNodes(TestNode.class)) {
             String name = tn.getName();
             for (int i = 0; i < name.length(); ++i) {
                 char c = name.charAt(i);
                 if (c == 'a') {
                     tn.safeDelete();
-                    graph.add(TestNode.create("b"));
-                    graph.add(TestNode.create("c"));
+                    graph.add(new TestNode("b"));
+                    graph.add(new TestNode("c"));
                 } else if (c == 'b') {
                     tn.safeDelete();
                 } else if (c == 'c') {
-                    graph.add(TestNode.create("d"));
-                    graph.add(TestNode.create("e"));
-                    graph.add(TestNode.create("d"));
-                    graph.add(TestNode.create("e"));
-                    graph.add(TestNode.create("e"));
-                    graph.add(TestNode.create("d"));
-                    graph.add(TestNode.create("e"));
-                    graph.add(TestNode.create("d"));
+                    graph.add(new TestNode("d"));
+                    graph.add(new TestNode("e"));
+                    graph.add(new TestNode("d"));
+                    graph.add(new TestNode("e"));
+                    graph.add(new TestNode("e"));
+                    graph.add(new TestNode("d"));
+                    graph.add(new TestNode("e"));
+                    graph.add(new TestNode("d"));
                 } else if (c == 'd') {
                     for (TestNode tn2 : graph.getNodes(TestNode.class)) {
                         if (tn2.getName().equals("e")) {
@@ -141,12 +137,12 @@
     @Test
     public void addingNodeDuringIterationTest() {
         Graph graph = new Graph();
-        graph.add(TestNode.create("a"));
+        graph.add(new TestNode("a"));
         StringBuilder sb = new StringBuilder();
         int z = 0;
         for (TestNode tn : graph.getNodes(TestNode.class)) {
             if (z == 0) {
-                graph.add(TestNode.create("b"));
+                graph.add(new TestNode("b"));
             }
             sb.append(tn.getName());
             z++;
@@ -156,7 +152,7 @@
         z = 0;
         for (TestNode tn : graph.getNodes(TestNode.class)) {
             if (z == 0) {
-                graph.add(TestNode.create("c"));
+                graph.add(new TestNode("c"));
             }
             assertNotNull(tn);
             z++;
--- a/graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/TypedNodeIteratorTest2.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/TypedNodeIteratorTest2.java	Mon Jan 12 20:39:04 2015 +0100
@@ -36,11 +36,7 @@
 
         protected final String name;
 
-        public static NodeA create(String name) {
-            return new NodeA(name);
-        }
-
-        protected NodeA(String name) {
+        public NodeA(String name) {
             this.name = name;
         }
 
@@ -52,42 +48,33 @@
     @NodeInfo
     static class NodeB extends NodeA implements IterableNodeType {
 
-        public static NodeB create(String name) {
-            return new NodeB(name);
+        public NodeB(String name) {
+            super(name);
         }
 
-        protected NodeB(String name) {
-            super(name);
-        }
     }
 
     @NodeInfo
     static class NodeC extends NodeB {
-        public static NodeC create(String name) {
-            return new NodeC(name);
+        public NodeC(String name) {
+            super(name);
         }
 
-        protected NodeC(String name) {
-            super(name);
-        }
     }
 
     @NodeInfo
     static class NodeD extends NodeC {
-        public static NodeD create(String name) {
-            return new NodeD(name);
+        public NodeD(String name) {
+            super(name);
         }
 
-        protected NodeD(String name) {
-            super(name);
-        }
     }
 
     @Test
     public void simpleSubclassTest() {
         Graph graph = new Graph();
-        graph.add(NodeB.create("b"));
-        graph.add(NodeD.create("d"));
+        graph.add(new NodeB("b"));
+        graph.add(new NodeD("d"));
 
         Assert.assertEquals("bd", TypedNodeIteratorTest.toString(graph.getNodes(NodeB.class)));
         Assert.assertEquals("d", TypedNodeIteratorTest.toString(graph.getNodes(NodeD.class)));
@@ -96,19 +83,19 @@
     @Test
     public void addingNodeDuringIterationTest() {
         Graph graph = new Graph();
-        graph.add(NodeB.create("b1"));
-        NodeD d1 = graph.add(NodeD.create("d1"));
+        graph.add(new NodeB("b1"));
+        NodeD d1 = graph.add(new NodeD("d1"));
         StringBuilder sb = new StringBuilder();
         for (NodeB tn : graph.getNodes(NodeB.class)) {
             if (tn == d1) {
-                graph.add(NodeB.create("b2"));
+                graph.add(new NodeB("b2"));
             }
             sb.append(tn.getName());
         }
         assertEquals("b1d1b2", sb.toString());
         for (NodeB tn : graph.getNodes(NodeB.class)) {
             if (tn == d1) {
-                graph.add(NodeB.create("b3"));
+                graph.add(new NodeB("b3"));
             }
             assertNotNull(tn);
         }
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Graph.java	Mon Jan 12 20:39:04 2015 +0100
@@ -620,12 +620,9 @@
     // Fully qualified annotation name is required to satisfy javac
     @com.oracle.graal.nodeinfo.NodeInfo
     static class PlaceHolderNode extends Node {
-        public static PlaceHolderNode create() {
-            return new PlaceHolderNode();
+        public PlaceHolderNode() {
         }
 
-        protected PlaceHolderNode() {
-        }
     }
 
     static final Node PLACE_HOLDER = new PlaceHolderNode();
--- a/graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/DataPatchInConstantsTest.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/DataPatchInConstantsTest.java	Mon Jan 12 20:39:04 2015 +0100
@@ -157,11 +157,7 @@
 
         @Input protected ValueNode input;
 
-        public static LoadThroughPatchNode create(ValueNode input) {
-            return new LoadThroughPatchNode(input);
-        }
-
-        protected LoadThroughPatchNode(ValueNode input) {
+        public LoadThroughPatchNode(ValueNode input) {
             super(input.stamp());
             this.input = input;
         }
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java	Mon Jan 12 20:39:04 2015 +0100
@@ -335,7 +335,7 @@
         HotSpotVMConfig config = HotSpotGraalRuntime.runtime().getConfig();
         RawNativeCallNodeFactory factory = new RawNativeCallNodeFactory() {
             public FixedWithNextNode createRawCallNode(Kind returnType, JavaConstant functionPointer, ValueNode... args) {
-                return AMD64RawNativeCallNode.create(returnType, functionPointer, args);
+                return new AMD64RawNativeCallNode(returnType, functionPointer, args);
             }
         };
         Backend backend = HotSpotGraalRuntime.runtime().getBackend(AMD64.class);
--- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64RawNativeCallNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64RawNativeCallNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
     protected final JavaConstant functionPointer;
     @Input NodeInputList<ValueNode> args;
 
-    public static AMD64RawNativeCallNode create(Kind returnType, JavaConstant functionPointer, ValueNode[] args) {
-        return new AMD64RawNativeCallNode(returnType, functionPointer, args);
-    }
-
-    protected AMD64RawNativeCallNode(Kind returnType, JavaConstant functionPointer, ValueNode[] args) {
+    public AMD64RawNativeCallNode(Kind returnType, JavaConstant functionPointer, ValueNode[] args) {
         super(StampFactory.forKind(returnType));
         this.functionPointer = functionPointer;
         this.args = new NodeInputList<>(this, args);
--- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java	Mon Jan 12 20:39:04 2015 +0100
@@ -1074,10 +1074,10 @@
             return null;
         }
         StructuredGraph hostGraph = new StructuredGraph(method, -2);
-        ParameterNode deoptId = hostGraph.unique(ParameterNode.create(0, StampFactory.intValue()));
-        ParameterNode hsailFrame = hostGraph.unique(ParameterNode.create(1, StampFactory.forKind(providers.getCodeCache().getTarget().wordKind)));
-        ParameterNode reasonAndAction = hostGraph.unique(ParameterNode.create(2, StampFactory.intValue()));
-        ParameterNode speculation = hostGraph.unique(ParameterNode.create(3, StampFactory.object()));
+        ParameterNode deoptId = hostGraph.unique(new ParameterNode(0, StampFactory.intValue()));
+        ParameterNode hsailFrame = hostGraph.unique(new ParameterNode(1, StampFactory.forKind(providers.getCodeCache().getTarget().wordKind)));
+        ParameterNode reasonAndAction = hostGraph.unique(new ParameterNode(2, StampFactory.intValue()));
+        ParameterNode speculation = hostGraph.unique(new ParameterNode(3, StampFactory.object()));
         BeginNode[] branches = new BeginNode[deopts.size() + 1];
         int[] keys = new int[deopts.size()];
         int[] keySuccessors = new int[deopts.size() + 1];
@@ -1100,7 +1100,7 @@
         keyProbabilities[deopts.size()] = 0; // default
         keySuccessors[deopts.size()] = deopts.size();
         branches[deopts.size()] = createHostCrashBranch(hostGraph, deoptId);
-        IntegerSwitchNode switchNode = hostGraph.add(IntegerSwitchNode.create(deoptId, branches, keys, keyProbabilities, keySuccessors));
+        IntegerSwitchNode switchNode = hostGraph.add(new IntegerSwitchNode(deoptId, branches, keys, keyProbabilities, keySuccessors));
         StartNode start = hostGraph.start();
         start.setNext(switchNode);
         /*
@@ -1111,16 +1111,16 @@
     }
 
     private static BeginNode createHostCrashBranch(StructuredGraph hostGraph, ValueNode deoptId) {
-        VMErrorNode vmError = hostGraph.add(VMErrorNode.create("Error in HSAIL deopt. DeoptId=%d", deoptId));
+        VMErrorNode vmError = hostGraph.add(new VMErrorNode("Error in HSAIL deopt. DeoptId=%d", deoptId));
         // ConvertNode.convert(hostGraph, Kind.Long, deoptId)));
-        vmError.setNext(hostGraph.add(ReturnNode.create(ConstantNode.defaultForKind(hostGraph.method().getSignature().getReturnKind(), hostGraph))));
+        vmError.setNext(hostGraph.add(new ReturnNode(ConstantNode.defaultForKind(hostGraph.method().getSignature().getReturnKind(), hostGraph))));
         return BeginNode.begin(vmError);
     }
 
     private static BeginNode createHostDeoptBranch(DeoptimizingOp deopt, ParameterNode hsailFrame, ValueNode reasonAndAction, ValueNode speculation, HotSpotProviders providers,
                     HotSpotVMConfig config, int numSRegs, int numDRegs) {
-        BeginNode branch = hsailFrame.graph().add(BeginNode.create());
-        DynamicDeoptimizeNode deoptimization = hsailFrame.graph().add(DynamicDeoptimizeNode.create(reasonAndAction, speculation));
+        BeginNode branch = hsailFrame.graph().add(new BeginNode());
+        DynamicDeoptimizeNode deoptimization = hsailFrame.graph().add(new DynamicDeoptimizeNode(reasonAndAction, speculation));
         deoptimization.setStateBefore(createFrameState(deopt.getFrameState().topFrame, hsailFrame, providers, config, numSRegs, numDRegs));
         branch.setNext(deoptimization);
         return branch;
@@ -1153,7 +1153,7 @@
             locks[i] = lirValueToHirNode.apply(lockValue);
             monitorIds[i] = getMonitorIdForHotSpotMonitorValueFromFrame(lockValue, hsailFrame, hostGraph);
         }
-        FrameState frameState = hostGraph.add(FrameState.create(lowLevelFrame.getMethod(), lowLevelFrame.getBCI(), locals, stack, locks, monitorIds, lowLevelFrame.rethrowException, false));
+        FrameState frameState = hostGraph.add(new FrameState(lowLevelFrame.getMethod(), lowLevelFrame.getBCI(), locals, stack, locks, monitorIds, lowLevelFrame.rethrowException, false));
         if (outterFrameState != null) {
             frameState.setOuterFrameState(outterFrameState);
         }
@@ -1168,7 +1168,7 @@
                 VirtualObject virtualObject = entry.getKey();
                 VirtualObjectNode virtualObjectNode = entry.getValue();
                 List<ValueNode> fieldValues = Arrays.stream(virtualObject.getValues()).map(lirValueToHirNode).collect(Collectors.toList());
-                virtualStates.add(VirtualObjectState.create(virtualObjectNode, fieldValues));
+                virtualStates.add(new VirtualObjectState(virtualObjectNode, fieldValues));
             }
             // New virtual objects may have been discovered while processing the previous set.
             // Wait until a fixed point is reached
@@ -1213,9 +1213,9 @@
     private static ValueNode getNodeForVirtualObjectFromFrame(VirtualObject virtualObject, Map<VirtualObject, VirtualObjectNode> virtualObjects, StructuredGraph hostGraph) {
         return virtualObjects.computeIfAbsent(virtualObject, vo -> {
             if (vo.getType().isArray()) {
-                return hostGraph.add(VirtualArrayNode.create(vo.getType().getComponentType(), vo.getValues().length));
+                return hostGraph.add(new VirtualArrayNode(vo.getType().getComponentType(), vo.getValues().length));
             } else {
-                return hostGraph.add(VirtualInstanceNode.create(vo.getType(), true));
+                return hostGraph.add(new VirtualInstanceNode(vo.getType(), true));
             }
         });
     }
@@ -1228,14 +1228,14 @@
         int intSize = providers.getCodeCache().getTarget().arch.getSizeInBytes(Kind.Int);
         if (regNumber >= HSAIL.s0.number && regNumber <= HSAIL.s31.number) {
             long offset = config.hsailFrameHeaderSize + intSize * (regNumber - HSAIL.s0.number);
-            location = ConstantLocationNode.create(FINAL_LOCATION, offset, hostGraph);
+            location = hostGraph.unique(new ConstantLocationNode(FINAL_LOCATION, offset));
         } else if (regNumber >= HSAIL.d0.number && regNumber <= HSAIL.d15.number) {
             long offset = config.hsailFrameHeaderSize + intSize * numSRegs + longSize * (regNumber - HSAIL.d0.number);
-            location = ConstantLocationNode.create(FINAL_LOCATION, offset, hostGraph);
+            location = hostGraph.unique(new ConstantLocationNode(FINAL_LOCATION, offset));
         } else {
             throw GraalInternalError.shouldNotReachHere("unknown hsail register: " + regNumber);
         }
-        valueNode = hostGraph.unique(FloatingReadNode.create(hsailFrame, location, null, StampFactory.forKind(valueKind)));
+        valueNode = hostGraph.unique(new FloatingReadNode(hsailFrame, location, null, StampFactory.forKind(valueKind)));
         return valueNode;
     }
 
@@ -1246,8 +1246,8 @@
             int longSize = providers.getCodeCache().getTarget().arch.getSizeInBytes(Kind.Long);
             int intSize = providers.getCodeCache().getTarget().arch.getSizeInBytes(Kind.Int);
             long offset = config.hsailFrameHeaderSize + (intSize * numSRegs) + (longSize * numDRegs) + HSAIL.getStackOffsetStart(slot, slotSizeInBits);
-            LocationNode location = ConstantLocationNode.create(FINAL_LOCATION, offset, hostGraph);
-            ValueNode valueNode = hostGraph.unique(FloatingReadNode.create(hsailFrame, location, null, StampFactory.forKind(valueKind)));
+            LocationNode location = hostGraph.unique(new ConstantLocationNode(FINAL_LOCATION, offset));
+            ValueNode valueNode = hostGraph.unique(new FloatingReadNode(hsailFrame, location, null, StampFactory.forKind(valueKind)));
             return valueNode;
         } else {
             throw GraalInternalError.shouldNotReachHere("unsupported stack slot kind: " + valueKind);
--- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLoweringProvider.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLoweringProvider.java	Mon Jan 12 20:39:04 2015 +0100
@@ -94,7 +94,7 @@
                     default:
                         reason = DeoptimizationReason.None;
                 }
-                unwind.replaceAtPredecessor(graph.add(DeoptimizeNode.create(DeoptimizationAction.InvalidateReprofile, reason)));
+                unwind.replaceAtPredecessor(graph.add(new DeoptimizeNode(DeoptimizationAction.InvalidateReprofile, reason)));
                 unwind.safeDelete();
             } else {
                 // unwind whose exception is not an instance of ForeignCallNode
--- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/replacements/HSAILDirectLoadAcquireNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/replacements/HSAILDirectLoadAcquireNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -34,11 +34,7 @@
 @NodeInfo
 public class HSAILDirectLoadAcquireNode extends DirectReadNode {
 
-    public static HSAILDirectLoadAcquireNode create(ValueNode address, Kind readKind) {
-        return new HSAILDirectLoadAcquireNode(address, readKind);
-    }
-
-    protected HSAILDirectLoadAcquireNode(ValueNode address, Kind readKind) {
+    public HSAILDirectLoadAcquireNode(ValueNode address, Kind readKind) {
         super(address, readKind);
     }
 
--- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/replacements/HSAILDirectStoreReleaseNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/replacements/HSAILDirectStoreReleaseNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -34,11 +34,7 @@
 @NodeInfo
 public class HSAILDirectStoreReleaseNode extends DirectStoreNode {
 
-    public static HSAILDirectStoreReleaseNode create(ValueNode address, ValueNode value, Kind kind) {
-        return new HSAILDirectStoreReleaseNode(address, value, kind);
-    }
-
-    protected HSAILDirectStoreReleaseNode(ValueNode address, ValueNode value, Kind kind) {
+    public HSAILDirectStoreReleaseNode(ValueNode address, ValueNode value, Kind kind) {
         super(address, value, kind);
     }
 
--- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/replacements/HSAILWorkItemAbsIdNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/replacements/HSAILWorkItemAbsIdNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,11 +32,7 @@
 @NodeInfo
 public class HSAILWorkItemAbsIdNode extends FixedWithNextNode implements LIRLowerable {
 
-    public static HSAILWorkItemAbsIdNode create() {
-        return new HSAILWorkItemAbsIdNode();
-    }
-
-    protected HSAILWorkItemAbsIdNode() {
+    public HSAILWorkItemAbsIdNode() {
         super(StampFactory.forKind(Kind.Int));
     }
 
--- a/graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXWrapperBuilder.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.ptx/src/com/oracle/graal/hotspot/ptx/PTXWrapperBuilder.java	Mon Jan 12 20:39:04 2015 +0100
@@ -192,7 +192,7 @@
 
         InvokeNode kernelStart = createInvoke(getClass(), "getKernelStart", ConstantNode.forConstant(kernel.asConstant(), providers.getMetaAccess(), getGraph()));
 
-        AllocaNode buf = append(AllocaNode.create(bufSize / wordSize, wordKind, new BitSet()));
+        AllocaNode buf = append(new AllocaNode(bufSize / wordSize, wordKind, new BitSet()));
         ValueNode objectParametersOffsets;
         ValueNode pinnedObjects;
         ConstantNode nullWord = ConstantNode.forIntegerKind(wordKind, 0L, getGraph());
@@ -202,22 +202,22 @@
         } else {
             int intsPerWord = wordSize / intSize;
             int slots = roundUp(objectSlots.size(), intsPerWord);
-            objectParametersOffsets = append(AllocaNode.create(slots, wordKind, new BitSet()));
+            objectParametersOffsets = append(new AllocaNode(slots, wordKind, new BitSet()));
             // No refmap for pinned objects list since kernel execution is (currently) GC unsafe
-            pinnedObjects = append(AllocaNode.create(objectSlots.size(), wordKind, new BitSet()));
+            pinnedObjects = append(new AllocaNode(objectSlots.size(), wordKind, new BitSet()));
 
             // Initialize the object parameter offsets array
             int index = 0;
             for (int slot : objectSlots) {
                 int offset = slot * wordSize;
-                LocationNode location = ConstantLocationNode.create(FINAL_LOCATION, index * intSize, getGraph());
-                append(WriteNode.create(objectParametersOffsets, ConstantNode.forInt(offset, getGraph()), location, BarrierType.NONE, false));
+                LocationNode location = getGraph().unique(new ConstantLocationNode(FINAL_LOCATION, index * intSize));
+                append(new WriteNode(objectParametersOffsets, ConstantNode.forInt(offset, getGraph()), location, BarrierType.NONE, false));
                 index++;
             }
         }
 
         Map<LaunchArg, ValueNode> args = new EnumMap<>(LaunchArg.class);
-        args.put(Thread, append(ReadRegisterNode.create(providers.getRegisters().getThreadRegister(), true, false)));
+        args.put(Thread, append(new ReadRegisterNode(providers.getRegisters().getThreadRegister(), true, false)));
         args.put(Kernel, kernelStart);
         args.put(DimX, forInt(1, getGraph()));
         args.put(DimY, forInt(1, getGraph()));
@@ -233,13 +233,13 @@
         for (javaParametersIndex = 0; javaParametersIndex < javaParameters.length; javaParametersIndex++) {
             ParameterNode javaParameter = javaParameters[javaParametersIndex];
             int javaParameterOffset = javaParameterOffsetsInKernelParametersBuffer[javaParametersIndex];
-            LocationNode location = ConstantLocationNode.create(FINAL_LOCATION, javaParameterOffset, getGraph());
-            append(WriteNode.create(buf, javaParameter, location, BarrierType.NONE, false));
+            LocationNode location = getGraph().unique(new ConstantLocationNode(FINAL_LOCATION, javaParameterOffset));
+            append(new WriteNode(buf, javaParameter, location, BarrierType.NONE, false));
             updateDimArg(method, sig, sigIndex++, args, javaParameter);
         }
         if (returnKind != Kind.Void) {
-            LocationNode location = ConstantLocationNode.create(FINAL_LOCATION, bufSize - wordSize, getGraph());
-            append(WriteNode.create(buf, nullWord, location, BarrierType.NONE, false));
+            LocationNode location = getGraph().unique(new ConstantLocationNode(FINAL_LOCATION, bufSize - wordSize));
+            append(new WriteNode(buf, nullWord, location, BarrierType.NONE, false));
         }
 
         HIRFrameStateBuilder fsb = new HIRFrameStateBuilder(method, getGraph(), true);
@@ -247,7 +247,7 @@
         getGraph().start().setStateAfter(fs);
 
         ValueNode[] launchArgsArray = args.values().toArray(new ValueNode[args.size()]);
-        ForeignCallNode result = append(ForeignCallNode.create(providers.getForeignCalls(), CALL_KERNEL, launchArgsArray));
+        ForeignCallNode result = append(new ForeignCallNode(providers.getForeignCalls(), CALL_KERNEL, launchArgsArray));
         result.setStateAfter(fs);
 
         InvokeNode getObjectResult = null;
@@ -261,13 +261,13 @@
             case Short:
             case Char:
             case Int:
-                returnValue = unique(NarrowNode.create(result, 32));
+                returnValue = unique(new NarrowNode(result, 32));
                 break;
             case Long:
                 returnValue = result;
                 break;
             case Float: {
-                ValueNode asInt = unique(NarrowNode.create(result, 32));
+                ValueNode asInt = unique(new NarrowNode(result, 32));
                 returnValue = ReinterpretNode.reinterpret(Kind.Float, asInt);
                 break;
             }
@@ -282,7 +282,7 @@
                 throw new GraalInternalError("%s return kind not supported", returnKind);
         }
 
-        append(ReturnNode.create(returnValue));
+        append(new ReturnNode(returnValue));
 
         if (Debug.isDumpEnabled()) {
             Debug.dump(getGraph(), "Initial kernel launch graph");
@@ -314,7 +314,7 @@
         } else {
             stamp = StampFactory.forKind(kind);
         }
-        javaParameters[javaParametersIndex] = unique(ParameterNode.create(javaParametersIndex, stamp));
+        javaParameters[javaParametersIndex] = unique(new ParameterNode(javaParametersIndex, stamp));
         bufSize += kindByteSize;
     }
 
@@ -326,7 +326,7 @@
         if (sigIndex >= 0) {
             ParallelOver parallelOver = method.getParameterAnnotation(ParallelOver.class, sigIndex);
             if (parallelOver != null && sig.getParameterType(sigIndex, method.getDeclaringClass()).equals(providers.getMetaAccess().lookupJavaType(int[].class))) {
-                ArrayLengthNode dimension = append(ArrayLengthNode.create(javaParameter));
+                ArrayLengthNode dimension = append(new ArrayLengthNode(javaParameter));
                 LaunchArg argKey = LaunchArg.valueOf(LaunchArg.class, "Dim" + parallelOver.dimension());
                 ValueNode existing = launchArgs.put(argKey, dimension);
                 if (existing != null && existing instanceof ArrayLengthNode) {
--- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/DataPatchTest.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/DataPatchTest.java	Mon Jan 12 20:39:04 2015 +0100
@@ -96,11 +96,7 @@
 
         @Input protected ValueNode input;
 
-        public static ConstantFoldBarrier create(ValueNode input) {
-            return new ConstantFoldBarrier(input);
-        }
-
-        protected ConstantFoldBarrier(ValueNode input) {
+        public ConstantFoldBarrier(ValueNode input) {
             super(input.stamp());
             this.input = input;
         }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/debug/BenchmarkCounters.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/debug/BenchmarkCounters.java	Mon Jan 12 20:39:04 2015 +0100
@@ -379,18 +379,18 @@
     public static void lower(DynamicCounterNode counter, HotSpotRegistersProvider registers, HotSpotVMConfig config, Kind wordKind) {
         StructuredGraph graph = counter.graph();
 
-        ReadRegisterNode thread = graph.add(ReadRegisterNode.create(registers.getThreadRegister(), wordKind, true, false));
+        ReadRegisterNode thread = graph.add(new ReadRegisterNode(registers.getThreadRegister(), wordKind, true, false));
 
         int index = BenchmarkCounters.getIndex(counter);
         if (index >= config.graalCountersSize) {
             throw new GraalInternalError("too many counters, reduce number of counters or increase -XX:GraalCounterSize=... (current value: " + config.graalCountersSize + ")");
         }
-        ConstantLocationNode arrayLocation = ConstantLocationNode.create(COUNTER_LOCATION, config.graalCountersThreadOffset, graph);
-        ReadNode readArray = graph.add(ReadNode.create(thread, arrayLocation, StampFactory.forKind(wordKind), BarrierType.NONE));
-        ConstantLocationNode location = ConstantLocationNode.create(COUNTER_LOCATION, Unsafe.ARRAY_LONG_INDEX_SCALE * index, graph);
-        ReadNode read = graph.add(ReadNode.create(readArray, location, StampFactory.forKind(Kind.Long), BarrierType.NONE));
-        AddNode add = graph.unique(AddNode.create(read, counter.getIncrement()));
-        WriteNode write = graph.add(WriteNode.create(readArray, add, location, BarrierType.NONE));
+        ConstantLocationNode arrayLocation = graph.unique(new ConstantLocationNode(COUNTER_LOCATION, config.graalCountersThreadOffset));
+        ReadNode readArray = graph.add(new ReadNode(thread, arrayLocation, StampFactory.forKind(wordKind), BarrierType.NONE));
+        ConstantLocationNode location = graph.unique(new ConstantLocationNode(COUNTER_LOCATION, Unsafe.ARRAY_LONG_INDEX_SCALE * index));
+        ReadNode read = graph.add(new ReadNode(readArray, location, StampFactory.forKind(Kind.Long), BarrierType.NONE));
+        AddNode add = graph.unique(new AddNode(read, counter.getIncrement()));
+        WriteNode write = graph.add(new WriteNode(readArray, add, location, BarrierType.NONE));
 
         graph.addBeforeFixed(counter, thread);
         graph.addBeforeFixed(counter, readArray);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java	Mon Jan 12 20:39:04 2015 +0100
@@ -191,9 +191,9 @@
             return;
         }
         StructuredGraph graph = n.graph();
-        LocationNode location = ConstantLocationNode.create(KLASS_LAYOUT_HELPER_LOCATION, runtime.getConfig().klassLayoutHelperOffset, graph);
+        LocationNode location = graph.unique(new ConstantLocationNode(KLASS_LAYOUT_HELPER_LOCATION, runtime.getConfig().klassLayoutHelperOffset));
         assert !n.getHub().isConstant();
-        graph.replaceFloating(n, graph.unique(FloatingReadNode.create(n.getHub(), location, null, n.stamp(), n.getGuard(), BarrierType.NONE)));
+        graph.replaceFloating(n, graph.unique(new FloatingReadNode(n.getHub(), location, null, n.stamp(), n.getGuard(), BarrierType.NONE)));
     }
 
     private void lowerHubGetClassNode(HubGetClassNode n, LoweringTool tool) {
@@ -202,9 +202,9 @@
         }
 
         StructuredGraph graph = n.graph();
-        LocationNode location = ConstantLocationNode.create(CLASS_MIRROR_LOCATION, runtime.getConfig().classMirrorOffset, graph);
+        LocationNode location = graph.unique(new ConstantLocationNode(CLASS_MIRROR_LOCATION, runtime.getConfig().classMirrorOffset));
         assert !n.getHub().isConstant();
-        FloatingReadNode read = graph.unique(FloatingReadNode.create(n.getHub(), location, null, n.stamp(), n.getGuard(), BarrierType.NONE));
+        FloatingReadNode read = graph.unique(new FloatingReadNode(n.getHub(), location, null, n.stamp(), n.getGuard(), BarrierType.NONE));
         graph.replaceFloating(n, read);
     }
 
@@ -214,9 +214,9 @@
         }
 
         StructuredGraph graph = n.graph();
-        LocationNode location = ConstantLocationNode.create(CLASS_KLASS_LOCATION, runtime.getConfig().klassOffset, graph);
+        LocationNode location = graph.unique(new ConstantLocationNode(CLASS_KLASS_LOCATION, runtime.getConfig().klassOffset));
         assert !n.getValue().isConstant();
-        FloatingReadNode read = graph.unique(FloatingReadNode.create(n.getValue(), location, null, n.stamp(), n.getGuard(), BarrierType.NONE));
+        FloatingReadNode read = graph.unique(new FloatingReadNode(n.getValue(), location, null, n.stamp(), n.getGuard(), BarrierType.NONE));
         graph.replaceFloating(n, read);
     }
 
@@ -244,10 +244,11 @@
                     // We use LocationNode.ANY_LOCATION for the reads that access the
                     // compiled code entry as HotSpot does not guarantee they are final
                     // values.
-                    ReadNode compiledEntry = graph.add(ReadNode.create(metaspaceMethod, ConstantLocationNode.create(ANY_LOCATION, runtime.getConfig().methodCompiledEntryOffset, graph),
-                                    StampFactory.forKind(wordKind), BarrierType.NONE));
+                    int methodCompiledEntryOffset = runtime.getConfig().methodCompiledEntryOffset;
+                    ReadNode compiledEntry = graph.add(new ReadNode(metaspaceMethod, graph.unique(new ConstantLocationNode(ANY_LOCATION, methodCompiledEntryOffset)), StampFactory.forKind(wordKind),
+                                    BarrierType.NONE));
 
-                    loweredCallTarget = graph.add(HotSpotIndirectCallTargetNode.create(metaspaceMethod, compiledEntry, parameters, invoke.asNode().stamp(), signature, callTarget.targetMethod(),
+                    loweredCallTarget = graph.add(new HotSpotIndirectCallTargetNode(metaspaceMethod, compiledEntry, parameters, invoke.asNode().stamp(), signature, callTarget.targetMethod(),
                                     CallingConvention.Type.JavaCall, callTarget.invokeKind()));
 
                     graph.addBeforeFixed(invoke.asNode(), metaspaceMethod);
@@ -256,7 +257,7 @@
             }
 
             if (loweredCallTarget == null) {
-                loweredCallTarget = graph.add(HotSpotDirectCallTargetNode.create(parameters, invoke.asNode().stamp(), signature, callTarget.targetMethod(), CallingConvention.Type.JavaCall,
+                loweredCallTarget = graph.add(new HotSpotDirectCallTargetNode(parameters, invoke.asNode().stamp(), signature, callTarget.targetMethod(), CallingConvention.Type.JavaCall,
                                 callTarget.invokeKind()));
             }
             callTarget.replaceAndDelete(loweredCallTarget);
@@ -296,12 +297,12 @@
 
     @Override
     protected ValueNode createReadArrayComponentHub(StructuredGraph graph, ValueNode arrayHub, FixedNode anchor) {
-        LocationNode location = ConstantLocationNode.create(OBJ_ARRAY_KLASS_ELEMENT_KLASS_LOCATION, runtime.getConfig().arrayClassElementOffset, graph);
+        LocationNode location = graph.unique(new ConstantLocationNode(OBJ_ARRAY_KLASS_ELEMENT_KLASS_LOCATION, runtime.getConfig().arrayClassElementOffset));
         /*
          * Anchor the read of the element klass to the cfg, because it is only valid when arrayClass
          * is an object class, which might not be the case in other parts of the compiled method.
          */
-        return graph.unique(FloatingReadNode.create(arrayHub, location, null, KlassPointerStamp.klassNonNull(), BeginNode.prevBegin(anchor)));
+        return graph.unique(new FloatingReadNode(arrayHub, location, null, KlassPointerStamp.klassNonNull(), BeginNode.prevBegin(anchor)));
     }
 
     @Override
@@ -339,9 +340,9 @@
     private void lowerOSRStartNode(OSRStartNode osrStart) {
         StructuredGraph graph = osrStart.graph();
         if (graph.getGuardsStage() == StructuredGraph.GuardsStage.FIXED_DEOPTS) {
-            StartNode newStart = graph.add(StartNode.create());
-            ParameterNode buffer = graph.unique(ParameterNode.create(0, StampFactory.forKind(runtime.getTarget().wordKind)));
-            ForeignCallNode migrationEnd = graph.add(ForeignCallNode.create(foreignCalls, OSR_MIGRATION_END, buffer));
+            StartNode newStart = graph.add(new StartNode());
+            ParameterNode buffer = graph.unique(new ParameterNode(0, StampFactory.forKind(runtime.getTarget().wordKind)));
+            ForeignCallNode migrationEnd = graph.add(new ForeignCallNode(foreignCalls, OSR_MIGRATION_END, buffer));
             migrationEnd.setStateAfter(osrStart.stateAfter());
 
             newStart.setNext(migrationEnd);
@@ -355,8 +356,8 @@
             for (OSRLocalNode osrLocal : graph.getNodes(OSRLocalNode.class)) {
                 int size = HIRFrameStateBuilder.stackSlots(osrLocal.getKind());
                 int offset = localsOffset - (osrLocal.index() + size - 1) * 8;
-                IndexedLocationNode location = IndexedLocationNode.create(ANY_LOCATION, offset, ConstantNode.forLong(0, graph), graph, 1);
-                ReadNode load = graph.add(ReadNode.create(buffer, location, osrLocal.stamp(), BarrierType.NONE));
+                IndexedLocationNode location = graph.unique(new IndexedLocationNode(ANY_LOCATION, offset, ConstantNode.forLong(0, graph), 1));
+                ReadNode load = graph.add(new ReadNode(buffer, location, osrLocal.stamp(), BarrierType.NONE));
                 osrLocal.replaceAndDelete(load);
                 graph.addBeforeFixed(migrationEnd, load);
             }
@@ -414,7 +415,7 @@
                     throw GraalInternalError.shouldNotReachHere();
                 }
 
-                ForeignCallNode foreignCallNode = graph.add(ForeignCallNode.create(foreignCalls, descriptor, node.stamp(), node.getArguments()));
+                ForeignCallNode foreignCallNode = graph.add(new ForeignCallNode(foreignCalls, descriptor, node.stamp(), node.getArguments()));
                 graph.replaceFixedWithFixed(node, foreignCallNode);
             }
         }
@@ -440,14 +441,14 @@
         // We use LocationNode.ANY_LOCATION for the reads that access the vtable
         // entry as HotSpot does not guarantee that this is a final value.
         Stamp methodStamp = MethodPointerStamp.method();
-        ReadNode metaspaceMethod = graph.add(ReadNode.create(hub, ConstantLocationNode.create(ANY_LOCATION, vtableEntryOffset, graph), methodStamp, BarrierType.NONE));
+        ReadNode metaspaceMethod = graph.add(new ReadNode(hub, graph.unique(new ConstantLocationNode(ANY_LOCATION, vtableEntryOffset)), methodStamp, BarrierType.NONE));
         return metaspaceMethod;
     }
 
     @Override
     protected ValueNode createReadHub(StructuredGraph graph, ValueNode object, GuardingNode guard) {
         HotSpotVMConfig config = runtime.getConfig();
-        LocationNode location = ConstantLocationNode.create(HUB_LOCATION, config.hubOffset, graph);
+        LocationNode location = graph.unique(new ConstantLocationNode(HUB_LOCATION, config.hubOffset));
         assert !object.isConstant() || object.isNullConstant();
 
         KlassPointerStamp hubStamp = KlassPointerStamp.klassNonNull();
@@ -455,7 +456,7 @@
             hubStamp = hubStamp.compressed(config.getKlassEncoding());
         }
 
-        FloatingReadNode memoryRead = graph.unique(FloatingReadNode.create(object, location, null, hubStamp, guard, BarrierType.NONE));
+        FloatingReadNode memoryRead = graph.unique(new FloatingReadNode(object, location, null, hubStamp, guard, BarrierType.NONE));
         if (config.useCompressedClassPointers) {
             return CompressionNode.uncompress(memoryRead, config.getKlassEncoding());
         } else {
@@ -465,7 +466,7 @@
 
     private WriteNode createWriteHub(StructuredGraph graph, ValueNode object, ValueNode value) {
         HotSpotVMConfig config = runtime.getConfig();
-        LocationNode location = ConstantLocationNode.create(HUB_WRITE_LOCATION, config.hubOffset, graph);
+        LocationNode location = graph.unique(new ConstantLocationNode(HUB_WRITE_LOCATION, config.hubOffset));
         assert !object.isConstant() || object.isNullConstant();
 
         ValueNode writeValue = value;
@@ -473,7 +474,7 @@
             writeValue = CompressionNode.compress(value, config.getKlassEncoding());
         }
 
-        return graph.add(WriteNode.create(object, writeValue, location, BarrierType.NONE));
+        return graph.add(new WriteNode(object, writeValue, location, BarrierType.NONE));
     }
 
     @Override
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nfi/NativeCallStubGraphBuilder.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nfi/NativeCallStubGraphBuilder.java	Mon Jan 12 20:39:04 2015 +0100
@@ -53,10 +53,10 @@
         try {
             ResolvedJavaMethod method = providers.getMetaAccess().lookupJavaMethod(NativeCallStubGraphBuilder.class.getMethod("libCall", Object.class, Object.class, Object.class));
             StructuredGraph g = new StructuredGraph(method);
-            ParameterNode arg0 = g.unique(ParameterNode.create(0, StampFactory.forKind(Kind.Object)));
-            ParameterNode arg1 = g.unique(ParameterNode.create(1, StampFactory.forKind(Kind.Object)));
-            ParameterNode arg2 = g.unique(ParameterNode.create(2, StampFactory.forKind(Kind.Object)));
-            FrameState frameState = g.add(FrameState.create(null, method, 0, Arrays.asList(new ValueNode[]{arg0, arg1, arg2}), 3, 0, false, false, new ArrayList<MonitorIdNode>(),
+            ParameterNode arg0 = g.unique(new ParameterNode(0, StampFactory.forKind(Kind.Object)));
+            ParameterNode arg1 = g.unique(new ParameterNode(1, StampFactory.forKind(Kind.Object)));
+            ParameterNode arg2 = g.unique(new ParameterNode(2, StampFactory.forKind(Kind.Object)));
+            FrameState frameState = g.add(new FrameState(null, method, 0, Arrays.asList(new ValueNode[]{arg0, arg1, arg2}), 3, 0, false, false, new ArrayList<MonitorIdNode>(),
                             new ArrayList<EscapeObjectState>()));
             g.start().setStateAfter(frameState);
             List<ValueNode> parameters = new ArrayList<>();
@@ -84,12 +84,12 @@
                     throw new IllegalArgumentException("Return type not supported: " + returnType.getName());
                 }
                 ResolvedJavaType type = providers.getMetaAccess().lookupJavaType(callNode.getKind().toBoxedJavaClass());
-                boxedResult = g.unique(BoxNode.create(callNode, type, callNode.getKind()));
+                boxedResult = g.unique(new BoxNode(callNode, type, callNode.getKind()));
             } else {
-                boxedResult = g.unique(BoxNode.create(ConstantNode.forLong(0, g), providers.getMetaAccess().lookupJavaType(Long.class), Kind.Long));
+                boxedResult = g.unique(new BoxNode(ConstantNode.forLong(0, g), providers.getMetaAccess().lookupJavaType(Long.class), Kind.Long));
             }
 
-            ReturnNode returnNode = g.add(ReturnNode.create(boxedResult));
+            ReturnNode returnNode = g.add(new ReturnNode(boxedResult));
             callNode.setNext(returnNode);
             (new HotSpotWordTypeRewriterPhase(providers.getMetaAccess(), providers.getSnippetReflection(), providers.getConstantReflection(), Kind.Long)).apply(g);
             return g;
@@ -103,7 +103,7 @@
         FixedWithNextNode last = null;
         for (int i = 0; i < numArgs; i++) {
             // load boxed array element:
-            LoadIndexedNode boxedElement = g.add(LoadIndexedNode.create(argumentsArray, ConstantNode.forInt(i, g), Kind.Object));
+            LoadIndexedNode boxedElement = g.add(new LoadIndexedNode(argumentsArray, ConstantNode.forInt(i, g), Kind.Object));
             if (i == 0) {
                 g.start().setNext(boxedElement);
                 last = boxedElement;
@@ -120,15 +120,15 @@
                 int displacement = runtime().getArrayBaseOffset(arrayElementKind);
                 ConstantNode index = ConstantNode.forInt(0, g);
                 int indexScaling = runtime().getArrayIndexScale(arrayElementKind);
-                IndexedLocationNode locationNode = IndexedLocationNode.create(locationIdentity, displacement, index, g, indexScaling);
+                IndexedLocationNode locationNode = g.unique(new IndexedLocationNode(locationIdentity, displacement, index, indexScaling));
                 Stamp wordStamp = StampFactory.forKind(providers.getCodeCache().getTarget().wordKind);
-                ComputeAddressNode arrayAddress = g.unique(ComputeAddressNode.create(boxedElement, locationNode, wordStamp));
+                ComputeAddressNode arrayAddress = g.unique(new ComputeAddressNode(boxedElement, locationNode, wordStamp));
                 args.add(arrayAddress);
             } else {
                 // boxed primitive value
                 try {
                     ResolvedJavaField field = providers.getMetaAccess().lookupJavaField(kind.toBoxedJavaClass().getDeclaredField("value"));
-                    LoadFieldNode loadFieldNode = g.add(LoadFieldNode.create(boxedElement, field));
+                    LoadFieldNode loadFieldNode = g.add(new LoadFieldNode(boxedElement, field));
                     last.setNext(loadFieldNode);
                     last = loadFieldNode;
                     args.add(loadFieldNode);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/AllocaNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/AllocaNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -50,11 +50,7 @@
      */
     protected final BitSet objects;
 
-    public static AllocaNode create(int slots, Kind wordKind, BitSet objects) {
-        return new AllocaNode(slots, wordKind, objects);
-    }
-
-    protected AllocaNode(int slots, Kind wordKind, BitSet objects) {
+    public AllocaNode(int slots, Kind wordKind, BitSet objects) {
         super(StampFactory.forKind(wordKind));
         this.slots = slots;
         this.objects = objects;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/BeginLockScopeNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/BeginLockScopeNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -42,11 +42,7 @@
 
     protected int lockDepth;
 
-    public static BeginLockScopeNode create(int lockDepth) {
-        return new BeginLockScopeNode(lockDepth);
-    }
-
-    protected BeginLockScopeNode(int lockDepth) {
+    public BeginLockScopeNode(int lockDepth) {
         super(null);
         this.lockDepth = lockDepth;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CStringNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CStringNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -36,11 +36,7 @@
 
     protected final String string;
 
-    public static CStringNode create(String string) {
-        return new CStringNode(string);
-    }
-
-    protected CStringNode(String string) {
+    public CStringNode(String string) {
         super(null);
         this.string = string;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassCastNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassCastNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
 @NodeInfo
 public class ClassCastNode extends MacroStateSplitNode implements Canonicalizable.Binary<ValueNode> {
 
-    public static ClassCastNode create(Invoke invoke) {
-        return new ClassCastNode(invoke);
-    }
-
-    protected ClassCastNode(Invoke invoke) {
+    public ClassCastNode(Invoke invoke) {
         super(invoke);
     }
 
@@ -67,7 +63,7 @@
         if (forJavaClass.isConstant()) {
             ResolvedJavaType type = tool.getConstantReflection().asJavaType(forJavaClass.asConstant());
             if (type != null && !type.isPrimitive()) {
-                return CheckCastNode.create(type, forObject, null, false);
+                return new CheckCastNode(type, forObject, null, false);
             }
         }
         return this;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetClassLoader0Node.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetClassLoader0Node.java	Mon Jan 12 20:39:04 2015 +0100
@@ -40,11 +40,7 @@
 @NodeInfo
 public class ClassGetClassLoader0Node extends MacroStateSplitNode implements Canonicalizable {
 
-    public static ClassGetClassLoader0Node create(Invoke invoke) {
-        return new ClassGetClassLoader0Node(invoke);
-    }
-
-    protected ClassGetClassLoader0Node(Invoke invoke) {
+    public ClassGetClassLoader0Node(Invoke invoke) {
         super(invoke);
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetComponentTypeNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetComponentTypeNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -39,11 +39,7 @@
 @NodeInfo
 public class ClassGetComponentTypeNode extends MacroNode implements Canonicalizable {
 
-    public static ClassGetComponentTypeNode create(Invoke invoke) {
-        return new ClassGetComponentTypeNode(invoke);
-    }
-
-    protected ClassGetComponentTypeNode(Invoke invoke) {
+    public ClassGetComponentTypeNode(Invoke invoke) {
         super(invoke);
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetModifiersNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetModifiersNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
 @NodeInfo
 public class ClassGetModifiersNode extends MacroNode implements Canonicalizable {
 
-    public static ClassGetModifiersNode create(Invoke invoke) {
-        return new ClassGetModifiersNode(invoke);
-    }
-
-    protected ClassGetModifiersNode(Invoke invoke) {
+    public ClassGetModifiersNode(Invoke invoke) {
         super(invoke);
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetSuperclassNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetSuperclassNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -39,11 +39,7 @@
 @NodeInfo
 public class ClassGetSuperclassNode extends MacroNode implements Canonicalizable {
 
-    public static ClassGetSuperclassNode create(Invoke invoke) {
-        return new ClassGetSuperclassNode(invoke);
-    }
-
-    protected ClassGetSuperclassNode(Invoke invoke) {
+    public ClassGetSuperclassNode(Invoke invoke) {
         super(invoke);
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsArrayNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsArrayNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
 @NodeInfo
 public class ClassIsArrayNode extends MacroNode implements Canonicalizable {
 
-    public static ClassIsArrayNode create(Invoke invoke) {
-        return new ClassIsArrayNode(invoke);
-    }
-
-    protected ClassIsArrayNode(Invoke invoke) {
+    public ClassIsArrayNode(Invoke invoke) {
         super(invoke);
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsAssignableFromNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsAssignableFromNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -37,11 +37,7 @@
  */
 @NodeInfo
 public class ClassIsAssignableFromNode extends MacroStateSplitNode implements Canonicalizable {
-    public static ClassIsAssignableFromNode create(Invoke invoke) {
-        return new ClassIsAssignableFromNode(invoke);
-    }
-
-    protected ClassIsAssignableFromNode(Invoke invoke) {
+    public ClassIsAssignableFromNode(Invoke invoke) {
         super(invoke);
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInstanceNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInstanceNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -40,11 +40,7 @@
 @NodeInfo
 public class ClassIsInstanceNode extends MacroNode implements Canonicalizable {
 
-    public static ClassIsInstanceNode create(Invoke invoke) {
-        return new ClassIsInstanceNode(invoke);
-    }
-
-    protected ClassIsInstanceNode(Invoke invoke) {
+    public ClassIsInstanceNode(Invoke invoke) {
         super(invoke);
     }
 
@@ -71,8 +67,8 @@
                     JavaConstant c = object.asJavaConstant();
                     return ConstantNode.forBoolean(c.isNonNull() && type.isInstance(c));
                 }
-                InstanceOfNode instanceOf = InstanceOfNode.create(type, object, null);
-                return ConditionalNode.create(instanceOf, ConstantNode.forBoolean(true), ConstantNode.forBoolean(false));
+                InstanceOfNode instanceOf = new InstanceOfNode(type, object, null);
+                return new ConditionalNode(instanceOf, ConstantNode.forBoolean(true), ConstantNode.forBoolean(false));
             }
         }
         return this;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInterfaceNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInterfaceNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
 @NodeInfo
 public class ClassIsInterfaceNode extends MacroNode implements Canonicalizable {
 
-    public static ClassIsInterfaceNode create(Invoke invoke) {
-        return new ClassIsInterfaceNode(invoke);
-    }
-
-    protected ClassIsInterfaceNode(Invoke invoke) {
+    public ClassIsInterfaceNode(Invoke invoke) {
         super(invoke);
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsPrimitiveNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsPrimitiveNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
 @NodeInfo
 public class ClassIsPrimitiveNode extends MacroNode implements Canonicalizable {
 
-    public static ClassIsPrimitiveNode create(Invoke invoke) {
-        return new ClassIsPrimitiveNode(invoke);
-    }
-
-    protected ClassIsPrimitiveNode(Invoke invoke) {
+    public ClassIsPrimitiveNode(Invoke invoke) {
         super(invoke);
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -50,11 +50,7 @@
     protected final CompressionOp op;
     protected final CompressEncoding encoding;
 
-    public static CompressionNode create(CompressionOp op, ValueNode input, CompressEncoding encoding) {
-        return new CompressionNode(op, input, encoding);
-    }
-
-    protected CompressionNode(CompressionOp op, ValueNode input, CompressEncoding encoding) {
+    public CompressionNode(CompressionOp op, ValueNode input, CompressEncoding encoding) {
         super(mkStamp(op, input.stamp(), encoding), input);
         this.op = op;
         this.encoding = encoding;
@@ -66,11 +62,11 @@
     }
 
     public static CompressionNode compress(ValueNode input, CompressEncoding encoding) {
-        return input.graph().unique(CompressionNode.create(CompressionOp.Compress, input, encoding));
+        return input.graph().unique(new CompressionNode(CompressionOp.Compress, input, encoding));
     }
 
     public static CompressionNode uncompress(ValueNode input, CompressEncoding encoding) {
-        return input.graph().unique(CompressionNode.create(CompressionOp.Uncompress, input, encoding));
+        return input.graph().unique(new CompressionNode(CompressionOp.Uncompress, input, encoding));
     }
 
     private static Constant compress(Constant c, CompressEncoding encoding) {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CurrentJavaThreadNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CurrentJavaThreadNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -42,11 +42,7 @@
 
     protected LIRKind wordKind;
 
-    public static CurrentJavaThreadNode create(Kind kind) {
-        return new CurrentJavaThreadNode(kind);
-    }
-
-    protected CurrentJavaThreadNode(Kind kind) {
+    public CurrentJavaThreadNode(Kind kind) {
         super(StampFactory.forKind(kind));
         this.wordKind = LIRKind.value(kind);
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CurrentLockNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CurrentLockNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
 
     protected int lockDepth;
 
-    public static CurrentLockNode create(int lockDepth) {
-        return new CurrentLockNode(lockDepth);
-    }
-
-    protected CurrentLockNode(int lockDepth) {
+    public CurrentLockNode(int lockDepth) {
         super(null);
         this.lockDepth = lockDepth;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizationFetchUnrollInfoCallNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizationFetchUnrollInfoCallNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -44,11 +44,7 @@
     @Input SaveAllRegistersNode registerSaver;
     protected final ForeignCallsProvider foreignCalls;
 
-    public static DeoptimizationFetchUnrollInfoCallNode create(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ValueNode registerSaver) {
-        return new DeoptimizationFetchUnrollInfoCallNode(foreignCalls, registerSaver);
-    }
-
-    protected DeoptimizationFetchUnrollInfoCallNode(ForeignCallsProvider foreignCalls, ValueNode registerSaver) {
+    public DeoptimizationFetchUnrollInfoCallNode(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ValueNode registerSaver) {
         super(StampFactory.forKind(Kind.fromJavaClass(FETCH_UNROLL_INFO.getResultType())));
         this.registerSaver = (SaveAllRegistersNode) registerSaver;
         this.foreignCalls = foreignCalls;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizeCallerNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizeCallerNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
     protected final DeoptimizationAction action;
     protected final DeoptimizationReason reason;
 
-    public static DeoptimizeCallerNode create(DeoptimizationAction action, DeoptimizationReason reason) {
-        return new DeoptimizeCallerNode(action, reason);
-    }
-
-    protected DeoptimizeCallerNode(DeoptimizationAction action, DeoptimizationReason reason) {
+    public DeoptimizeCallerNode(DeoptimizationAction action, DeoptimizationReason reason) {
         super(StampFactory.forVoid());
         this.action = action;
         this.reason = reason;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizingStubCall.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DeoptimizingStubCall.java	Mon Jan 12 20:39:04 2015 +0100
@@ -29,11 +29,7 @@
 @NodeInfo
 public class DeoptimizingStubCall extends DeoptimizingFixedWithNextNode {
 
-    public static DeoptimizingStubCall create(Stamp stamp) {
-        return new DeoptimizingStubCall(stamp);
-    }
-
-    protected DeoptimizingStubCall(Stamp stamp) {
+    public DeoptimizingStubCall(Stamp stamp) {
         super(stamp);
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DimensionsNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DimensionsNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -43,11 +43,7 @@
 
     protected final int rank;
 
-    public static DimensionsNode create(int rank) {
-        return new DimensionsNode(rank);
-    }
-
-    protected DimensionsNode(int rank) {
+    public DimensionsNode(int rank) {
         super(null);
         this.rank = rank;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DirectCompareAndSwapNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/DirectCompareAndSwapNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -47,11 +47,7 @@
 
     protected final LocationIdentity locationIdentity;
 
-    public static DirectCompareAndSwapNode create(ValueNode object, ValueNode offset, ValueNode expected, ValueNode newValue, LocationIdentity locationIdentity) {
-        return new DirectCompareAndSwapNode(object, offset, expected, newValue, locationIdentity);
-    }
-
-    protected DirectCompareAndSwapNode(ValueNode object, ValueNode offset, ValueNode expected, ValueNode newValue, LocationIdentity locationIdentity) {
+    public DirectCompareAndSwapNode(ValueNode object, ValueNode offset, ValueNode expected, ValueNode newValue, LocationIdentity locationIdentity) {
         super(expected.stamp());
         this.object = object;
         this.offset = offset;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EndLockScopeNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EndLockScopeNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -36,11 +36,7 @@
 @NodeInfo(allowedUsageTypes = {InputType.Memory})
 public class EndLockScopeNode extends AbstractMemoryCheckpoint implements LIRLowerable, MonitorExit, MemoryCheckpoint.Single {
 
-    public static EndLockScopeNode create() {
-        return new EndLockScopeNode();
-    }
-
-    protected EndLockScopeNode() {
+    public EndLockScopeNode() {
         super(StampFactory.forVoid());
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EnterUnpackFramesStackFrameNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/EnterUnpackFramesStackFrameNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -43,11 +43,7 @@
     @Input ValueNode senderFp;
     @Input SaveAllRegistersNode registerSaver;
 
-    public static EnterUnpackFramesStackFrameNode create(ValueNode framePc, ValueNode senderSp, ValueNode senderFp, ValueNode registerSaver) {
-        return new EnterUnpackFramesStackFrameNode(framePc, senderSp, senderFp, registerSaver);
-    }
-
-    protected EnterUnpackFramesStackFrameNode(ValueNode framePc, ValueNode senderSp, ValueNode senderFp, ValueNode registerSaver) {
+    public EnterUnpackFramesStackFrameNode(ValueNode framePc, ValueNode senderSp, ValueNode senderFp, ValueNode registerSaver) {
         super(StampFactory.forVoid());
         this.framePc = framePc;
         this.senderSp = senderSp;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1ArrayRangePostWriteBarrier.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1ArrayRangePostWriteBarrier.java	Mon Jan 12 20:39:04 2015 +0100
@@ -28,11 +28,8 @@
 @NodeInfo
 public class G1ArrayRangePostWriteBarrier extends ArrayRangeWriteBarrier {
 
-    public static G1ArrayRangePostWriteBarrier create(ValueNode object, ValueNode startIndex, ValueNode length) {
-        return new G1ArrayRangePostWriteBarrier(object, startIndex, length);
+    public G1ArrayRangePostWriteBarrier(ValueNode object, ValueNode startIndex, ValueNode length) {
+        super(object, startIndex, length);
     }
 
-    protected G1ArrayRangePostWriteBarrier(ValueNode object, ValueNode startIndex, ValueNode length) {
-        super(object, startIndex, length);
-    }
 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1ArrayRangePreWriteBarrier.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1ArrayRangePreWriteBarrier.java	Mon Jan 12 20:39:04 2015 +0100
@@ -28,11 +28,8 @@
 @NodeInfo
 public class G1ArrayRangePreWriteBarrier extends ArrayRangeWriteBarrier {
 
-    public static G1ArrayRangePreWriteBarrier create(ValueNode object, ValueNode startIndex, ValueNode length) {
-        return new G1ArrayRangePreWriteBarrier(object, startIndex, length);
+    public G1ArrayRangePreWriteBarrier(ValueNode object, ValueNode startIndex, ValueNode length) {
+        super(object, startIndex, length);
     }
 
-    protected G1ArrayRangePreWriteBarrier(ValueNode object, ValueNode startIndex, ValueNode length) {
-        super(object, startIndex, length);
-    }
 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1PostWriteBarrier.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1PostWriteBarrier.java	Mon Jan 12 20:39:04 2015 +0100
@@ -31,11 +31,7 @@
 
     protected final boolean alwaysNull;
 
-    public static G1PostWriteBarrier create(ValueNode object, ValueNode value, LocationNode location, boolean precise, boolean alwaysNull) {
-        return new G1PostWriteBarrier(object, value, location, precise, alwaysNull);
-    }
-
-    protected G1PostWriteBarrier(ValueNode object, ValueNode value, LocationNode location, boolean precise, boolean alwaysNull) {
+    public G1PostWriteBarrier(ValueNode object, ValueNode value, LocationNode location, boolean precise, boolean alwaysNull) {
         super(object, value, location, precise);
         this.alwaysNull = alwaysNull;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1PreWriteBarrier.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1PreWriteBarrier.java	Mon Jan 12 20:39:04 2015 +0100
@@ -33,11 +33,7 @@
     protected final boolean nullCheck;
     protected final boolean doLoad;
 
-    public static G1PreWriteBarrier create(ValueNode object, ValueNode expectedObject, LocationNode location, boolean doLoad, boolean nullCheck) {
-        return new G1PreWriteBarrier(object, expectedObject, location, doLoad, nullCheck);
-    }
-
-    protected G1PreWriteBarrier(ValueNode object, ValueNode expectedObject, LocationNode location, boolean doLoad, boolean nullCheck) {
+    public G1PreWriteBarrier(ValueNode object, ValueNode expectedObject, LocationNode location, boolean doLoad, boolean nullCheck) {
         super(object, expectedObject, location, true);
         this.doLoad = doLoad;
         this.nullCheck = nullCheck;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1ReferentFieldReadBarrier.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/G1ReferentFieldReadBarrier.java	Mon Jan 12 20:39:04 2015 +0100
@@ -37,11 +37,7 @@
 
     protected final boolean doLoad;
 
-    public static G1ReferentFieldReadBarrier create(ValueNode object, ValueNode expectedObject, LocationNode location, boolean doLoad) {
-        return new G1ReferentFieldReadBarrier(object, expectedObject, location, doLoad);
-    }
-
-    protected G1ReferentFieldReadBarrier(ValueNode object, ValueNode expectedObject, LocationNode location, boolean doLoad) {
+    public G1ReferentFieldReadBarrier(ValueNode object, ValueNode expectedObject, LocationNode location, boolean doLoad) {
         super(object, expectedObject, location, true);
         this.doLoad = doLoad;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/GetObjectAddressNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/GetObjectAddressNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
 
     @Input ValueNode object;
 
-    public static GetObjectAddressNode create(ValueNode obj) {
-        return new GetObjectAddressNode(obj);
-    }
-
-    protected GetObjectAddressNode(ValueNode obj) {
+    public GetObjectAddressNode(ValueNode obj) {
         super(StampFactory.forKind(Kind.Long));
         this.object = obj;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotDirectCallTargetNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotDirectCallTargetNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,11 +32,8 @@
 
 @NodeInfo
 public class HotSpotDirectCallTargetNode extends DirectCallTargetNode {
-    public static HotSpotDirectCallTargetNode create(List<ValueNode> arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, Type callType, InvokeKind invokeKind) {
-        return new HotSpotDirectCallTargetNode(arguments, returnStamp, signature, target, callType, invokeKind);
+    public HotSpotDirectCallTargetNode(List<ValueNode> arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, Type callType, InvokeKind invokeKind) {
+        super(arguments, returnStamp, signature, target, callType, invokeKind);
     }
 
-    protected HotSpotDirectCallTargetNode(List<ValueNode> arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, Type callType, InvokeKind invokeKind) {
-        super(arguments, returnStamp, signature, target, callType, invokeKind);
-    }
 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotIndirectCallTargetNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/HotSpotIndirectCallTargetNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,12 +35,7 @@
 
     @Input ValueNode metaspaceMethod;
 
-    public static HotSpotIndirectCallTargetNode create(ValueNode metaspaceMethod, ValueNode computedAddress, List<ValueNode> arguments, Stamp returnStamp, JavaType[] signature,
-                    ResolvedJavaMethod target, Type callType, InvokeKind invokeKind) {
-        return new HotSpotIndirectCallTargetNode(metaspaceMethod, computedAddress, arguments, returnStamp, signature, target, callType, invokeKind);
-    }
-
-    protected HotSpotIndirectCallTargetNode(ValueNode metaspaceMethod, ValueNode computedAddress, List<ValueNode> arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target,
+    public HotSpotIndirectCallTargetNode(ValueNode metaspaceMethod, ValueNode computedAddress, List<ValueNode> arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target,
                     Type callType, InvokeKind invokeKind) {
         super(computedAddress, arguments, returnStamp, signature, target, callType, invokeKind);
         this.metaspaceMethod = metaspaceMethod;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/JumpToExceptionHandlerInCallerNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/JumpToExceptionHandlerInCallerNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -40,11 +40,7 @@
     @Input ValueNode exception;
     @Input ValueNode exceptionPc;
 
-    public static JumpToExceptionHandlerInCallerNode create(ValueNode handlerInCallerPc, ValueNode exception, ValueNode exceptionPc) {
-        return new JumpToExceptionHandlerInCallerNode(handlerInCallerPc, exception, exceptionPc);
-    }
-
-    protected JumpToExceptionHandlerInCallerNode(ValueNode handlerInCallerPc, ValueNode exception, ValueNode exceptionPc) {
+    public JumpToExceptionHandlerInCallerNode(ValueNode handlerInCallerPc, ValueNode exception, ValueNode exceptionPc) {
         super(StampFactory.forVoid());
         this.handlerInCallerPc = handlerInCallerPc;
         this.exception = exception;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LeaveCurrentStackFrameNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LeaveCurrentStackFrameNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
 
     @Input SaveAllRegistersNode registerSaver;
 
-    public static LeaveCurrentStackFrameNode create(ValueNode registerSaver) {
-        return new LeaveCurrentStackFrameNode(registerSaver);
-    }
-
-    protected LeaveCurrentStackFrameNode(ValueNode registerSaver) {
+    public LeaveCurrentStackFrameNode(ValueNode registerSaver) {
         super(StampFactory.forVoid());
         this.registerSaver = (SaveAllRegistersNode) registerSaver;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LeaveDeoptimizedStackFrameNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LeaveDeoptimizedStackFrameNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -41,11 +41,7 @@
     @Input ValueNode frameSize;
     @Input ValueNode initialInfo;
 
-    public static LeaveDeoptimizedStackFrameNode create(ValueNode frameSize, ValueNode initialInfo) {
-        return new LeaveDeoptimizedStackFrameNode(frameSize, initialInfo);
-    }
-
-    protected LeaveDeoptimizedStackFrameNode(ValueNode frameSize, ValueNode initialInfo) {
+    public LeaveDeoptimizedStackFrameNode(ValueNode frameSize, ValueNode initialInfo) {
         super(StampFactory.forVoid());
         this.frameSize = frameSize;
         this.initialInfo = initialInfo;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LeaveUnpackFramesStackFrameNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LeaveUnpackFramesStackFrameNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
 
     @Input SaveAllRegistersNode registerSaver;
 
-    public static LeaveUnpackFramesStackFrameNode create(ValueNode registerSaver) {
-        return new LeaveUnpackFramesStackFrameNode(registerSaver);
-    }
-
-    protected LeaveUnpackFramesStackFrameNode(ValueNode registerSaver) {
+    public LeaveUnpackFramesStackFrameNode(ValueNode registerSaver) {
         super(StampFactory.forVoid());
         this.registerSaver = (SaveAllRegistersNode) registerSaver;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LoadIndexedPointerNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/LoadIndexedPointerNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -31,11 +31,7 @@
 @NodeInfo
 public class LoadIndexedPointerNode extends LoadIndexedNode {
 
-    public static LoadIndexedPointerNode create(Stamp stamp, ValueNode array, ValueNode index) {
-        return new LoadIndexedPointerNode(stamp, array, index);
-    }
-
-    protected LoadIndexedPointerNode(Stamp stamp, ValueNode array, ValueNode index) {
+    public LoadIndexedPointerNode(Stamp stamp, ValueNode array, ValueNode index) {
         super(stamp, array, index, Kind.Illegal);
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/MonitorCounterNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/MonitorCounterNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -37,11 +37,7 @@
 @NodeInfo
 public class MonitorCounterNode extends FloatingNode implements LIRLowerable {
 
-    public static MonitorCounterNode create() {
-        return new MonitorCounterNode();
-    }
-
-    protected MonitorCounterNode() {
+    public MonitorCounterNode() {
         super(null);
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewArrayStubCall.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewArrayStubCall.java	Mon Jan 12 20:39:04 2015 +0100
@@ -45,11 +45,7 @@
     @Input ValueNode hub;
     @Input ValueNode length;
 
-    public static NewArrayStubCall create(ValueNode hub, ValueNode length) {
-        return new NewArrayStubCall(hub, length);
-    }
-
-    protected NewArrayStubCall(ValueNode hub, ValueNode length) {
+    public NewArrayStubCall(ValueNode hub, ValueNode length) {
         super(defaultStamp);
         this.hub = hub;
         this.length = length;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewInstanceStubCall.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewInstanceStubCall.java	Mon Jan 12 20:39:04 2015 +0100
@@ -44,11 +44,7 @@
 
     @Input ValueNode hub;
 
-    public static NewInstanceStubCall create(ValueNode hub) {
-        return new NewInstanceStubCall(hub);
-    }
-
-    protected NewInstanceStubCall(ValueNode hub) {
+    public NewInstanceStubCall(ValueNode hub) {
         super(defaultStamp);
         this.hub = hub;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewMultiArrayStubCall.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewMultiArrayStubCall.java	Mon Jan 12 20:39:04 2015 +0100
@@ -46,11 +46,7 @@
     @Input ValueNode dims;
     protected final int rank;
 
-    public static NewMultiArrayStubCall create(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ValueNode hub, int rank, ValueNode dims) {
-        return new NewMultiArrayStubCall(foreignCalls, hub, rank, dims);
-    }
-
-    protected NewMultiArrayStubCall(ForeignCallsProvider foreignCalls, ValueNode hub, int rank, ValueNode dims) {
+    public NewMultiArrayStubCall(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ValueNode hub, int rank, ValueNode dims) {
         super(foreignCalls, NEW_MULTI_ARRAY, defaultStamp);
         this.hub = hub;
         this.rank = rank;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PatchReturnAddressNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PatchReturnAddressNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -37,11 +37,7 @@
 
     @Input ValueNode address;
 
-    public static PatchReturnAddressNode create(ValueNode address) {
-        return new PatchReturnAddressNode(address);
-    }
-
-    protected PatchReturnAddressNode(ValueNode address) {
+    public PatchReturnAddressNode(ValueNode address) {
         super(StampFactory.forVoid());
         this.address = address;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PrefetchAllocateNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PrefetchAllocateNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -36,11 +36,7 @@
     @Input ValueNode distance;
     @Input ValueNode address;
 
-    public static PrefetchAllocateNode create(ValueNode address, ValueNode distance) {
-        return new PrefetchAllocateNode(address, distance);
-    }
-
-    protected PrefetchAllocateNode(ValueNode address, ValueNode distance) {
+    public PrefetchAllocateNode(ValueNode address, ValueNode distance) {
         super(StampFactory.forVoid());
         this.address = address;
         this.distance = distance;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PushInterpreterFrameNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/PushInterpreterFrameNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -41,11 +41,7 @@
     @Input ValueNode senderSp;
     @Input ValueNode initialInfo;
 
-    public static PushInterpreterFrameNode create(ValueNode frameSize, ValueNode framePc, ValueNode senderSp, ValueNode initialInfo) {
-        return new PushInterpreterFrameNode(frameSize, framePc, senderSp, initialInfo);
-    }
-
-    protected PushInterpreterFrameNode(ValueNode frameSize, ValueNode framePc, ValueNode senderSp, ValueNode initialInfo) {
+    public PushInterpreterFrameNode(ValueNode frameSize, ValueNode framePc, ValueNode senderSp, ValueNode initialInfo) {
         super(StampFactory.forVoid());
         this.frameSize = frameSize;
         this.framePc = framePc;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SaveAllRegistersNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SaveAllRegistersNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -39,11 +39,7 @@
 
     protected SaveRegistersOp saveRegistersOp;
 
-    public static SaveAllRegistersNode create() {
-        return new SaveAllRegistersNode();
-    }
-
-    protected SaveAllRegistersNode() {
+    public SaveAllRegistersNode() {
         super(StampFactory.forKind(Kind.Long));
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SerialArrayRangeWriteBarrier.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SerialArrayRangeWriteBarrier.java	Mon Jan 12 20:39:04 2015 +0100
@@ -28,11 +28,8 @@
 @NodeInfo
 public class SerialArrayRangeWriteBarrier extends ArrayRangeWriteBarrier {
 
-    public static SerialArrayRangeWriteBarrier create(ValueNode object, ValueNode startIndex, ValueNode length) {
-        return new SerialArrayRangeWriteBarrier(object, startIndex, length);
+    public SerialArrayRangeWriteBarrier(ValueNode object, ValueNode startIndex, ValueNode length) {
+        super(object, startIndex, length);
     }
 
-    protected SerialArrayRangeWriteBarrier(ValueNode object, ValueNode startIndex, ValueNode length) {
-        super(object, startIndex, length);
-    }
 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SerialWriteBarrier.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SerialWriteBarrier.java	Mon Jan 12 20:39:04 2015 +0100
@@ -31,11 +31,7 @@
 
     protected final boolean alwaysNull;
 
-    public static SerialWriteBarrier create(ValueNode object, LocationNode location, boolean precise, boolean alwaysNull) {
-        return new SerialWriteBarrier(object, location, precise, alwaysNull);
-    }
-
-    protected SerialWriteBarrier(ValueNode object, LocationNode location, boolean precise, boolean alwaysNull) {
+    public SerialWriteBarrier(ValueNode object, LocationNode location, boolean precise, boolean alwaysNull) {
         super(object, null, location, precise);
         this.alwaysNull = alwaysNull;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SnippetAnchorNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SnippetAnchorNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -31,11 +31,7 @@
 @NodeInfo(allowedUsageTypes = {InputType.Value, InputType.Anchor, InputType.Guard})
 public class SnippetAnchorNode extends FixedWithNextNode implements Simplifiable, GuardingNode {
 
-    public static SnippetAnchorNode create() {
-        return new SnippetAnchorNode();
-    }
-
-    protected SnippetAnchorNode() {
+    public SnippetAnchorNode() {
         super(StampFactory.object());
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SnippetLocationProxyNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/SnippetLocationProxyNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,11 +35,7 @@
 
     @Input(InputType.Unchecked) ValueNode location;
 
-    public static SnippetLocationProxyNode create(ValueNode location) {
-        return new SnippetLocationProxyNode(location);
-    }
-
-    protected SnippetLocationProxyNode(ValueNode location) {
+    public SnippetLocationProxyNode(ValueNode location) {
         super(StampFactory.object());
         this.location = location;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/StubForeignCallNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/StubForeignCallNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -45,11 +45,7 @@
 
     protected final ForeignCallDescriptor descriptor;
 
-    public static StubForeignCallNode create(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, ValueNode... arguments) {
-        return new StubForeignCallNode(foreignCalls, descriptor, arguments);
-    }
-
-    protected StubForeignCallNode(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, ValueNode... arguments) {
+    public StubForeignCallNode(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, ValueNode... arguments) {
         super(StampFactory.forKind(Kind.fromJavaClass(descriptor.getResultType())));
         this.arguments = new NodeInputList<>(this, arguments);
         this.descriptor = descriptor;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/StubStartNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/StubStartNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -34,11 +34,7 @@
 
     protected final Stub stub;
 
-    public static StubStartNode create(Stub stub) {
-        return new StubStartNode(stub);
-    }
-
-    protected StubStartNode(Stub stub) {
+    public StubStartNode(Stub stub) {
         this.stub = stub;
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/TailcallNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/TailcallNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -46,17 +46,7 @@
     @Input(InputType.State) FrameState frameState;
     @Input ValueNode target;
 
-    /**
-     * Creates a TailcallNode.
-     *
-     * @param target points to the start of an nmethod
-     * @param frameState the parameters will be taken from this FrameState
-     */
-    public static TailcallNode create(ValueNode target, FrameState frameState) {
-        return new TailcallNode(target, frameState);
-    }
-
-    protected TailcallNode(ValueNode target, FrameState frameState) {
+    public TailcallNode(ValueNode target, FrameState frameState) {
         super(StampFactory.forVoid());
         this.target = target;
         this.frameState = frameState;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/UncommonTrapCallNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/UncommonTrapCallNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -45,11 +45,7 @@
     @Input SaveAllRegistersNode registerSaver;
     protected final ForeignCallsProvider foreignCalls;
 
-    public static UncommonTrapCallNode create(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ValueNode registerSaver, ValueNode trapRequest) {
-        return new UncommonTrapCallNode(foreignCalls, registerSaver, trapRequest);
-    }
-
-    protected UncommonTrapCallNode(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ValueNode registerSaver, ValueNode trapRequest) {
+    public UncommonTrapCallNode(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ValueNode registerSaver, ValueNode trapRequest) {
         super(StampFactory.forKind(Kind.fromJavaClass(UNCOMMON_TRAP.getResultType())));
         this.trapRequest = trapRequest;
         this.registerSaver = (SaveAllRegistersNode) registerSaver;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VMErrorNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/VMErrorNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -43,11 +43,7 @@
     protected final String format;
     @Input ValueNode value;
 
-    public static VMErrorNode create(String format, ValueNode value) {
-        return new VMErrorNode(format, value);
-    }
-
-    protected VMErrorNode(String format, ValueNode value) {
+    public VMErrorNode(String format, ValueNode value) {
         super(StampFactory.forVoid());
         this.format = format;
         this.value = value;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/LoadJavaMirrorWithKlassPhase.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/LoadJavaMirrorWithKlassPhase.java	Mon Jan 12 20:39:04 2015 +0100
@@ -70,7 +70,7 @@
                 Constant klass;
                 LocationNode location;
                 if (type instanceof HotSpotResolvedObjectType) {
-                    location = ConstantLocationNode.create(CLASS_MIRROR_LOCATION, classMirrorOffset, graph);
+                    location = graph.unique(new ConstantLocationNode(CLASS_MIRROR_LOCATION, classMirrorOffset));
                     klass = ((HotSpotResolvedObjectType) type).klass();
                 } else {
                     /*
@@ -91,12 +91,12 @@
                     if (typeField == null) {
                         throw new GraalInternalError("Can't find TYPE field in class");
                     }
-                    location = ConstantLocationNode.create(FINAL_LOCATION, typeField.offset(), graph);
+                    location = graph.unique(new ConstantLocationNode(FINAL_LOCATION, typeField.offset()));
                 }
                 ConstantNode klassNode = ConstantNode.forConstant(KlassPointerStamp.klassNonNull(), klass, metaAccess, graph);
 
                 Stamp stamp = StampFactory.exactNonNull(metaAccess.lookupJavaType(Class.class));
-                FloatingReadNode freadNode = graph.unique(FloatingReadNode.create(klassNode, location, null, stamp));
+                FloatingReadNode freadNode = graph.unique(new FloatingReadNode(klassNode, location, null, stamp));
 
                 if (((HotSpotObjectConstant) constant).isCompressed()) {
                     return CompressionNode.compress(freadNode, oopEncoding);
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/OnStackReplacementPhase.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/OnStackReplacementPhase.java	Mon Jan 12 20:39:04 2015 +0100
@@ -86,7 +86,7 @@
 
         FrameState osrState = osr.stateAfter();
         osr.setStateAfter(null);
-        OSRStartNode osrStart = graph.add(OSRStartNode.create());
+        OSRStartNode osrStart = graph.add(new OSRStartNode());
         StartNode start = graph.start();
         FixedNode next = osr.next();
         osr.setNext(null);
@@ -102,7 +102,7 @@
                  * we need to drop the stamp since the types we see during OSR may be too precise
                  * (if a branch was not parsed for example).
                  */
-                proxy.replaceAndDelete(graph.unique(OSRLocalNode.create(i, proxy.stamp().unrestricted())));
+                proxy.replaceAndDelete(graph.unique(new OSRLocalNode(i, proxy.stamp().unrestricted())));
             } else {
                 assert value == null || value instanceof OSRLocalNode;
             }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.java	Mon Jan 12 20:39:04 2015 +0100
@@ -65,7 +65,7 @@
     private void addReadNodeBarriers(ReadNode node, StructuredGraph graph) {
         if (node.getBarrierType() == BarrierType.PRECISE) {
             assert config.useG1GC;
-            G1ReferentFieldReadBarrier barrier = graph.add(G1ReferentFieldReadBarrier.create(node.object(), node, node.location(), false));
+            G1ReferentFieldReadBarrier barrier = graph.add(new G1ReferentFieldReadBarrier(node.object(), node, node.location(), false));
             graph.addAfterFixed(node, barrier);
         } else {
             assert node.getBarrierType() == BarrierType.NONE : "Non precise read barrier has been attached to read node.";
@@ -73,7 +73,7 @@
     }
 
     protected static void addG1PreWriteBarrier(FixedAccessNode node, ValueNode object, ValueNode value, LocationNode location, boolean doLoad, boolean nullCheck, StructuredGraph graph) {
-        G1PreWriteBarrier preBarrier = graph.add(G1PreWriteBarrier.create(object, value, location, doLoad, nullCheck));
+        G1PreWriteBarrier preBarrier = graph.add(new G1PreWriteBarrier(object, value, location, doLoad, nullCheck));
         preBarrier.setStateBefore(node.stateBefore());
         node.setNullCheck(false);
         node.setStateBefore(null);
@@ -82,13 +82,13 @@
 
     protected void addG1PostWriteBarrier(FixedAccessNode node, ValueNode object, ValueNode value, LocationNode location, boolean precise, StructuredGraph graph) {
         final boolean alwaysNull = StampTool.isPointerAlwaysNull(value);
-        graph.addAfterFixed(node, graph.add(G1PostWriteBarrier.create(object, value, location, precise, alwaysNull)));
+        graph.addAfterFixed(node, graph.add(new G1PostWriteBarrier(object, value, location, precise, alwaysNull)));
     }
 
     protected void addSerialPostWriteBarrier(FixedAccessNode node, ValueNode object, ValueNode value, LocationNode location, boolean precise, StructuredGraph graph) {
         final boolean alwaysNull = StampTool.isPointerAlwaysNull(value);
         final LocationNode loc = (precise ? location : null);
-        graph.addAfterFixed(node, graph.add(SerialWriteBarrier.create(object, loc, precise, alwaysNull)));
+        graph.addAfterFixed(node, graph.add(new SerialWriteBarrier(object, loc, precise, alwaysNull)));
     }
 
     private void addWriteNodeBarriers(WriteNode node, StructuredGraph graph) {
@@ -159,13 +159,13 @@
     private void addArrayRangeBarriers(ArrayRangeWriteNode node, StructuredGraph graph) {
         if (config.useG1GC) {
             if (!node.isInitialization()) {
-                G1ArrayRangePreWriteBarrier g1ArrayRangePreWriteBarrier = graph.add(G1ArrayRangePreWriteBarrier.create(node.getArray(), node.getIndex(), node.getLength()));
+                G1ArrayRangePreWriteBarrier g1ArrayRangePreWriteBarrier = graph.add(new G1ArrayRangePreWriteBarrier(node.getArray(), node.getIndex(), node.getLength()));
                 graph.addBeforeFixed(node, g1ArrayRangePreWriteBarrier);
             }
-            G1ArrayRangePostWriteBarrier g1ArrayRangePostWriteBarrier = graph.add(G1ArrayRangePostWriteBarrier.create(node.getArray(), node.getIndex(), node.getLength()));
+            G1ArrayRangePostWriteBarrier g1ArrayRangePostWriteBarrier = graph.add(new G1ArrayRangePostWriteBarrier(node.getArray(), node.getIndex(), node.getLength()));
             graph.addAfterFixed(node, g1ArrayRangePostWriteBarrier);
         } else {
-            SerialArrayRangeWriteBarrier serialArrayRangeWriteBarrier = graph.add(SerialArrayRangeWriteBarrier.create(node.getArray(), node.getIndex(), node.getLength()));
+            SerialArrayRangeWriteBarrier serialArrayRangeWriteBarrier = graph.add(new SerialArrayRangeWriteBarrier(node.getArray(), node.getIndex(), node.getLength()));
             graph.addAfterFixed(node, serialArrayRangeWriteBarrier);
         }
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CallSiteTargetNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,11 +35,7 @@
 @NodeInfo
 public class CallSiteTargetNode extends MacroStateSplitNode implements Canonicalizable, Lowerable {
 
-    public static CallSiteTargetNode create(Invoke invoke) {
-        return new CallSiteTargetNode(invoke);
-    }
-
-    protected CallSiteTargetNode(Invoke invoke) {
+    public CallSiteTargetNode(Invoke invoke) {
         super(invoke);
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CardTableAddressNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CardTableAddressNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,11 +32,7 @@
 @NodeInfo
 public class CardTableAddressNode extends FloatingNode implements LIRLowerable {
 
-    public static CardTableAddressNode create() {
-        return new CardTableAddressNode();
-    }
-
-    protected CardTableAddressNode() {
+    public CardTableAddressNode() {
         super(StampFactory.forKind(Kind.Long));
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CardTableShiftNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CardTableShiftNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,11 +32,7 @@
 @NodeInfo
 public class CardTableShiftNode extends FloatingNode implements LIRLowerable {
 
-    public static CardTableShiftNode create() {
-        return new CardTableShiftNode();
-    }
-
-    protected CardTableShiftNode() {
+    public CardTableShiftNode() {
         super(StampFactory.intValue());
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ClassGetHubNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ClassGetHubNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -45,15 +45,11 @@
 public class ClassGetHubNode extends FloatingGuardedNode implements Lowerable, Canonicalizable, ConvertNode {
     @Input protected ValueNode clazz;
 
-    public static ClassGetHubNode create(ValueNode clazz) {
-        return new ClassGetHubNode(clazz, null);
+    public ClassGetHubNode(ValueNode clazz) {
+        this(clazz, null);
     }
 
-    public static ClassGetHubNode create(ValueNode clazz, ValueNode guard) {
-        return new ClassGetHubNode(clazz, guard);
-    }
-
-    protected ClassGetHubNode(ValueNode clazz, ValueNode guard) {
+    public ClassGetHubNode(ValueNode clazz, ValueNode guard) {
         super(KlassPointerStamp.klass(), (GuardingNode) guard);
         this.clazz = clazz;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CompositeValueClassSubstitutions.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CompositeValueClassSubstitutions.java	Mon Jan 12 20:39:04 2015 +0100
@@ -47,11 +47,7 @@
     @NodeInfo
     public static class CompositeValueClassGetNode extends PureFunctionMacroNode {
 
-        public static CompositeValueClassGetNode create(Invoke invoke) {
-            return new CompositeValueClassGetNode(invoke);
-        }
-
-        protected CompositeValueClassGetNode(Invoke invoke) {
+        public CompositeValueClassGetNode(Invoke invoke) {
             super(invoke);
         }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotNodeClassSubstitutions.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotNodeClassSubstitutions.java	Mon Jan 12 20:39:04 2015 +0100
@@ -47,11 +47,7 @@
     @NodeInfo
     public static class NodeClassGetNode extends PureFunctionMacroNode {
 
-        public static NodeClassGetNode create(Invoke invoke) {
-            return new NodeClassGetNode(invoke);
-        }
-
-        protected NodeClassGetNode(Invoke invoke) {
+        public NodeClassGetNode(Invoke invoke) {
             super(invoke);
         }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HubGetClassNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HubGetClassNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -41,11 +41,7 @@
 public class HubGetClassNode extends FloatingGuardedNode implements Lowerable, Canonicalizable, ConvertNode {
     @Input protected ValueNode hub;
 
-    public static HubGetClassNode create(@InjectedNodeParameter MetaAccessProvider metaAccess, ValueNode hub) {
-        return new HubGetClassNode(hub, metaAccess);
-    }
-
-    protected HubGetClassNode(ValueNode hub, MetaAccessProvider metaAccess) {
+    protected HubGetClassNode(@InjectedNodeParameter MetaAccessProvider metaAccess, ValueNode hub) {
         super(StampFactory.declaredNonNull(metaAccess.lookupJavaType(Class.class)), null);
         this.hub = hub;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/KlassLayoutHelperNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/KlassLayoutHelperNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -43,15 +43,11 @@
     @Input protected ValueNode klass;
     protected final HotSpotVMConfig config;
 
-    public static KlassLayoutHelperNode create(@InjectedNodeParameter HotSpotVMConfig config, ValueNode klass) {
-        return new KlassLayoutHelperNode(config, klass, null);
+    public KlassLayoutHelperNode(@InjectedNodeParameter HotSpotVMConfig config, ValueNode klass) {
+        this(config, klass, null);
     }
 
-    public static KlassLayoutHelperNode create(@InjectedNodeParameter HotSpotVMConfig config, ValueNode klass, ValueNode guard) {
-        return new KlassLayoutHelperNode(config, klass, guard);
-    }
-
-    protected KlassLayoutHelperNode(HotSpotVMConfig config, ValueNode klass, ValueNode guard) {
+    public KlassLayoutHelperNode(@InjectedNodeParameter HotSpotVMConfig config, ValueNode klass, ValueNode guard) {
         super(StampFactory.forKind(Kind.Int), (GuardingNode) guard);
         this.klass = klass;
         this.config = config;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/LoadExceptionObjectSnippets.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/LoadExceptionObjectSnippets.java	Mon Jan 12 20:39:04 2015 +0100
@@ -78,9 +78,9 @@
         public void lower(LoadExceptionObjectNode loadExceptionObject, HotSpotRegistersProvider registers, LoweringTool tool) {
             if (USE_C_RUNTIME) {
                 StructuredGraph graph = loadExceptionObject.graph();
-                ReadRegisterNode thread = graph.add(ReadRegisterNode.create(registers.getThreadRegister(), true, false));
+                ReadRegisterNode thread = graph.add(new ReadRegisterNode(registers.getThreadRegister(), true, false));
                 graph.addBeforeFixed(loadExceptionObject, thread);
-                ForeignCallNode loadExceptionC = graph.add(ForeignCallNode.create(providers.getForeignCalls(), LOAD_AND_CLEAR_EXCEPTION, thread));
+                ForeignCallNode loadExceptionC = graph.add(new ForeignCallNode(providers.getForeignCalls(), LOAD_AND_CLEAR_EXCEPTION, thread));
                 loadExceptionC.setStateAfter(loadExceptionObject.stateAfter());
                 graph.replaceFixedWithFixed(loadExceptionObject, loadExceptionC);
             } else {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MethodHandleNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MethodHandleNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -50,15 +50,9 @@
     protected JavaType replacementReturnType;
     @Input NodeInputList<ValueNode> replacementArguments;
 
-    public static MethodHandleNode create(Invoke invoke) {
-        return new MethodHandleNode(invoke);
-    }
-
-    protected MethodHandleNode(Invoke invoke) {
+    public MethodHandleNode(Invoke invoke) {
         super(invoke);
-
         MethodCallTargetNode callTarget = (MethodCallTargetNode) invoke.callTarget();
-
         // See if we need to save some replacement method data.
         if (callTarget instanceof SelfReplacingMethodCallTargetNode) {
             SelfReplacingMethodCallTargetNode selfReplacingMethodCallTargetNode = (SelfReplacingMethodCallTargetNode) callTarget;
@@ -221,7 +215,7 @@
                 ValueNode argument = arguments.get(index);
                 ResolvedJavaType argumentType = StampTool.typeOrNull(argument.stamp());
                 if (argumentType == null || (argumentType.isAssignableFrom(targetType) && !argumentType.equals(targetType))) {
-                    PiNode piNode = graph().unique(PiNode.create(argument, StampFactory.declared(targetType)));
+                    PiNode piNode = graph().unique(new PiNode(argument, StampFactory.declared(targetType)));
                     arguments.set(index, piNode);
                 }
             }
@@ -260,10 +254,10 @@
         // If there is already replacement information, use that instead.
         MethodCallTargetNode callTarget;
         if (replacementTargetMethod == null) {
-            callTarget = SelfReplacingMethodCallTargetNode.create(targetInvokeKind, target, targetArguments, targetReturnType, getTargetMethod(), originalArguments, getReturnType());
+            callTarget = new SelfReplacingMethodCallTargetNode(targetInvokeKind, target, targetArguments, targetReturnType, getTargetMethod(), originalArguments, getReturnType());
         } else {
             ValueNode[] args = replacementArguments.toArray(new ValueNode[replacementArguments.size()]);
-            callTarget = SelfReplacingMethodCallTargetNode.create(targetInvokeKind, target, targetArguments, targetReturnType, replacementTargetMethod, args, replacementReturnType);
+            callTarget = new SelfReplacingMethodCallTargetNode(targetInvokeKind, target, targetArguments, targetReturnType, replacementTargetMethod, args, replacementReturnType);
         }
         graph().add(callTarget);
 
@@ -274,9 +268,9 @@
         // (usually java.lang.Object).
         InvokeNode invoke;
         if (stamp() == StampFactory.forVoid()) {
-            invoke = InvokeNode.create(callTarget, getBci(), stamp());
+            invoke = new InvokeNode(callTarget, getBci(), stamp());
         } else {
-            invoke = InvokeNode.create(callTarget, getBci());
+            invoke = new InvokeNode(callTarget, getBci());
         }
         graph().add(invoke);
         invoke.setStateAfter(stateAfter());
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java	Mon Jan 12 20:39:04 2015 +0100
@@ -496,8 +496,8 @@
                 if (nodes.isEmpty()) {
                     // Only insert the nodes if this is the first monitorenter being lowered.
                     JavaType returnType = initCounter.getMethod().getSignature().getReturnType(initCounter.getMethod().getDeclaringClass());
-                    MethodCallTargetNode callTarget = graph.add(MethodCallTargetNode.create(InvokeKind.Static, initCounter.getMethod(), new ValueNode[0], returnType));
-                    InvokeNode invoke = graph.add(InvokeNode.create(callTarget, 0));
+                    MethodCallTargetNode callTarget = graph.add(new MethodCallTargetNode(InvokeKind.Static, initCounter.getMethod(), new ValueNode[0], returnType));
+                    InvokeNode invoke = graph.add(new InvokeNode(callTarget, 0));
                     invoke.setStateAfter(graph.start().stateAfter());
                     graph.addAfterFixed(graph.start(), invoke);
 
@@ -509,10 +509,10 @@
                         returnType = checkCounter.getMethod().getSignature().getReturnType(checkCounter.getMethod().getDeclaringClass());
                         String msg = "unbalanced monitors in " + graph.method().format("%H.%n(%p)") + ", count = %d";
                         ConstantNode errMsg = ConstantNode.forConstant(tool.getConstantReflection().forString(msg), providers.getMetaAccess(), graph);
-                        callTarget = graph.add(MethodCallTargetNode.create(InvokeKind.Static, checkCounter.getMethod(), new ValueNode[]{errMsg}, returnType));
-                        invoke = graph.add(InvokeNode.create(callTarget, 0));
+                        callTarget = graph.add(new MethodCallTargetNode(InvokeKind.Static, checkCounter.getMethod(), new ValueNode[]{errMsg}, returnType));
+                        invoke = graph.add(new InvokeNode(callTarget, 0));
                         List<ValueNode> stack = Collections.emptyList();
-                        FrameState stateAfter = FrameState.create(graph.method(), BytecodeFrame.AFTER_BCI, new ValueNode[0], stack, new ValueNode[0], new MonitorIdNode[0], false, false);
+                        FrameState stateAfter = new FrameState(graph.method(), BytecodeFrame.AFTER_BCI, new ValueNode[0], stack, new ValueNode[0], new MonitorIdNode[0], false, false);
                         invoke.setStateAfter(graph.add(stateAfter));
                         graph.addBeforeFixed(ret, invoke);
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ObjectCloneNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -39,11 +39,7 @@
 @NodeInfo
 public class ObjectCloneNode extends BasicObjectCloneNode implements VirtualizableAllocation, ArrayLengthProvider {
 
-    public static ObjectCloneNode create(Invoke invoke) {
-        return new ObjectCloneNode(invoke);
-    }
-
-    protected ObjectCloneNode(Invoke invoke) {
+    public ObjectCloneNode(Invoke invoke) {
         super(invoke);
     }
 
@@ -75,16 +71,16 @@
                 type = getConcreteType(getObject().stamp(), tool.assumptions(), tool.getMetaAccess());
                 if (type != null) {
                     StructuredGraph newGraph = new StructuredGraph();
-                    ParameterNode param = newGraph.unique(ParameterNode.create(0, getObject().stamp()));
-                    NewInstanceNode newInstance = newGraph.add(NewInstanceNode.create(type, true));
+                    ParameterNode param = newGraph.unique(new ParameterNode(0, getObject().stamp()));
+                    NewInstanceNode newInstance = newGraph.add(new NewInstanceNode(type, true));
                     newGraph.addAfterFixed(newGraph.start(), newInstance);
-                    ReturnNode returnNode = newGraph.add(ReturnNode.create(newInstance));
+                    ReturnNode returnNode = newGraph.add(new ReturnNode(newInstance));
                     newGraph.addAfterFixed(newInstance, returnNode);
 
                     for (ResolvedJavaField field : type.getInstanceFields(true)) {
-                        LoadFieldNode load = newGraph.add(LoadFieldNode.create(param, field));
+                        LoadFieldNode load = newGraph.add(new LoadFieldNode(param, field));
                         newGraph.addBeforeFixed(returnNode, load);
-                        newGraph.addBeforeFixed(returnNode, newGraph.add(StoreFieldNode.create(newInstance, field, load)));
+                        newGraph.addBeforeFixed(returnNode, newGraph.add(new StoreFieldNode(newInstance, field, load)));
                     }
                     return lowerReplacement(newGraph, tool);
                 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ReflectionGetCallerClassNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ReflectionGetCallerClassNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -37,11 +37,7 @@
 @NodeInfo
 public class ReflectionGetCallerClassNode extends MacroStateSplitNode implements Canonicalizable, Lowerable {
 
-    public static ReflectionGetCallerClassNode create(Invoke invoke) {
-        return new ReflectionGetCallerClassNode(invoke);
-    }
-
-    protected ReflectionGetCallerClassNode(Invoke invoke) {
+    public ReflectionGetCallerClassNode(Invoke invoke) {
         super(invoke);
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/SystemIdentityHashCodeNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/SystemIdentityHashCodeNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -33,11 +33,7 @@
 @NodeInfo
 public class SystemIdentityHashCodeNode extends PureFunctionMacroNode {
 
-    public static SystemIdentityHashCodeNode create(Invoke invoke) {
-        return new SystemIdentityHashCodeNode(invoke);
-    }
-
-    protected SystemIdentityHashCodeNode(Invoke invoke) {
+    public SystemIdentityHashCodeNode(Invoke invoke) {
         super(invoke);
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopyCallNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopyCallNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -58,9 +58,14 @@
 
     protected final HotSpotGraalRuntimeProvider runtime;
 
-    public static ArrayCopyCallNode create(@InjectedNodeParameter HotSpotGraalRuntimeProvider runtime, ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length,
-                    Kind elementKind, boolean aligned, boolean disjoint, boolean uninitialized) {
-        return new ArrayCopyCallNode(src, srcPos, dest, destPos, length, elementKind, aligned, disjoint, uninitialized, runtime);
+    public ArrayCopyCallNode(@InjectedNodeParameter HotSpotGraalRuntimeProvider runtime, ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, Kind elementKind,
+                    boolean aligned, boolean disjoint, boolean uninitialized) {
+        this(src, srcPos, dest, destPos, length, elementKind, aligned, disjoint, uninitialized, runtime);
+    }
+
+    public ArrayCopyCallNode(@InjectedNodeParameter HotSpotGraalRuntimeProvider runtime, ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, Kind elementKind,
+                    boolean disjoint) {
+        this(src, srcPos, dest, destPos, length, elementKind, false, disjoint, false, runtime);
     }
 
     protected ArrayCopyCallNode(ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, Kind elementKind, boolean aligned, boolean disjoint, boolean uninitialized,
@@ -79,11 +84,6 @@
         this.runtime = runtime;
     }
 
-    public static ArrayCopyCallNode create(@InjectedNodeParameter HotSpotGraalRuntimeProvider runtime, ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length,
-                    Kind elementKind, boolean disjoint) {
-        return new ArrayCopyCallNode(src, srcPos, dest, destPos, length, elementKind, false, disjoint, false, runtime);
-    }
-
     public ValueNode getSource() {
         return src;
     }
@@ -109,10 +109,10 @@
     }
 
     private ValueNode computeBase(ValueNode base, ValueNode pos) {
-        FixedWithNextNode basePtr = graph().add(GetObjectAddressNode.create(base));
+        FixedWithNextNode basePtr = graph().add(new GetObjectAddressNode(base));
         graph().addBeforeFixed(this, basePtr);
-        ValueNode loc = IndexedLocationNode.create(getLocationIdentity(), runtime.getArrayBaseOffset(elementKind), pos, graph(), runtime.getArrayIndexScale(elementKind));
-        return graph().unique(ComputeAddressNode.create(basePtr, loc, StampFactory.forKind(Kind.Long)));
+        ValueNode loc = graph().unique(new IndexedLocationNode(getLocationIdentity(), runtime.getArrayBaseOffset(elementKind), pos, runtime.getArrayIndexScale(elementKind)));
+        return graph().unique(new ComputeAddressNode(basePtr, loc, StampFactory.forKind(Kind.Long)));
     }
 
     @Override
@@ -127,7 +127,7 @@
             if (len.stamp().getStackKind() != Kind.Long) {
                 len = IntegerConvertNode.convert(len, StampFactory.forKind(Kind.Long), graph());
             }
-            ForeignCallNode call = graph.add(ForeignCallNode.create(Graal.getRequiredCapability(RuntimeProvider.class).getHostBackend().getForeignCalls(), desc, srcAddr, destAddr, len));
+            ForeignCallNode call = graph.add(new ForeignCallNode(Graal.getRequiredCapability(RuntimeProvider.class).getHostBackend().getForeignCalls(), desc, srcAddr, destAddr, len));
             call.setStateAfter(stateAfter());
             graph.replaceFixedWithFixed(this, call);
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopyNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopyNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -40,11 +40,7 @@
 @NodeInfo
 public class ArrayCopyNode extends BasicArrayCopyNode implements Virtualizable, Lowerable {
 
-    public static ArrayCopyNode create(Invoke invoke) {
-        return new ArrayCopyNode(invoke);
-    }
-
-    protected ArrayCopyNode(Invoke invoke) {
+    public ArrayCopyNode(Invoke invoke) {
         super(invoke);
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/CheckcastArrayCopyCallNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/CheckcastArrayCopyCallNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -52,13 +52,8 @@
 
     protected final HotSpotGraalRuntimeProvider runtime;
 
-    public static CheckcastArrayCopyCallNode create(@InjectedNodeParameter HotSpotGraalRuntimeProvider runtime, ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length,
+    protected CheckcastArrayCopyCallNode(@InjectedNodeParameter HotSpotGraalRuntimeProvider runtime, ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length,
                     ValueNode superCheckOffset, ValueNode destElemKlass, boolean uninit) {
-        return new CheckcastArrayCopyCallNode(src, srcPos, dest, destPos, length, superCheckOffset, destElemKlass, uninit, runtime);
-    }
-
-    protected CheckcastArrayCopyCallNode(ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, ValueNode superCheckOffset, ValueNode destElemKlass, boolean uninit,
-                    HotSpotGraalRuntimeProvider runtime) {
         super(StampFactory.forKind(Kind.Int));
         this.src = src;
         this.srcPos = srcPos;
@@ -96,10 +91,10 @@
     }
 
     private ValueNode computeBase(ValueNode base, ValueNode pos) {
-        FixedWithNextNode basePtr = graph().add(GetObjectAddressNode.create(base));
+        FixedWithNextNode basePtr = graph().add(new GetObjectAddressNode(base));
         graph().addBeforeFixed(this, basePtr);
-        ValueNode loc = IndexedLocationNode.create(getLocationIdentity(), runtime.getArrayBaseOffset(Kind.Object), pos, graph(), runtime.getArrayIndexScale(Kind.Object));
-        return graph().unique(ComputeAddressNode.create(basePtr, loc, StampFactory.forKind(Kind.Long)));
+        ValueNode loc = graph().unique(new IndexedLocationNode(getLocationIdentity(), runtime.getArrayBaseOffset(Kind.Object), pos, runtime.getArrayIndexScale(Kind.Object)));
+        return graph().unique(new ComputeAddressNode(basePtr, loc, StampFactory.forKind(Kind.Long)));
     }
 
     @Override
@@ -113,8 +108,8 @@
             if (len.stamp().getStackKind() != Kind.Long) {
                 len = IntegerConvertNode.convert(len, StampFactory.forKind(Kind.Long), graph());
             }
-            ForeignCallNode call = graph.add(ForeignCallNode.create(Graal.getRequiredCapability(RuntimeProvider.class).getHostBackend().getForeignCalls(), desc, srcAddr, destAddr, len,
-                            superCheckOffset, destElemKlass));
+            ForeignCallNode call = graph.add(new ForeignCallNode(Graal.getRequiredCapability(RuntimeProvider.class).getHostBackend().getForeignCalls(), desc, srcAddr, destAddr, len, superCheckOffset,
+                            destElemKlass));
             call.setStateAfter(stateAfter());
             graph.replaceFixedWithFixed(this, call);
         }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/UnsafeArrayCopyNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/UnsafeArrayCopyNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -44,11 +44,7 @@
 
     protected Kind elementKind;
 
-    public static UnsafeArrayCopyNode create(ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, ValueNode layoutHelper, Kind elementKind) {
-        return new UnsafeArrayCopyNode(src, srcPos, dest, destPos, length, layoutHelper, elementKind);
-    }
-
-    protected UnsafeArrayCopyNode(ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, ValueNode layoutHelper, Kind elementKind) {
+    public UnsafeArrayCopyNode(ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, ValueNode layoutHelper, Kind elementKind) {
         super(StampFactory.forVoid());
         assert layoutHelper == null || elementKind == null;
         this.src = src;
@@ -60,19 +56,11 @@
         this.elementKind = elementKind;
     }
 
-    public static UnsafeArrayCopyNode create(ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, Kind elementKind) {
-        return new UnsafeArrayCopyNode(src, srcPos, dest, destPos, length, elementKind);
-    }
-
-    protected UnsafeArrayCopyNode(ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, Kind elementKind) {
+    public UnsafeArrayCopyNode(ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, Kind elementKind) {
         this(src, srcPos, dest, destPos, length, null, elementKind);
     }
 
-    public static UnsafeArrayCopyNode create(ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, ValueNode layoutHelper) {
-        return new UnsafeArrayCopyNode(src, srcPos, dest, destPos, length, layoutHelper);
-    }
-
-    protected UnsafeArrayCopyNode(ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, ValueNode layoutHelper) {
+    public UnsafeArrayCopyNode(ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, ValueNode layoutHelper) {
         this(src, srcPos, dest, destPos, length, layoutHelper, null);
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/ForeignCallStub.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/ForeignCallStub.java	Mon Jan 12 20:39:04 2015 +0100
@@ -195,14 +195,14 @@
         GraphKit kit = new HotSpotGraphKit(graph, providers);
         ParameterNode[] params = createParameters(kit, args);
 
-        ReadRegisterNode thread = kit.append(ReadRegisterNode.create(providers.getRegisters().getThreadRegister(), true, false));
+        ReadRegisterNode thread = kit.append(new ReadRegisterNode(providers.getRegisters().getThreadRegister(), true, false));
         ValueNode result = createTargetCall(kit, params, thread);
         kit.createInvoke(StubUtil.class, "handlePendingException", thread, ConstantNode.forBoolean(isObjectResult, graph));
         if (isObjectResult) {
             InvokeNode object = kit.createInvoke(HotSpotReplacementsUtil.class, "getAndClearObjectResult", thread);
             result = kit.createInvoke(StubUtil.class, "verifyObject", object);
         }
-        kit.append(ReturnNode.create(linkage.getDescriptor().getResultType() == void.class ? null : result));
+        kit.append(new ReturnNode(linkage.getDescriptor().getResultType() == void.class ? null : result));
 
         if (Debug.isDumpEnabled()) {
             Debug.dump(graph, "Initial stub graph");
@@ -242,7 +242,7 @@
             } else {
                 stamp = StampFactory.forKind(type.getKind());
             }
-            ParameterNode param = kit.unique(ParameterNode.create(i, stamp));
+            ParameterNode param = kit.unique(new ParameterNode(i, stamp));
             params[i] = param;
         }
         return params;
@@ -253,9 +253,9 @@
             ValueNode[] targetArguments = new ValueNode[1 + params.length];
             targetArguments[0] = thread;
             System.arraycopy(params, 0, targetArguments, 1, params.length);
-            return kit.append(StubForeignCallNode.create(providers.getForeignCalls(), target.getDescriptor(), targetArguments));
+            return kit.append(new StubForeignCallNode(providers.getForeignCalls(), target.getDescriptor(), targetArguments));
         } else {
-            return kit.append(StubForeignCallNode.create(providers.getForeignCalls(), target.getDescriptor(), params));
+            return kit.append(new StubForeignCallNode(providers.getForeignCalls(), target.getDescriptor(), params));
         }
     }
 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/Stub.java	Mon Jan 12 20:39:04 2015 +0100
@@ -148,7 +148,7 @@
             try (Scope d = Debug.sandbox("CompilingStub", DebugScope.getConfig(), providers.getCodeCache(), debugScopeContext())) {
                 final StructuredGraph graph = getGraph();
                 if (!(graph.start() instanceof StubStartNode)) {
-                    StubStartNode newStart = graph.add(StubStartNode.create(Stub.this));
+                    StubStartNode newStart = graph.add(new StubStartNode(Stub.this));
                     newStart.setStateAfter(graph.start().stateAfter());
                     graph.replaceFixed(graph.start(), newStart);
                 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/word/HotSpotWordTypeRewriterPhase.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/word/HotSpotWordTypeRewriterPhase.java	Mon Jan 12 20:39:04 2015 +0100
@@ -80,7 +80,7 @@
             /*
              * Prevent rewriting of the MetaspacePointerStamp in the CanonicalizerPhase.
              */
-            graph.replaceFixedWithFixed(node, graph.add(LoadIndexedPointerNode.create(node.stamp(), node.array(), node.index())));
+            graph.replaceFixedWithFixed(node, graph.add(new LoadIndexedPointerNode(node.stamp(), node.array(), node.index())));
         } else {
             super.rewriteAccessIndexed(graph, node);
         }
@@ -115,17 +115,17 @@
 
                 case FROM_POINTER:
                     assert arguments.size() == 1;
-                    replace(invoke, graph.unique(PointerCastNode.create(StampFactory.forKind(wordKind), arguments.get(0))));
+                    replace(invoke, graph.unique(new PointerCastNode(StampFactory.forKind(wordKind), arguments.get(0))));
                     break;
 
                 case TO_KLASS_POINTER:
                     assert arguments.size() == 1;
-                    replace(invoke, graph.unique(PointerCastNode.create(KlassPointerStamp.klass(), arguments.get(0))));
+                    replace(invoke, graph.unique(new PointerCastNode(KlassPointerStamp.klass(), arguments.get(0))));
                     break;
 
                 case TO_METHOD_POINTER:
                     assert arguments.size() == 1;
-                    replace(invoke, graph.unique(PointerCastNode.create(MethodPointerStamp.method(), arguments.get(0))));
+                    replace(invoke, graph.unique(new PointerCastNode(MethodPointerStamp.method(), arguments.get(0))));
                     break;
 
                 case READ_KLASS_POINTER:
@@ -150,7 +150,7 @@
         assert op == READ_KLASS_POINTER;
         final BarrierType barrier = BarrierType.NONE;
 
-        ReadNode read = graph.add(ReadNode.create(base, location, readStamp, barrier));
+        ReadNode read = graph.add(new ReadNode(base, location, readStamp, barrier));
         graph.addBeforeFixed(invoke.asNode(), read);
         /*
          * The read must not float outside its block otherwise it may float above an explicit zero
@@ -164,16 +164,16 @@
         assert left.stamp() instanceof MetaspacePointerStamp && right.stamp() instanceof MetaspacePointerStamp;
         assert opcode == POINTER_EQ || opcode == POINTER_NE;
 
-        PointerEqualsNode comparison = graph.unique(PointerEqualsNode.create(left, right));
+        PointerEqualsNode comparison = graph.unique(new PointerEqualsNode(left, right));
         ValueNode eqValue = ConstantNode.forBoolean(opcode == POINTER_EQ, graph);
         ValueNode neValue = ConstantNode.forBoolean(opcode == POINTER_NE, graph);
-        return graph.unique(ConditionalNode.create(comparison, eqValue, neValue));
+        return graph.unique(new ConditionalNode(comparison, eqValue, neValue));
     }
 
     private static ValueNode pointerIsNullOp(StructuredGraph graph, ValueNode pointer) {
         assert pointer.stamp() instanceof MetaspacePointerStamp;
 
-        IsNullNode isNull = graph.unique(IsNullNode.create(pointer));
-        return graph.unique(ConditionalNode.create(isNull, ConstantNode.forBoolean(true, graph), ConstantNode.forBoolean(false, graph)));
+        IsNullNode isNull = graph.unique(new IsNullNode(pointer));
+        return graph.unique(new ConditionalNode(isNull, ConstantNode.forBoolean(true, graph), ConstantNode.forBoolean(false, graph)));
     }
 }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/word/PointerCastNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/word/PointerCastNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
 
     @Input ValueNode input;
 
-    public static PointerCastNode create(Stamp stamp, ValueNode input) {
-        return new PointerCastNode(stamp, input);
-    }
-
-    protected PointerCastNode(Stamp stamp, ValueNode input) {
+    public PointerCastNode(Stamp stamp, ValueNode input) {
         super(stamp);
         this.input = input;
     }
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Mon Jan 12 20:39:04 2015 +0100
@@ -263,7 +263,7 @@
             @Override
             protected void handleUnresolvedLoadConstant(JavaType type) {
                 assert !graphBuilderConfig.eagerResolving();
-                append(DeoptimizeNode.create(InvalidateRecompile, Unresolved));
+                append(new DeoptimizeNode(InvalidateRecompile, Unresolved));
             }
 
             /**
@@ -273,7 +273,7 @@
             @Override
             protected void handleUnresolvedCheckCast(JavaType type, ValueNode object) {
                 assert !graphBuilderConfig.eagerResolving();
-                append(FixedGuardNode.create(currentGraph.unique(IsNullNode.create(object)), Unresolved, InvalidateRecompile));
+                append(new FixedGuardNode(currentGraph.unique(new IsNullNode(object)), Unresolved, InvalidateRecompile));
                 frameState.apush(appendConstant(JavaConstant.NULL_POINTER));
             }
 
@@ -284,9 +284,9 @@
             @Override
             protected void handleUnresolvedInstanceOf(JavaType type, ValueNode object) {
                 assert !graphBuilderConfig.eagerResolving();
-                BeginNode successor = currentGraph.add(BeginNode.create());
-                DeoptimizeNode deopt = currentGraph.add(DeoptimizeNode.create(InvalidateRecompile, Unresolved));
-                append(IfNode.create(currentGraph.unique(IsNullNode.create(object)), successor, deopt, 1));
+                BeginNode successor = currentGraph.add(new BeginNode());
+                DeoptimizeNode deopt = currentGraph.add(new DeoptimizeNode(InvalidateRecompile, Unresolved));
+                append(new IfNode(currentGraph.unique(new IsNullNode(object)), successor, deopt, 1));
                 lastInstr = successor;
                 frameState.ipush(appendConstant(JavaConstant.INT_0));
             }
@@ -297,7 +297,7 @@
             @Override
             protected void handleUnresolvedNewInstance(JavaType type) {
                 assert !graphBuilderConfig.eagerResolving();
-                append(DeoptimizeNode.create(InvalidateRecompile, Unresolved));
+                append(new DeoptimizeNode(InvalidateRecompile, Unresolved));
             }
 
             /**
@@ -307,7 +307,7 @@
             @Override
             protected void handleUnresolvedNewObjectArray(JavaType type, ValueNode length) {
                 assert !graphBuilderConfig.eagerResolving();
-                append(DeoptimizeNode.create(InvalidateRecompile, Unresolved));
+                append(new DeoptimizeNode(InvalidateRecompile, Unresolved));
             }
 
             /**
@@ -317,7 +317,7 @@
             @Override
             protected void handleUnresolvedNewMultiArray(JavaType type, List<ValueNode> dims) {
                 assert !graphBuilderConfig.eagerResolving();
-                append(DeoptimizeNode.create(InvalidateRecompile, Unresolved));
+                append(new DeoptimizeNode(InvalidateRecompile, Unresolved));
             }
 
             /**
@@ -328,7 +328,7 @@
             @Override
             protected void handleUnresolvedLoadField(JavaField field, ValueNode receiver) {
                 assert !graphBuilderConfig.eagerResolving();
-                append(DeoptimizeNode.create(InvalidateRecompile, Unresolved));
+                append(new DeoptimizeNode(InvalidateRecompile, Unresolved));
             }
 
             /**
@@ -340,7 +340,7 @@
             @Override
             protected void handleUnresolvedStoreField(JavaField field, ValueNode value, ValueNode receiver) {
                 assert !graphBuilderConfig.eagerResolving();
-                append(DeoptimizeNode.create(InvalidateRecompile, Unresolved));
+                append(new DeoptimizeNode(InvalidateRecompile, Unresolved));
             }
 
             /**
@@ -349,7 +349,7 @@
             @Override
             protected void handleUnresolvedExceptionType(JavaType type) {
                 assert !graphBuilderConfig.eagerResolving();
-                append(DeoptimizeNode.create(InvalidateRecompile, Unresolved));
+                append(new DeoptimizeNode(InvalidateRecompile, Unresolved));
             }
 
             /**
@@ -358,7 +358,7 @@
              */
             protected void handleUnresolvedInvoke(JavaMethod javaMethod, InvokeKind invokeKind) {
                 assert !graphBuilderConfig.eagerResolving();
-                append(DeoptimizeNode.create(InvalidateRecompile, Unresolved));
+                append(new DeoptimizeNode(InvalidateRecompile, Unresolved));
             }
 
             private DispatchBeginNode handleException(ValueNode exceptionObject, int bci) {
@@ -380,12 +380,12 @@
 
                 DispatchBeginNode dispatchBegin;
                 if (exceptionObject == null) {
-                    dispatchBegin = currentGraph.add(ExceptionObjectNode.create(metaAccess));
+                    dispatchBegin = currentGraph.add(new ExceptionObjectNode(metaAccess));
                     dispatchState.apush(dispatchBegin);
                     dispatchState.setRethrowException(true);
                     dispatchBegin.setStateAfter(dispatchState.create(bci));
                 } else {
-                    dispatchBegin = currentGraph.add(DispatchBeginNode.create());
+                    dispatchBegin = currentGraph.add(new DispatchBeginNode());
                     dispatchState.apush(exceptionObject);
                     dispatchBegin.setStateAfter(dispatchState.create(bci));
                     dispatchState.setRethrowException(true);
@@ -398,122 +398,122 @@
 
             @Override
             protected ValueNode genLoadIndexed(ValueNode array, ValueNode index, Kind kind) {
-                return LoadIndexedNode.create(array, index, kind);
+                return new LoadIndexedNode(array, index, kind);
             }
 
             @Override
             protected ValueNode genStoreIndexed(ValueNode array, ValueNode index, Kind kind, ValueNode value) {
-                return StoreIndexedNode.create(array, index, kind, value);
+                return new StoreIndexedNode(array, index, kind, value);
             }
 
             @Override
             protected ValueNode genIntegerAdd(Kind kind, ValueNode x, ValueNode y) {
-                return AddNode.create(x, y);
+                return new AddNode(x, y);
             }
 
             @Override
             protected ValueNode genIntegerSub(Kind kind, ValueNode x, ValueNode y) {
-                return SubNode.create(x, y);
+                return new SubNode(x, y);
             }
 
             @Override
             protected ValueNode genIntegerMul(Kind kind, ValueNode x, ValueNode y) {
-                return MulNode.create(x, y);
+                return new MulNode(x, y);
             }
 
             @Override
             protected ValueNode genFloatAdd(Kind kind, ValueNode x, ValueNode y, boolean isStrictFP) {
-                return AddNode.create(x, y);
+                return new AddNode(x, y);
             }
 
             @Override
             protected ValueNode genFloatSub(Kind kind, ValueNode x, ValueNode y, boolean isStrictFP) {
-                return SubNode.create(x, y);
+                return new SubNode(x, y);
             }
 
             @Override
             protected ValueNode genFloatMul(Kind kind, ValueNode x, ValueNode y, boolean isStrictFP) {
-                return MulNode.create(x, y);
+                return new MulNode(x, y);
             }
 
             @Override
             protected ValueNode genFloatDiv(Kind kind, ValueNode x, ValueNode y, boolean isStrictFP) {
-                return DivNode.create(x, y);
+                return new DivNode(x, y);
             }
 
             @Override
             protected ValueNode genFloatRem(Kind kind, ValueNode x, ValueNode y, boolean isStrictFP) {
-                return RemNode.create(x, y);
+                return new RemNode(x, y);
             }
 
             @Override
             protected ValueNode genIntegerDiv(Kind kind, ValueNode x, ValueNode y) {
-                return IntegerDivNode.create(x, y);
+                return new IntegerDivNode(x, y);
             }
 
             @Override
             protected ValueNode genIntegerRem(Kind kind, ValueNode x, ValueNode y) {
-                return IntegerRemNode.create(x, y);
+                return new IntegerRemNode(x, y);
             }
 
             @Override
             protected ValueNode genNegateOp(ValueNode x) {
-                return (NegateNode.create(x));
+                return (new NegateNode(x));
             }
 
             @Override
             protected ValueNode genLeftShift(Kind kind, ValueNode x, ValueNode y) {
-                return LeftShiftNode.create(x, y);
+                return new LeftShiftNode(x, y);
             }
 
             @Override
             protected ValueNode genRightShift(Kind kind, ValueNode x, ValueNode y) {
-                return RightShiftNode.create(x, y);
+                return new RightShiftNode(x, y);
             }
 
             @Override
             protected ValueNode genUnsignedRightShift(Kind kind, ValueNode x, ValueNode y) {
-                return UnsignedRightShiftNode.create(x, y);
+                return new UnsignedRightShiftNode(x, y);
             }
 
             @Override
             protected ValueNode genAnd(Kind kind, ValueNode x, ValueNode y) {
-                return AndNode.create(x, y);
+                return new AndNode(x, y);
             }
 
             @Override
             protected ValueNode genOr(Kind kind, ValueNode x, ValueNode y) {
-                return OrNode.create(x, y);
+                return new OrNode(x, y);
             }
 
             @Override
             protected ValueNode genXor(Kind kind, ValueNode x, ValueNode y) {
-                return XorNode.create(x, y);
+                return new XorNode(x, y);
             }
 
             @Override
             protected ValueNode genNormalizeCompare(ValueNode x, ValueNode y, boolean isUnorderedLess) {
-                return NormalizeCompareNode.create(x, y, isUnorderedLess);
+                return new NormalizeCompareNode(x, y, isUnorderedLess);
             }
 
             @Override
             protected ValueNode genFloatConvert(FloatConvert op, ValueNode input) {
-                return FloatConvertNode.create(op, input);
+                return new FloatConvertNode(op, input);
             }
 
             @Override
             protected ValueNode genNarrow(ValueNode input, int bitCount) {
-                return NarrowNode.create(input, bitCount);
+                return new NarrowNode(input, bitCount);
             }
 
             @Override
             protected ValueNode genSignExtend(ValueNode input, int bitCount) {
-                return SignExtendNode.create(input, bitCount);
+                return new SignExtendNode(input, bitCount);
             }
 
             @Override
             protected ValueNode genZeroExtend(ValueNode input, int bitCount) {
-                return ZeroExtendNode.create(input, bitCount);
+                return new ZeroExtendNode(input, bitCount);
             }
 
             @Override
@@ -524,17 +524,17 @@
 
             @Override
             protected ValueNode genObjectEquals(ValueNode x, ValueNode y) {
-                return ObjectEqualsNode.create(x, y);
+                return new ObjectEqualsNode(x, y);
             }
 
             @Override
             protected ValueNode genIntegerEquals(ValueNode x, ValueNode y) {
-                return IntegerEqualsNode.create(x, y);
+                return new IntegerEqualsNode(x, y);
             }
 
             @Override
             protected ValueNode genIntegerLessThan(ValueNode x, ValueNode y) {
-                return IntegerLessThanNode.create(x, y);
+                return new IntegerLessThanNode(x, y);
             }
 
             @Override
@@ -543,49 +543,49 @@
             }
 
             protected ValueNode genIfNode(ValueNode condition, ValueNode falseSuccessor, ValueNode trueSuccessor, double d) {
-                return IfNode.create((LogicNode) condition, (FixedNode) falseSuccessor, (FixedNode) trueSuccessor, d);
+                return new IfNode((LogicNode) condition, (FixedNode) falseSuccessor, (FixedNode) trueSuccessor, d);
             }
 
             @Override
             protected void genThrow() {
                 ValueNode exception = frameState.apop();
-                append(FixedGuardNode.create(currentGraph.unique(IsNullNode.create(exception)), NullCheckException, InvalidateReprofile, true));
+                append(new FixedGuardNode(currentGraph.unique(new IsNullNode(exception)), NullCheckException, InvalidateReprofile, true));
                 lastInstr.setNext(handleException(exception, bci()));
             }
 
             @Override
             protected ValueNode createCheckCast(ResolvedJavaType type, ValueNode object, JavaTypeProfile profileForTypeCheck, boolean forStoreCheck) {
-                return CheckCastNode.create(type, object, profileForTypeCheck, forStoreCheck);
+                return new CheckCastNode(type, object, profileForTypeCheck, forStoreCheck);
             }
 
             @Override
             protected ValueNode createInstanceOf(ResolvedJavaType type, ValueNode object, JavaTypeProfile profileForTypeCheck) {
-                return InstanceOfNode.create(type, object, profileForTypeCheck);
+                return new InstanceOfNode(type, object, profileForTypeCheck);
             }
 
             @Override
             protected ValueNode genConditional(ValueNode x) {
-                return ConditionalNode.create((LogicNode) x);
+                return new ConditionalNode((LogicNode) x);
             }
 
             @Override
             protected NewInstanceNode createNewInstance(ResolvedJavaType type, boolean fillContents) {
-                return NewInstanceNode.create(type, fillContents);
+                return new NewInstanceNode(type, fillContents);
             }
 
             @Override
             protected NewArrayNode createNewArray(ResolvedJavaType elementType, ValueNode length, boolean fillContents) {
-                return NewArrayNode.create(elementType, length, fillContents);
+                return new NewArrayNode(elementType, length, fillContents);
             }
 
             @Override
             protected NewMultiArrayNode createNewMultiArray(ResolvedJavaType type, List<ValueNode> dimensions) {
-                return NewMultiArrayNode.create(type, dimensions.toArray(new ValueNode[0]));
+                return new NewMultiArrayNode(type, dimensions.toArray(new ValueNode[0]));
             }
 
             @Override
             protected ValueNode genLoadField(ValueNode receiver, ResolvedJavaField field) {
-                return LoadFieldNode.create(receiver, field);
+                return new LoadFieldNode(receiver, field);
             }
 
             @Override
@@ -593,9 +593,9 @@
                 if (StampTool.isPointerNonNull(receiver.stamp())) {
                     return;
                 }
-                BytecodeExceptionNode exception = currentGraph.add(BytecodeExceptionNode.create(metaAccess, NullPointerException.class));
-                BeginNode falseSucc = currentGraph.add(BeginNode.create());
-                append(IfNode.create(currentGraph.unique(IsNullNode.create(receiver)), exception, falseSucc, 0.01));
+                BytecodeExceptionNode exception = currentGraph.add(new BytecodeExceptionNode(metaAccess, NullPointerException.class));
+                BeginNode falseSucc = currentGraph.add(new BeginNode());
+                append(new IfNode(currentGraph.unique(new IsNullNode(receiver)), exception, falseSucc, 0.01));
                 lastInstr = falseSucc;
 
                 exception.setStateAfter(frameState.create(bci()));
@@ -604,9 +604,9 @@
 
             @Override
             protected void emitBoundsCheck(ValueNode index, ValueNode length) {
-                BeginNode trueSucc = currentGraph.add(BeginNode.create());
-                BytecodeExceptionNode exception = currentGraph.add(BytecodeExceptionNode.create(metaAccess, ArrayIndexOutOfBoundsException.class, index));
-                append(IfNode.create(currentGraph.unique(IntegerBelowNode.create(index, length)), trueSucc, exception, 0.99));
+                BeginNode trueSucc = currentGraph.add(new BeginNode());
+                BytecodeExceptionNode exception = currentGraph.add(new BytecodeExceptionNode(metaAccess, ArrayIndexOutOfBoundsException.class, index));
+                append(new IfNode(currentGraph.unique(new IntegerBelowNode(index, length)), trueSucc, exception, 0.99));
                 lastInstr = trueSucc;
 
                 exception.setStateAfter(frameState.create(bci()));
@@ -615,12 +615,12 @@
 
             @Override
             protected ValueNode genArrayLength(ValueNode x) {
-                return ArrayLengthNode.create(x);
+                return new ArrayLengthNode(x);
             }
 
             @Override
             protected ValueNode genStoreField(ValueNode receiver, ResolvedJavaField field, ValueNode value) {
-                return StoreFieldNode.create(receiver, field, value);
+                return new StoreFieldNode(receiver, field, value);
             }
 
             /**
@@ -721,7 +721,7 @@
             private void appendInvoke(InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] args) {
                 Kind resultType = targetMethod.getSignature().getReturnKind();
                 if (DeoptALot.getValue()) {
-                    append(DeoptimizeNode.create(DeoptimizationAction.None, RuntimeConstraint));
+                    append(new DeoptimizeNode(DeoptimizationAction.None, RuntimeConstraint));
                     frameState.pushReturn(resultType, ConstantNode.defaultForKind(resultType, currentGraph));
                     return;
                 }
@@ -746,25 +746,25 @@
                     createInvoke(callTarget, resultType);
                 } else {
                     InvokeWithExceptionNode invoke = createInvokeWithException(callTarget, resultType);
-                    BeginNode beginNode = currentGraph.add(KillingBeginNode.create(LocationIdentity.ANY_LOCATION));
+                    BeginNode beginNode = currentGraph.add(new KillingBeginNode(LocationIdentity.ANY_LOCATION));
                     invoke.setNext(beginNode);
                     lastInstr = beginNode;
                 }
             }
 
             protected MethodCallTargetNode createMethodCallTarget(InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] args, JavaType returnType) {
-                return MethodCallTargetNode.create(invokeKind, targetMethod, args, returnType);
+                return new MethodCallTargetNode(invokeKind, targetMethod, args, returnType);
             }
 
             protected InvokeNode createInvoke(CallTargetNode callTarget, Kind resultType) {
-                InvokeNode invoke = append(InvokeNode.create(callTarget, bci()));
+                InvokeNode invoke = append(new InvokeNode(callTarget, bci()));
                 frameState.pushReturn(resultType, invoke);
                 return invoke;
             }
 
             protected InvokeWithExceptionNode createInvokeWithException(CallTargetNode callTarget, Kind resultType) {
                 DispatchBeginNode exceptionEdge = handleException(null, bci());
-                InvokeWithExceptionNode invoke = append(InvokeWithExceptionNode.create(callTarget, exceptionEdge, bci()));
+                InvokeWithExceptionNode invoke = append(new InvokeWithExceptionNode(callTarget, exceptionEdge, bci()));
                 frameState.pushReturn(resultType, invoke);
                 invoke.setStateAfter(frameState.create(stream.nextBCI()));
                 return invoke;
@@ -783,13 +783,13 @@
                     throw new BailoutException("unbalanced monitors");
                 }
 
-                append(ReturnNode.create(x));
+                append(new ReturnNode(x));
             }
 
             @Override
             protected MonitorEnterNode genMonitorEnter(ValueNode x) {
-                MonitorIdNode monitorId = currentGraph.add(MonitorIdNode.create(frameState.lockDepth()));
-                MonitorEnterNode monitorEnter = append(MonitorEnterNode.create(x, monitorId));
+                MonitorIdNode monitorId = currentGraph.add(new MonitorIdNode(frameState.lockDepth()));
+                MonitorEnterNode monitorEnter = append(new MonitorEnterNode(x, monitorId));
                 frameState.pushLock(x, monitorId);
                 return monitorEnter;
             }
@@ -801,7 +801,7 @@
                 if (GraphUtil.originalValue(lockedObject) != GraphUtil.originalValue(x)) {
                     throw new BailoutException("unbalanced monitors: mismatch at monitorexit, %s != %s", GraphUtil.originalValue(x), GraphUtil.originalValue(lockedObject));
                 }
-                MonitorExitNode monitorExit = append(MonitorExitNode.create(x, monitorId, returnValue));
+                MonitorExitNode monitorExit = append(new MonitorExitNode(x, monitorId, returnValue));
                 return monitorExit;
             }
 
@@ -829,9 +829,9 @@
                 JsrScope scope = currentBlock.getJsrScope();
                 int retAddress = scope.nextReturnAddress();
                 ConstantNode returnBciNode = getJsrConstant(retAddress);
-                LogicNode guard = IntegerEqualsNode.create(local, returnBciNode);
+                LogicNode guard = new IntegerEqualsNode(local, returnBciNode);
                 guard = currentGraph.unique(guard);
-                append(FixedGuardNode.create(guard, JavaSubroutineMismatch, InvalidateReprofile));
+                append(new FixedGuardNode(guard, JavaSubroutineMismatch, InvalidateReprofile));
                 if (!successor.getJsrScope().equals(scope.pop())) {
                     throw new JsrNotSupportedBailout("unstructured control flow (ret leaves more than one scope)");
                 }
@@ -841,14 +841,14 @@
             private ConstantNode getJsrConstant(long bci) {
                 JavaConstant nextBciConstant = new RawConstant(bci);
                 Stamp nextBciStamp = StampFactory.forConstant(nextBciConstant);
-                ConstantNode nextBciNode = ConstantNode.create(nextBciConstant, nextBciStamp);
+                ConstantNode nextBciNode = new ConstantNode(nextBciConstant, nextBciStamp);
                 return currentGraph.unique(nextBciNode);
             }
 
             @Override
             protected void genIntegerSwitch(ValueNode value, ArrayList<BciBlock> actualSuccessors, int[] keys, double[] keyProbabilities, int[] keySuccessors) {
                 double[] successorProbabilities = successorProbabilites(actualSuccessors.size(), keySuccessors, keyProbabilities);
-                IntegerSwitchNode switchNode = append(IntegerSwitchNode.create(value, actualSuccessors.size(), keys, keyProbabilities, keySuccessors));
+                IntegerSwitchNode switchNode = append(new IntegerSwitchNode(value, actualSuccessors.size(), keys, keyProbabilities, keySuccessors));
                 for (int i = 0; i < actualSuccessors.size(); i++) {
                     switchNode.setBlockSuccessor(i, createBlockTarget(successorProbabilities[i], actualSuccessors.get(i), frameState));
                 }
@@ -943,7 +943,7 @@
                         HIRFrameStateBuilder newState = state.copy();
                         for (BciBlock loop : exitLoops) {
                             LoopBeginNode loopBegin = (LoopBeginNode) loop.firstInstruction;
-                            LoopExitNode loopExit = currentGraph.add(LoopExitNode.create(loopBegin));
+                            LoopExitNode loopExit = currentGraph.add(new LoopExitNode(loopBegin));
                             if (lastLoopExit != null) {
                                 lastLoopExit.setNext(loopExit);
                             }
@@ -966,7 +966,7 @@
             private FixedNode createTarget(double probability, BciBlock block, HIRFrameStateBuilder stateAfter) {
                 assert probability >= 0 && probability <= 1.01 : probability;
                 if (isNeverExecutedCode(probability)) {
-                    return currentGraph.add(DeoptimizeNode.create(InvalidateReprofile, UnreachedCode));
+                    return currentGraph.add(new DeoptimizeNode(InvalidateReprofile, UnreachedCode));
                 } else {
                     assert block != null;
                     return createTarget(block, stateAfter);
@@ -984,7 +984,7 @@
                      * this block again.
                      */
                     FixedNode targetNode;
-                    block.firstInstruction = currentGraph.add(BeginNode.create());
+                    block.firstInstruction = currentGraph.add(new BeginNode());
                     targetNode = block.firstInstruction;
                     Target target = checkLoopExit(targetNode, block, state);
                     FixedNode result = target.fixed;
@@ -1007,7 +1007,7 @@
                      * the loop begin node created before.
                      */
                     LoopBeginNode loopBegin = (LoopBeginNode) block.firstInstruction;
-                    Target target = checkLoopExit(currentGraph.add(LoopEndNode.create(loopBegin)), block, state);
+                    Target target = checkLoopExit(currentGraph.add(new LoopEndNode(loopBegin)), block, state);
                     FixedNode result = target.fixed;
                     ((HIRFrameStateBuilder) block.entryState).merge(loopBegin, target.state);
 
@@ -1026,9 +1026,9 @@
                     BeginNode placeholder = (BeginNode) block.firstInstruction;
 
                     // The EndNode for the already existing edge.
-                    AbstractEndNode end = currentGraph.add(EndNode.create());
+                    AbstractEndNode end = currentGraph.add(new EndNode());
                     // The MergeNode that replaces the placeholder.
-                    MergeNode mergeNode = currentGraph.add(MergeNode.create());
+                    MergeNode mergeNode = currentGraph.add(new MergeNode());
                     FixedNode next = placeholder.next();
 
                     if (placeholder.predecessor() instanceof ControlSplitNode) {
@@ -1047,7 +1047,7 @@
                 MergeNode mergeNode = (MergeNode) block.firstInstruction;
 
                 // The EndNode for the newly merged edge.
-                AbstractEndNode newEnd = currentGraph.add(EndNode.create());
+                AbstractEndNode newEnd = currentGraph.add(new EndNode());
                 Target target = checkLoopExit(newEnd, block, state);
                 FixedNode result = target.fixed;
                 ((HIRFrameStateBuilder) block.entryState).merge(mergeNode, target.state);
@@ -1138,7 +1138,7 @@
                 assert frameState.stackSize() == 1 : frameState;
                 ValueNode exception = frameState.apop();
                 synchronizedEpilogue(BytecodeFrame.AFTER_EXCEPTION_BCI, null);
-                append(UnwindNode.create(exception));
+                append(new UnwindNode(exception));
             }
 
             private void synchronizedEpilogue(int bci, ValueNode returnValue) {
@@ -1171,9 +1171,9 @@
                         if (skippedType.isAssignableFrom(resolvedCatchType)) {
                             BciBlock nextBlock = block.getSuccessorCount() == 1 ? unwindBlock() : block.getSuccessor(1);
                             ValueNode exception = frameState.stackAt(0);
-                            FixedNode trueSuccessor = currentGraph.add(DeoptimizeNode.create(InvalidateReprofile, UnreachedCode));
+                            FixedNode trueSuccessor = currentGraph.add(new DeoptimizeNode(InvalidateReprofile, UnreachedCode));
                             FixedNode nextDispatch = createTarget(nextBlock, frameState);
-                            append(IfNode.create(currentGraph.unique(InstanceOfNode.create((ResolvedJavaType) catchType, exception, null)), trueSuccessor, nextDispatch, 0));
+                            append(new IfNode(currentGraph.unique(new InstanceOfNode((ResolvedJavaType) catchType, exception, null)), trueSuccessor, nextDispatch, 0));
                             return;
                         }
                     }
@@ -1182,7 +1182,7 @@
                 if (initialized) {
                     BciBlock nextBlock = block.getSuccessorCount() == 1 ? unwindBlock() : block.getSuccessor(1);
                     ValueNode exception = frameState.stackAt(0);
-                    CheckCastNode checkCast = currentGraph.add(CheckCastNode.create((ResolvedJavaType) catchType, exception, null, false));
+                    CheckCastNode checkCast = currentGraph.add(new CheckCastNode((ResolvedJavaType) catchType, exception, null, false));
                     frameState.apop();
                     frameState.push(Kind.Object, checkCast);
                     FixedNode catchSuccessor = createTarget(block.getSuccessor(0), frameState);
@@ -1190,7 +1190,7 @@
                     frameState.push(Kind.Object, exception);
                     FixedNode nextDispatch = createTarget(nextBlock, frameState);
                     checkCast.setNext(catchSuccessor);
-                    append(IfNode.create(currentGraph.unique(InstanceOfNode.create((ResolvedJavaType) catchType, exception, null)), checkCast, nextDispatch, 0.5));
+                    append(new IfNode(currentGraph.unique(new InstanceOfNode((ResolvedJavaType) catchType, exception, null)), checkCast, nextDispatch, 0.5));
                 } else {
                     handleUnresolvedExceptionType(catchType);
                 }
@@ -1212,8 +1212,8 @@
                     // Create the loop header block, which later will merge the backward branches of
                     // the
                     // loop.
-                    AbstractEndNode preLoopEnd = currentGraph.add(EndNode.create());
-                    LoopBeginNode loopBegin = currentGraph.add(LoopBeginNode.create());
+                    AbstractEndNode preLoopEnd = currentGraph.add(new EndNode());
+                    LoopBeginNode loopBegin = currentGraph.add(new LoopBeginNode());
                     lastInstr.setNext(preLoopEnd);
                     // Add the single non-loop predecessor of the loop header.
                     loopBegin.addForwardEnd(preLoopEnd);
@@ -1265,7 +1265,7 @@
                         if (block.getJsrScope() != JsrScope.EMPTY_SCOPE) {
                             throw new BailoutException("OSR into a JSR scope is not supported");
                         }
-                        EntryMarkerNode x = append(EntryMarkerNode.create());
+                        EntryMarkerNode x = append(new EntryMarkerNode());
                         frameState.insertProxies(x);
                         x.setStateAfter(frameState.create(bci));
                     }
@@ -1317,9 +1317,9 @@
 
             private InfopointNode createInfoPointNode(InfopointReason reason) {
                 if (graphBuilderConfig.insertFullDebugInfo()) {
-                    return FullInfopointNode.create(reason, frameState.create(bci()));
+                    return new FullInfopointNode(reason, frameState.create(bci()));
                 } else {
-                    return SimpleInfopointNode.create(reason, new BytecodePosition(null, method, bci()));
+                    return new SimpleInfopointNode(reason, new BytecodePosition(null, method, bci()));
                 }
             }
 
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/HIRFrameStateBuilder.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/HIRFrameStateBuilder.java	Mon Jan 12 20:39:04 2015 +0100
@@ -56,7 +56,7 @@
         int index = 0;
         if (!method.isStatic()) {
             // add the receiver
-            ParameterNode receiver = graph.unique(ParameterNode.create(javaIndex, StampFactory.declaredNonNull(method.getDeclaringClass())));
+            ParameterNode receiver = graph.unique(new ParameterNode(javaIndex, StampFactory.declaredNonNull(method.getDeclaringClass())));
             storeLocal(javaIndex, receiver);
             javaIndex = 1;
             index = 1;
@@ -76,7 +76,7 @@
             } else {
                 stamp = StampFactory.forKind(kind);
             }
-            ParameterNode param = graph.unique(ParameterNode.create(index, stamp));
+            ParameterNode param = graph.unique(new ParameterNode(index, stamp));
             storeLocal(javaIndex, param);
             javaIndex += stackSlots(kind);
             index++;
@@ -123,7 +123,7 @@
     }
 
     public FrameState create(int bci) {
-        return graph.add(FrameState.create(method, bci, locals, Arrays.asList(stack).subList(0, stackSize), lockedObjects, monitorIds, rethrowException, false));
+        return graph.add(new FrameState(method, bci, locals, Arrays.asList(stack).subList(0, stackSize), lockedObjects, monitorIds, rethrowException, false));
     }
 
     @Override
@@ -190,7 +190,7 @@
                 return null;
             }
 
-            ValuePhiNode phi = graph.addWithoutUnique(ValuePhiNode.create(currentValue.stamp().unrestricted(), block));
+            ValuePhiNode phi = graph.addWithoutUnique(new ValuePhiNode(currentValue.stamp().unrestricted(), block));
             for (int i = 0; i < block.phiPredecessorCount(); i++) {
                 phi.addInput(currentValue);
             }
@@ -288,7 +288,7 @@
         }
         assert !block.isPhiAtMerge(value) : "phi function for this block already created";
 
-        ValuePhiNode phi = graph.addWithoutUnique(ValuePhiNode.create(value.stamp().unrestricted(), block));
+        ValuePhiNode phi = graph.addWithoutUnique(new ValuePhiNode(value.stamp().unrestricted(), block));
         phi.addInput(value);
         return phi;
     }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerationResultBase.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerationResultBase.java	Mon Jan 12 20:39:04 2015 +0100
@@ -68,5 +68,4 @@
         assert frameMap != null : "getFrameMap() can only be used after calling buildFrameMap()!";
         return frameMap;
     }
-
 }
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/BasicInductionVariable.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/BasicInductionVariable.java	Mon Jan 12 20:39:04 2015 +0100
@@ -86,7 +86,7 @@
             return rawStride;
         }
         if (op instanceof SubNode) {
-            return graph().unique(NegateNode.create(rawStride));
+            return graph().unique(new NegateNode(rawStride));
         }
         throw GraalInternalError.shouldNotReachHere();
     }
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/CountedLoopInfo.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/CountedLoopInfo.java	Mon Jan 12 20:39:04 2015 +0100
@@ -63,13 +63,13 @@
                 range = BinaryArithmeticNode.sub(graph, range, ConstantNode.forIntegerStamp(stamp, 1, graph));
             }
         }
-        IntegerDivNode div = graph.add(IntegerDivNode.create(range, iv.strideNode()));
+        IntegerDivNode div = graph.add(new IntegerDivNode(range, iv.strideNode()));
         graph.addBeforeFixed(loop.entryPoint(), div);
         ConstantNode zero = ConstantNode.forIntegerStamp(stamp, 0, graph);
         if (assumePositive) {
             return div;
         }
-        return graph.unique(ConditionalNode.create(graph.unique(IntegerLessThanNode.create(zero, div)), div, zero));
+        return graph.unique(new ConditionalNode(graph.unique(new IntegerLessThanNode(zero, div)), div, zero));
     }
 
     public boolean isConstantMaxTripCount() {
@@ -148,16 +148,16 @@
             if (oneOff) {
                 v1 = sub(graph, v1, one);
             }
-            cond = graph.unique(IntegerLessThanNode.create(v1, end));
+            cond = graph.unique(new IntegerLessThanNode(v1, end));
         } else {
             assert iv.direction() == Direction.Down;
             BinaryArithmeticNode<?> v1 = add(graph, ConstantNode.forIntegerStamp(stamp, CodeUtil.minValue(stamp.getBits()), graph), sub(graph, one, iv.strideNode()));
             if (oneOff) {
                 v1 = add(graph, v1, one);
             }
-            cond = graph.unique(IntegerLessThanNode.create(end, v1));
+            cond = graph.unique(new IntegerLessThanNode(end, v1));
         }
-        overflowGuard = graph.unique(GuardNode.create(cond, BeginNode.prevBegin(loop.entryPoint()), DeoptimizationReason.LoopLimitCheck, DeoptimizationAction.InvalidateRecompile, true,
+        overflowGuard = graph.unique(new GuardNode(cond, BeginNode.prevBegin(loop.entryPoint()), DeoptimizationReason.LoopLimitCheck, DeoptimizationAction.InvalidateRecompile, true,
                         JavaConstant.NULL_POINTER)); // TODO gd: use speculation
         loop.loopBegin().setOverflowGuard(overflowGuard);
         return overflowGuard;
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DerivedOffsetInductionVariable.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DerivedOffsetInductionVariable.java	Mon Jan 12 20:39:04 2015 +0100
@@ -86,7 +86,7 @@
     @Override
     public ValueNode strideNode() {
         if (value instanceof SubNode && base.valueNode() == value.getY()) {
-            return graph().unique(NegateNode.create(base.strideNode()));
+            return graph().unique(new NegateNode(base.strideNode()));
         }
         return base.strideNode();
     }
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragment.java	Mon Jan 12 20:39:04 2015 +0100
@@ -312,9 +312,9 @@
             if (newEarlyExit == null) {
                 continue;
             }
-            MergeNode merge = graph.add(MergeNode.create());
-            AbstractEndNode originalEnd = graph.add(EndNode.create());
-            AbstractEndNode newEnd = graph.add(EndNode.create());
+            MergeNode merge = graph.add(new MergeNode());
+            AbstractEndNode originalEnd = graph.add(new EndNode());
+            AbstractEndNode newEnd = graph.add(new EndNode());
             merge.addForwardEnd(originalEnd);
             merge.addForwardEnd(newEnd);
             loopEarlyExit.setNext(originalEnd);
@@ -354,9 +354,9 @@
                 if (newVpn != null) {
                     PhiNode phi;
                     if (vpn instanceof ValueProxyNode) {
-                        phi = graph.addWithoutUnique(ValuePhiNode.create(vpn.stamp(), merge));
+                        phi = graph.addWithoutUnique(new ValuePhiNode(vpn.stamp(), merge));
                     } else if (vpn instanceof GuardProxyNode) {
-                        phi = graph.addWithoutUnique(GuardPhiNode.create(merge));
+                        phi = graph.addWithoutUnique(new GuardPhiNode(merge));
                     } else {
                         throw GraalInternalError.shouldNotReachHere();
                     }
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentInside.java	Mon Jan 12 20:39:04 2015 +0100
@@ -152,7 +152,7 @@
                     if (value != null) {
                         return value;
                     }
-                    BeginNode newValue = graph.add(BeginNode.create());
+                    BeginNode newValue = graph.add(new BeginNode());
                     seenNode.put(original, newValue);
                     return newValue;
                 }
@@ -161,7 +161,7 @@
                     if (value != null) {
                         return value;
                     }
-                    BeginNode newValue = graph.add(BeginNode.create());
+                    BeginNode newValue = graph.add(new BeginNode());
                     seenNode.put(original, newValue);
                     return newValue;
                 }
@@ -170,7 +170,7 @@
                     if (value != null) {
                         return value;
                     }
-                    EndNode newValue = graph.add(EndNode.create());
+                    EndNode newValue = graph.add(new EndNode());
                     seenNode.put(original, newValue);
                     return newValue;
                 }
@@ -187,11 +187,11 @@
     private static PhiNode patchPhi(StructuredGraph graph, PhiNode phi, MergeNode merge) {
         PhiNode ret;
         if (phi instanceof ValuePhiNode) {
-            ret = ValuePhiNode.create(phi.stamp(), merge);
+            ret = new ValuePhiNode(phi.stamp(), merge);
         } else if (phi instanceof GuardPhiNode) {
-            ret = GuardPhiNode.create(merge);
+            ret = new GuardPhiNode(merge);
         } else if (phi instanceof MemoryPhiNode) {
-            ret = MemoryPhiNode.create(merge, ((MemoryPhiNode) phi).getLocationIdentity());
+            ret = new MemoryPhiNode(merge, ((MemoryPhiNode) phi).getLocationIdentity());
         } else {
             throw GraalInternalError.shouldNotReachHere();
         }
@@ -310,12 +310,12 @@
         if (endsToMerge.size() == 1) {
             AbstractEndNode end = endsToMerge.get(0);
             assert end.usages().isEmpty();
-            newExit = graph.add(BeginNode.create());
+            newExit = graph.add(new BeginNode());
             end.replaceAtPredecessor(newExit);
             end.safeDelete();
         } else {
             assert endsToMerge.size() > 1;
-            MergeNode newExitMerge = graph.add(MergeNode.create());
+            MergeNode newExitMerge = graph.add(new MergeNode());
             newExit = newExitMerge;
             FrameState state = loopBegin.stateAfter();
             FrameState duplicateState = null;
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentWhole.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopFragmentWhole.java	Mon Jan 12 20:39:04 2015 +0100
@@ -79,7 +79,7 @@
             public Node replacement(Node o) {
                 if (o == entry) {
                     if (endNode == null) {
-                        endNode = graph.add(EndNode.create());
+                        endNode = graph.add(new EndNode());
                     }
                     return endNode;
                 }
--- a/graal/com.oracle.graal.nodeinfo.processor/src/com/oracle/graal/nodeinfo/processor/GraphNodeVerifier.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodeinfo.processor/src/com/oracle/graal/nodeinfo/processor/GraphNodeVerifier.java	Mon Jan 12 20:39:04 2015 +0100
@@ -194,10 +194,8 @@
         for (ExecutableElement constructor : ElementFilter.constructorsIn(node.getEnclosedElements())) {
             if (constructor.getModifiers().contains(PRIVATE)) {
                 continue;
-            } else if (constructor.getModifiers().contains(PUBLIC)) {
-                throw new ElementException(constructor, "Node class constructor must not be public");
-            } else if (!constructor.getModifiers().contains(PROTECTED)) {
-                throw new ElementException(constructor, "Node class constructor must be protected");
+            } else if (!constructor.getModifiers().contains(PUBLIC) && !constructor.getModifiers().contains(PROTECTED)) {
+                throw new ElementException(constructor, "Node class constructor must be public or protected");
             }
 
             foundValidConstructor = true;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractFixedGuardNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractFixedGuardNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -87,15 +87,15 @@
     public DeoptimizeNode lowerToIf() {
         FixedNode currentNext = next();
         setNext(null);
-        DeoptimizeNode deopt = graph().add(DeoptimizeNode.create(action, reason));
+        DeoptimizeNode deopt = graph().add(new DeoptimizeNode(action, reason));
         deopt.setStateBefore(stateBefore());
         IfNode ifNode;
         BeginNode noDeoptSuccessor;
         if (negated) {
-            ifNode = graph().add(IfNode.create(condition, deopt, currentNext, 0));
+            ifNode = graph().add(new IfNode(condition, deopt, currentNext, 0));
             noDeoptSuccessor = ifNode.falseSuccessor();
         } else {
-            ifNode = graph().add(IfNode.create(condition, currentNext, deopt, 1));
+            ifNode = graph().add(new IfNode(condition, currentNext, deopt, 1));
             noDeoptSuccessor = ifNode.trueSuccessor();
         }
         ((FixedWithNextNode) predecessor()).setNext(ifNode);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BeginNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,19 +38,11 @@
 @NodeInfo(allowedUsageTypes = {InputType.Guard, InputType.Anchor})
 public class BeginNode extends FixedWithNextNode implements LIRLowerable, Simplifiable, GuardingNode, AnchoringNode, IterableNodeType {
 
-    public static BeginNode create() {
-        return new BeginNode();
-    }
-
-    protected BeginNode() {
+    public BeginNode() {
         super(StampFactory.forVoid());
     }
 
-    public static BeginNode create(Stamp stamp) {
-        return new BeginNode(stamp);
-    }
-
-    protected BeginNode(Stamp stamp) {
+    public BeginNode(Stamp stamp) {
         super(stamp);
     }
 
@@ -58,7 +50,7 @@
         if (with instanceof BeginNode) {
             return (BeginNode) with;
         }
-        BeginNode begin = with.graph().add(BeginNode.create());
+        BeginNode begin = with.graph().add(new BeginNode());
         begin.setNext(with);
         return begin;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BreakpointNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BreakpointNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -50,11 +50,7 @@
 
     @Input NodeInputList<ValueNode> arguments;
 
-    public static BreakpointNode create(ValueNode[] arguments) {
-        return new BreakpointNode(arguments);
-    }
-
-    protected BreakpointNode(ValueNode... arguments) {
+    public BreakpointNode(ValueNode[] arguments) {
         super(StampFactory.forVoid());
         this.arguments = new NodeInputList<>(this, arguments);
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConditionAnchorNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConditionAnchorNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,19 +35,11 @@
     @Input(InputType.Condition) LogicNode condition;
     protected boolean negated;
 
-    public static ConditionAnchorNode create(LogicNode condition) {
-        return new ConditionAnchorNode(condition);
-    }
-
-    protected ConditionAnchorNode(LogicNode condition) {
+    public ConditionAnchorNode(LogicNode condition) {
         this(condition, false);
     }
 
-    public static ConditionAnchorNode create(LogicNode condition, boolean negated) {
-        return new ConditionAnchorNode(condition, negated);
-    }
-
-    protected ConditionAnchorNode(LogicNode condition, boolean negated) {
+    public ConditionAnchorNode(LogicNode condition, boolean negated) {
         super(StampFactory.forVoid());
         this.negated = negated;
         this.condition = condition;
@@ -73,14 +65,14 @@
     public Node canonical(CanonicalizerTool tool, Node forValue) {
         if (condition instanceof LogicNegationNode) {
             LogicNegationNode negation = (LogicNegationNode) condition;
-            return ConditionAnchorNode.create(negation.getValue(), !negated);
+            return new ConditionAnchorNode(negation.getValue(), !negated);
         }
         if (condition instanceof LogicConstantNode) {
             LogicConstantNode c = (LogicConstantNode) condition;
             if (c.getValue() != negated) {
                 return null;
             } else {
-                return ValueAnchorNode.create(null);
+                return new ValueAnchorNode(null);
             }
         }
         return this;
@@ -89,7 +81,7 @@
     @Override
     public void lower(LoweringTool tool) {
         if (graph().getGuardsStage() == StructuredGraph.GuardsStage.FIXED_DEOPTS) {
-            ValueAnchorNode newAnchor = graph().add(ValueAnchorNode.create(null));
+            ValueAnchorNode newAnchor = graph().add(new ValueAnchorNode(null));
             graph().replaceFixedWithFixed(this, newAnchor);
         }
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -47,7 +47,7 @@
 
     private static ConstantNode createPrimitive(JavaConstant value) {
         assert value.getKind() != Kind.Object;
-        return ConstantNode.create(value, StampFactory.forConstant(value));
+        return new ConstantNode(value, StampFactory.forConstant(value));
     }
 
     /**
@@ -55,11 +55,7 @@
      *
      * @param value the constant
      */
-    public static ConstantNode create(Constant value, Stamp stamp) {
-        return new ConstantNode(value, stamp);
-    }
-
-    protected ConstantNode(Constant value, Stamp stamp) {
+    public ConstantNode(Constant value, Stamp stamp) {
         super(stamp);
         assert stamp != null && isCompatible(value, stamp);
         this.value = value;
@@ -128,7 +124,7 @@
             return forInt(constant.asInt(), graph);
         }
         if (constant.getKind() == Kind.Object) {
-            return unique(graph, ConstantNode.create(constant, StampFactory.forConstant(constant, metaAccess)));
+            return unique(graph, new ConstantNode(constant, StampFactory.forConstant(constant, metaAccess)));
         } else {
             return unique(graph, createPrimitive(constant));
         }
@@ -139,18 +135,18 @@
             return forInt(constant.asInt());
         }
         if (constant.getKind() == Kind.Object) {
-            return ConstantNode.create(constant, StampFactory.forConstant(constant, metaAccess));
+            return new ConstantNode(constant, StampFactory.forConstant(constant, metaAccess));
         } else {
             return createPrimitive(constant);
         }
     }
 
     public static ConstantNode forConstant(Stamp stamp, Constant constant, MetaAccessProvider metaAccess, StructuredGraph graph) {
-        return graph.unique(ConstantNode.create(constant, stamp.constant(constant, metaAccess)));
+        return graph.unique(new ConstantNode(constant, stamp.constant(constant, metaAccess)));
     }
 
     public static ConstantNode forConstant(Stamp stamp, Constant constant, MetaAccessProvider metaAccess) {
-        return ConstantNode.create(constant, stamp.constant(constant, metaAccess));
+        return new ConstantNode(constant, stamp.constant(constant, metaAccess));
     }
 
     /**
@@ -198,7 +194,7 @@
             return forConstant(primitive, null);
         } else {
             assert !(stamp instanceof AbstractObjectStamp);
-            return ConstantNode.create(constant, stamp.constant(constant, null));
+            return new ConstantNode(constant, stamp.constant(constant, null));
         }
     }
 
@@ -339,7 +335,7 @@
     private static ConstantNode forIntegerBits(int bits, JavaConstant constant, StructuredGraph graph) {
         long value = constant.asLong();
         long bounds = CodeUtil.signExtend(value, bits);
-        return unique(graph, ConstantNode.create(constant, StampFactory.forInteger(bits, bounds, bounds)));
+        return unique(graph, new ConstantNode(constant, StampFactory.forInteger(bits, bounds, bounds)));
     }
 
     /**
@@ -353,7 +349,7 @@
     private static ConstantNode forIntegerBits(int bits, JavaConstant constant) {
         long value = constant.asLong();
         long bounds = CodeUtil.signExtend(value, bits);
-        return ConstantNode.create(constant, StampFactory.forInteger(bits, bounds, bounds));
+        return new ConstantNode(constant, StampFactory.forInteger(bits, bounds, bounds));
     }
 
     /**
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -34,19 +34,11 @@
     protected final int debugId;
     protected final JavaConstant speculation;
 
-    public static DeoptimizeNode create(DeoptimizationAction action, DeoptimizationReason reason) {
-        return new DeoptimizeNode(action, reason);
-    }
-
-    protected DeoptimizeNode(DeoptimizationAction action, DeoptimizationReason reason) {
+    public DeoptimizeNode(DeoptimizationAction action, DeoptimizationReason reason) {
         this(action, reason, 0, JavaConstant.NULL_POINTER, null);
     }
 
-    public static DeoptimizeNode create(DeoptimizationAction action, DeoptimizationReason reason, int debugId, JavaConstant speculation, FrameState stateBefore) {
-        return new DeoptimizeNode(action, reason, debugId, speculation, stateBefore);
-    }
-
-    protected DeoptimizeNode(DeoptimizationAction action, DeoptimizationReason reason, int debugId, JavaConstant speculation, FrameState stateBefore) {
+    public DeoptimizeNode(DeoptimizationAction action, DeoptimizationReason reason, int debugId, JavaConstant speculation, FrameState stateBefore) {
         super(stateBefore);
         assert action != null;
         assert reason != null;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DirectCallTargetNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DirectCallTargetNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,11 +32,7 @@
 @NodeInfo
 public class DirectCallTargetNode extends LoweredCallTargetNode {
 
-    public static DirectCallTargetNode create(List<ValueNode> arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, CallingConvention.Type callType, InvokeKind invokeKind) {
-        return new DirectCallTargetNode(arguments, returnStamp, signature, target, callType, invokeKind);
-    }
-
-    protected DirectCallTargetNode(List<ValueNode> arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, CallingConvention.Type callType, InvokeKind invokeKind) {
+    public DirectCallTargetNode(List<ValueNode> arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, CallingConvention.Type callType, InvokeKind invokeKind) {
         super(arguments, returnStamp, signature, target, callType, invokeKind);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DispatchBeginNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DispatchBeginNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -31,18 +31,11 @@
 @NodeInfo
 public class DispatchBeginNode extends BeginStateSplitNode {
 
-    public static DispatchBeginNode create() {
-        return new DispatchBeginNode();
-    }
-
-    protected DispatchBeginNode() {
+    public DispatchBeginNode() {
     }
 
-    public static DispatchBeginNode create(Stamp stamp) {
-        return new DispatchBeginNode(stamp);
+    public DispatchBeginNode(Stamp stamp) {
+        super(stamp);
     }
 
-    protected DispatchBeginNode(Stamp stamp) {
-        super(stamp);
-    }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DynamicDeoptimizeNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DynamicDeoptimizeNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -33,11 +33,7 @@
     @Input ValueNode actionAndReason;
     @Input ValueNode speculation;
 
-    public static DynamicDeoptimizeNode create(ValueNode actionAndReason, ValueNode speculation) {
-        return new DynamicDeoptimizeNode(actionAndReason, speculation);
-    }
-
-    protected DynamicDeoptimizeNode(ValueNode actionAndReason, ValueNode speculation) {
+    public DynamicDeoptimizeNode(ValueNode actionAndReason, ValueNode speculation) {
         this.actionAndReason = actionAndReason;
         this.speculation = speculation;
     }
@@ -74,8 +70,8 @@
         if (actionAndReason.isConstant() && speculation.isConstant()) {
             JavaConstant constant = actionAndReason.asJavaConstant();
             JavaConstant speculationConstant = speculation.asJavaConstant();
-            DeoptimizeNode newDeopt = DeoptimizeNode.create(tool.getMetaAccess().decodeDeoptAction(constant), tool.getMetaAccess().decodeDeoptReason(constant),
-                            tool.getMetaAccess().decodeDebugId(constant), speculationConstant, stateBefore());
+            DeoptimizeNode newDeopt = new DeoptimizeNode(tool.getMetaAccess().decodeDeoptAction(constant), tool.getMetaAccess().decodeDeoptReason(constant), tool.getMetaAccess().decodeDebugId(
+                            constant), speculationConstant, stateBefore());
             return newDeopt;
         }
         return this;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EndNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EndNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -26,10 +26,7 @@
 
 @NodeInfo(allowedUsageTypes = {InputType.Association})
 public class EndNode extends AbstractEndNode {
-    public static EndNode create() {
-        return new EndNode();
+    public EndNode() {
     }
 
-    protected EndNode() {
-    }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EntryMarkerNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/EntryMarkerNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,11 +35,7 @@
 @NodeInfo(allowedUsageTypes = {InputType.Association})
 public class EntryMarkerNode extends BeginStateSplitNode implements IterableNodeType, Simplifiable, LIRLowerable {
 
-    public static EntryMarkerNode create() {
-        return new EntryMarkerNode();
-    }
-
-    protected EntryMarkerNode() {
+    public EntryMarkerNode() {
     }
 
     @Override
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedGuardNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedGuardNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,19 +32,11 @@
 @NodeInfo(nameTemplate = "FixedGuard(!={p#negated}) {p#reason/s}", allowedUsageTypes = {InputType.Guard})
 public class FixedGuardNode extends AbstractFixedGuardNode implements Lowerable, IterableNodeType {
 
-    public static FixedGuardNode create(LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action) {
-        return new FixedGuardNode(condition, deoptReason, action);
-    }
-
-    protected FixedGuardNode(LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action) {
+    public FixedGuardNode(LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action) {
         this(condition, deoptReason, action, false);
     }
 
-    public static FixedGuardNode create(LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action, boolean negated) {
-        return new FixedGuardNode(condition, deoptReason, action, negated);
-    }
-
-    protected FixedGuardNode(LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action, boolean negated) {
+    public FixedGuardNode(LogicNode condition, DeoptimizationReason deoptReason, DeoptimizationAction action, boolean negated) {
         super(condition, deoptReason, action, negated);
     }
 
@@ -60,7 +52,7 @@
                     tool.deleteBranch(currentNext);
                 }
 
-                DeoptimizeNode deopt = graph().add(DeoptimizeNode.create(getAction(), getReason()));
+                DeoptimizeNode deopt = graph().add(new DeoptimizeNode(getAction(), getReason()));
                 deopt.setStateBefore(stateBefore());
                 setNext(deopt);
             }
@@ -69,8 +61,8 @@
         } else if (condition() instanceof ShortCircuitOrNode) {
             ShortCircuitOrNode shortCircuitOr = (ShortCircuitOrNode) condition();
             if (isNegated() && usages().isEmpty()) {
-                graph().addAfterFixed(this, graph().add(FixedGuardNode.create(shortCircuitOr.getY(), getReason(), getAction(), !shortCircuitOr.isYNegated())));
-                graph().replaceFixedWithFixed(this, graph().add(FixedGuardNode.create(shortCircuitOr.getX(), getReason(), getAction(), !shortCircuitOr.isXNegated())));
+                graph().addAfterFixed(this, graph().add(new FixedGuardNode(shortCircuitOr.getY(), getReason(), getAction(), !shortCircuitOr.isYNegated())));
+                graph().replaceFixedWithFixed(this, graph().add(new FixedGuardNode(shortCircuitOr.getX(), getReason(), getAction(), !shortCircuitOr.isXNegated())));
             }
         }
     }
@@ -80,7 +72,7 @@
         if (graph().getGuardsStage() == StructuredGraph.GuardsStage.FLOATING_GUARDS) {
             ValueNode guard = tool.createGuard(this, condition(), getReason(), getAction(), isNegated()).asNode();
             this.replaceAtUsages(guard);
-            ValueAnchorNode newAnchor = graph().add(ValueAnchorNode.create(guard.asNode()));
+            ValueAnchorNode newAnchor = graph().add(new ValueAnchorNode(guard.asNode()));
             graph().replaceFixedWithFixed(this, newAnchor);
         } else {
             lowerToIf().lower(tool);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java	Mon Jan 12 20:39:04 2015 +0100
@@ -74,26 +74,7 @@
 
     protected final ResolvedJavaMethod method;
 
-    /**
-     * Creates a {@code FrameState} with the given locals, stack expressions and locked monitors.
-     *
-     * @param method the method for this frame state
-     * @param bci the bytecode index of the frame state
-     * @param values the locals, stack expressions and locked objects, in this order
-     * @param localsSize the number of locals in the values list
-     * @param stackSize the number of stack expressions in the values list
-     * @param rethrowException if true, this FrameState will throw an exception (taken from the top
-     *            of the expression stack) during deoptimization
-     * @param duringCall true if this FrameState describes the state during a call
-     * @param monitorIds one MonitorIdNode for each locked object
-     * @param virtualObjectMappings a description of the current state for every virtual object
-     */
-    public static FrameState create(FrameState outerFrameState, ResolvedJavaMethod method, int bci, List<ValueNode> values, int localsSize, int stackSize, boolean rethrowException,
-                    boolean duringCall, List<MonitorIdNode> monitorIds, List<EscapeObjectState> virtualObjectMappings) {
-        return new FrameState(outerFrameState, method, bci, values, localsSize, stackSize, rethrowException, duringCall, monitorIds, virtualObjectMappings);
-    }
-
-    protected FrameState(FrameState outerFrameState, ResolvedJavaMethod method, int bci, List<ValueNode> values, int localsSize, int stackSize, boolean rethrowException, boolean duringCall,
+    public FrameState(FrameState outerFrameState, ResolvedJavaMethod method, int bci, List<ValueNode> values, int localsSize, int stackSize, boolean rethrowException, boolean duringCall,
                     List<MonitorIdNode> monitorIds, List<EscapeObjectState> virtualObjectMappings) {
         assert stackSize >= 0;
         this.outerFrameState = outerFrameState;
@@ -111,27 +92,13 @@
         METRIC_FRAMESTATE_COUNT.increment();
     }
 
-    /**
-     * Simple constructor used to create marker FrameStates.
-     *
-     * @param bci marker bci, needs to be &lt; 0
-     */
-    public static FrameState create(int bci) {
-        return new FrameState(bci);
-    }
-
-    protected FrameState(int bci) {
+    public FrameState(int bci) {
         this(null, null, bci, Collections.<ValueNode> emptyList(), 0, 0, false, false, Collections.<MonitorIdNode> emptyList(), Collections.<EscapeObjectState> emptyList());
         assert bci == BytecodeFrame.BEFORE_BCI || bci == BytecodeFrame.AFTER_BCI || bci == BytecodeFrame.AFTER_EXCEPTION_BCI || bci == BytecodeFrame.UNKNOWN_BCI ||
                         bci == BytecodeFrame.INVALID_FRAMESTATE_BCI;
     }
 
-    public static FrameState create(ResolvedJavaMethod method, int bci, ValueNode[] locals, List<ValueNode> stack, ValueNode[] locks, MonitorIdNode[] monitorIds, boolean rethrowException,
-                    boolean duringCall) {
-        return new FrameState(method, bci, locals, stack, locks, monitorIds, rethrowException, duringCall);
-    }
-
-    protected FrameState(ResolvedJavaMethod method, int bci, ValueNode[] locals, List<ValueNode> stack, ValueNode[] locks, MonitorIdNode[] monitorIds, boolean rethrowException, boolean duringCall) {
+    public FrameState(ResolvedJavaMethod method, int bci, ValueNode[] locals, List<ValueNode> stack, ValueNode[] locks, MonitorIdNode[] monitorIds, boolean rethrowException, boolean duringCall) {
         this(null, method, bci, createValues(locals, stack, locks), locals.length, stack.size(), rethrowException, duringCall, Arrays.asList(monitorIds), Collections.<EscapeObjectState> emptyList());
     }
 
@@ -204,7 +171,7 @@
      * Gets a copy of this frame state.
      */
     public FrameState duplicate(int newBci) {
-        return graph().add(FrameState.create(outerFrameState(), method, newBci, values, localsSize, stackSize, rethrowException, duringCall, monitorIds, virtualObjectMappings));
+        return graph().add(new FrameState(outerFrameState(), method, newBci, values, localsSize, stackSize, rethrowException, duringCall, monitorIds, virtualObjectMappings));
     }
 
     /**
@@ -228,7 +195,7 @@
         for (EscapeObjectState state : virtualObjectMappings) {
             newVirtualMappings.add(state.duplicateWithVirtualState());
         }
-        return graph().add(FrameState.create(newOuterFrameState, method, bci, values, localsSize, stackSize, rethrowException, duringCall, monitorIds, newVirtualMappings));
+        return graph().add(new FrameState(newOuterFrameState, method, bci, values, localsSize, stackSize, rethrowException, duringCall, monitorIds, newVirtualMappings));
     }
 
     /**
@@ -279,7 +246,7 @@
         copy.addAll(values.subList(localsSize + stackSize, values.size()));
 
         assert checkStackDepth(bci, stackSize, duringCall, newBci, newStackSize, newDuringCall);
-        return graph().add(FrameState.create(outerFrameState(), method, newBci, copy, localsSize, newStackSize, newRethrowException, newDuringCall, monitorIds, virtualObjectMappings));
+        return graph().add(new FrameState(outerFrameState(), method, newBci, copy, localsSize, newStackSize, newRethrowException, newDuringCall, monitorIds, virtualObjectMappings));
     }
 
     /**
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FullInfopointNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FullInfopointNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -33,11 +33,7 @@
 public class FullInfopointNode extends InfopointNode implements LIRLowerable, NodeWithState {
     @Input(InputType.State) FrameState state;
 
-    public static FullInfopointNode create(InfopointReason reason, FrameState state) {
-        return new FullInfopointNode(reason, state);
-    }
-
-    protected FullInfopointNode(InfopointReason reason, FrameState state) {
+    public FullInfopointNode(InfopointReason reason, FrameState state) {
         super(reason);
         this.state = state;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -50,11 +50,7 @@
     protected DeoptimizationAction action;
     protected boolean negated;
 
-    public static GuardNode create(LogicNode condition, AnchoringNode anchor, DeoptimizationReason reason, DeoptimizationAction action, boolean negated, JavaConstant speculation) {
-        return new GuardNode(condition, anchor, reason, action, negated, speculation);
-    }
-
-    protected GuardNode(LogicNode condition, AnchoringNode anchor, DeoptimizationReason reason, DeoptimizationAction action, boolean negated, JavaConstant speculation) {
+    public GuardNode(LogicNode condition, AnchoringNode anchor, DeoptimizationReason reason, DeoptimizationAction action, boolean negated, JavaConstant speculation) {
         super(StampFactory.forVoid(), anchor);
         this.condition = condition;
         this.reason = reason;
@@ -103,7 +99,7 @@
     public Node canonical(CanonicalizerTool tool) {
         if (condition() instanceof LogicNegationNode) {
             LogicNegationNode negation = (LogicNegationNode) condition();
-            return GuardNode.create(negation.getValue(), getAnchor(), reason, action, !negated, speculation);
+            return new GuardNode(negation.getValue(), getAnchor(), reason, action, !negated, speculation);
         }
         if (condition() instanceof LogicConstantNode) {
             LogicConstantNode c = (LogicConstantNode) condition();
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardPhiNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardPhiNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,20 +35,12 @@
 
     @OptionalInput(InputType.Guard) NodeInputList<ValueNode> values;
 
-    public static GuardPhiNode create(MergeNode merge) {
-        return new GuardPhiNode(merge);
-    }
-
-    protected GuardPhiNode(MergeNode merge) {
+    public GuardPhiNode(MergeNode merge) {
         super(StampFactory.forVoid(), merge);
         this.values = new NodeInputList<>(this);
     }
 
-    public static GuardPhiNode create(MergeNode merge, ValueNode[] values) {
-        return new GuardPhiNode(merge, values);
-    }
-
-    protected GuardPhiNode(MergeNode merge, ValueNode[] values) {
+    public GuardPhiNode(MergeNode merge, ValueNode[] values) {
         super(StampFactory.forVoid(), merge);
         this.values = new NodeInputList<>(this, values);
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardProxyNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardProxyNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -33,11 +33,7 @@
 
     @Input(InputType.Guard) GuardingNode value;
 
-    public static GuardProxyNode create(GuardingNode value, BeginNode proxyPoint) {
-        return new GuardProxyNode(value, proxyPoint);
-    }
-
-    protected GuardProxyNode(GuardingNode value, BeginNode proxyPoint) {
+    public GuardProxyNode(GuardingNode value, BeginNode proxyPoint) {
         super(StampFactory.forVoid(), proxyPoint);
         this.value = value;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardedValueNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardedValueNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -42,21 +42,13 @@
     @Input ValueNode object;
     protected final Stamp piStamp;
 
-    public static GuardedValueNode create(ValueNode object, GuardingNode guard, Stamp stamp) {
-        return new GuardedValueNode(object, guard, stamp);
-    }
-
-    protected GuardedValueNode(ValueNode object, GuardingNode guard, Stamp stamp) {
+    public GuardedValueNode(ValueNode object, GuardingNode guard, Stamp stamp) {
         super(stamp, guard);
         this.object = object;
         this.piStamp = stamp;
     }
 
-    public static GuardedValueNode create(ValueNode object, GuardingNode guard) {
-        return new GuardedValueNode(object, guard);
-    }
-
-    protected GuardedValueNode(ValueNode object, GuardingNode guard) {
+    public GuardedValueNode(ValueNode object, GuardingNode guard) {
         this(object, guard, object.stamp());
     }
 
@@ -93,7 +85,7 @@
             if (stamp().equals(object().stamp())) {
                 return object();
             } else {
-                return PiNode.create(object(), stamp());
+                return new PiNode(object(), stamp());
             }
         }
         return this;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/GuardingPiNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -65,30 +65,11 @@
         return action;
     }
 
-    /**
-     * Constructor for {@link #guardingNonNull(Object)} node intrinsic.
-     */
-    public static GuardingPiNode create(ValueNode object) {
-        return new GuardingPiNode(object);
-    }
-
-    protected GuardingPiNode(ValueNode object) {
-        this(object, object.graph().unique(IsNullNode.create(object)), true, DeoptimizationReason.NullCheckException, DeoptimizationAction.None, object.stamp().join(StampFactory.objectNonNull()));
+    public GuardingPiNode(ValueNode object) {
+        this(object, object.graph().unique(new IsNullNode(object)), true, DeoptimizationReason.NullCheckException, DeoptimizationAction.None, object.stamp().join(StampFactory.objectNonNull()));
     }
 
-    /**
-     * Creates a guarding pi node.
-     *
-     * @param object the object whose type is refined if this guard succeeds
-     * @param condition the condition to test
-     * @param negateCondition the guard succeeds if {@code condition != negateCondition}
-     * @param stamp the refined type of the object if the guard succeeds
-     */
-    public static GuardingPiNode create(ValueNode object, ValueNode condition, boolean negateCondition, DeoptimizationReason reason, DeoptimizationAction action, Stamp stamp) {
-        return new GuardingPiNode(object, condition, negateCondition, reason, action, stamp);
-    }
-
-    protected GuardingPiNode(ValueNode object, ValueNode condition, boolean negateCondition, DeoptimizationReason reason, DeoptimizationAction action, Stamp stamp) {
+    public GuardingPiNode(ValueNode object, ValueNode condition, boolean negateCondition, DeoptimizationReason reason, DeoptimizationAction action, Stamp stamp) {
         super(stamp);
         assert stamp != null;
         this.piStamp = stamp;
@@ -102,9 +83,9 @@
     @Override
     public void lower(LoweringTool tool) {
         GuardingNode guard = tool.createGuard(next(), condition, reason, action, negated);
-        ValueAnchorNode anchor = graph().add(ValueAnchorNode.create((ValueNode) guard));
+        ValueAnchorNode anchor = graph().add(new ValueAnchorNode((ValueNode) guard));
         if (usages().isNotEmpty()) {
-            PiNode pi = graph().unique(PiNode.create(object, stamp(), (ValueNode) guard));
+            PiNode pi = graph().unique(new PiNode(object, stamp(), (ValueNode) guard));
             replaceAtUsages(pi);
         }
         graph().replaceFixedWithFixed(this, anchor);
@@ -127,19 +108,19 @@
     public Node canonical(CanonicalizerTool tool) {
         if (stamp() == StampFactory.illegal(object.getKind())) {
             // The guard always fails
-            return DeoptimizeNode.create(action, reason);
+            return new DeoptimizeNode(action, reason);
         }
         if (condition instanceof LogicConstantNode) {
             LogicConstantNode c = (LogicConstantNode) condition;
             if (c.getValue() == negated) {
                 // The guard always fails
-                return DeoptimizeNode.create(action, reason);
+                return new DeoptimizeNode(action, reason);
             } else if (stamp().equals(object().stamp())) {
                 // The guard always succeeds, and does not provide new type information
                 return object;
             } else {
                 // The guard always succeeds, and provides new type information
-                return PiNode.create(object, stamp());
+                return new PiNode(object, stamp());
             }
         }
         return this;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -65,25 +65,16 @@
         condition = x;
     }
 
-    public static IfNode create(LogicNode condition, FixedNode trueSuccessor, FixedNode falseSuccessor, double trueSuccessorProbability) {
-        return new IfNode(condition, trueSuccessor, falseSuccessor, trueSuccessorProbability);
-    }
-
-    protected IfNode(LogicNode condition, FixedNode trueSuccessor, FixedNode falseSuccessor, double trueSuccessorProbability) {
+    public IfNode(LogicNode condition, FixedNode trueSuccessor, FixedNode falseSuccessor, double trueSuccessorProbability) {
         this(condition, BeginNode.begin(trueSuccessor), BeginNode.begin(falseSuccessor), trueSuccessorProbability);
     }
 
-    public static IfNode create(LogicNode condition, BeginNode trueSuccessor, BeginNode falseSuccessor, double trueSuccessorProbability) {
-        return new IfNode(condition, trueSuccessor, falseSuccessor, trueSuccessorProbability);
-    }
-
-    protected IfNode(LogicNode condition, BeginNode trueSuccessor, BeginNode falseSuccessor, double trueSuccessorProbability) {
+    public IfNode(LogicNode condition, BeginNode trueSuccessor, BeginNode falseSuccessor, double trueSuccessorProbability) {
         super(StampFactory.forVoid());
         this.condition = condition;
         this.falseSuccessor = falseSuccessor;
         this.trueSuccessor = trueSuccessor;
         setTrueSuccessorProbability(trueSuccessorProbability);
-
     }
 
     /**
@@ -167,7 +158,7 @@
             setTrueSuccessor(null);
             setFalseSuccessor(null);
             LogicNegationNode negation = (LogicNegationNode) condition();
-            IfNode newIfNode = graph().add(IfNode.create(negation.getValue(), falseSucc, trueSucc, 1 - trueSuccessorProbability));
+            IfNode newIfNode = graph().add(new IfNode(negation.getValue(), falseSucc, trueSucc, 1 - trueSuccessorProbability));
             predecessor().replaceFirstSuccessor(this, newIfNode);
             GraphUtil.killWithUnusedFloatingInputs(this);
             return;
@@ -293,7 +284,7 @@
                      */
                     if (lessThan2.getX() == lessThan.getX() && lessThan2.getY().stamp() instanceof IntegerStamp && ((IntegerStamp) lessThan2.getY().stamp()).isPositive() &&
                                     sameDestination(trueSuccessor(), ifNode2.falseSuccessor)) {
-                        below = graph().unique(IntegerBelowNode.create(lessThan2.getX(), lessThan2.getY()));
+                        below = graph().unique(new IntegerBelowNode(lessThan2.getX(), lessThan2.getY()));
                         // swap direction
                         BeginNode tmp = falseSucc;
                         falseSucc = trueSucc;
@@ -308,14 +299,14 @@
                         JavaConstant positive = lessThan2.getX().asJavaConstant();
                         if (positive != null && positive.asLong() > 0 && positive.asLong() < positive.getKind().getMaxValue()) {
                             ConstantNode newLimit = ConstantNode.forIntegerKind(positive.getKind(), positive.asLong() + 1, graph());
-                            below = graph().unique(IntegerBelowNode.create(lessThan.getX(), newLimit));
+                            below = graph().unique(new IntegerBelowNode(lessThan.getX(), newLimit));
                         }
                     }
                     if (below != null) {
                         ifNode2.setTrueSuccessor(null);
                         ifNode2.setFalseSuccessor(null);
 
-                        IfNode newIfNode = graph().add(IfNode.create(below, falseSucc, trueSucc, 1 - trueSuccessorProbability));
+                        IfNode newIfNode = graph().add(new IfNode(below, falseSucc, trueSucc, 1 - trueSuccessorProbability));
                         // Remove the < 0 test.
                         tool.deleteBranch(trueSuccessor);
                         graph().removeSplit(this, falseSuccessor);
@@ -552,7 +543,7 @@
                     }
                 }
             }
-            ReturnNode newReturn = graph().add(ReturnNode.create(value));
+            ReturnNode newReturn = graph().add(new ReturnNode(value));
             replaceAtPredecessor(newReturn);
             GraphUtil.killCFG(this);
             return true;
@@ -574,7 +565,7 @@
             return null;
         }
         if (trueValue.isConstant() && falseValue.isConstant()) {
-            return graph().unique(ConditionalNode.create(condition(), trueValue, falseValue));
+            return graph().unique(new ConditionalNode(condition(), trueValue, falseValue));
         } else {
             ConditionalNode conditional = null;
             ValueNode constant = null;
@@ -604,7 +595,7 @@
             if (otherValue.isConstant()) {
                 double shortCutProbability = probability(trueSuccessor());
                 LogicNode newCondition = LogicNode.or(condition(), negateCondition, conditional.condition(), negateConditionalCondition, shortCutProbability);
-                return graph().unique(ConditionalNode.create(newCondition, constant, otherValue));
+                return graph().unique(new ConditionalNode(newCondition, constant, otherValue));
             }
         }
         return null;
@@ -859,9 +850,9 @@
             } else {
                 // Need a new phi in case the frame state is used by more than the merge being
                 // removed
-                MergeNode newMerge = graph().add(MergeNode.create());
+                MergeNode newMerge = graph().add(new MergeNode());
                 PhiNode oldPhi = (PhiNode) oldMerge.usages().first();
-                PhiNode newPhi = graph().addWithoutUnique(ValuePhiNode.create(oldPhi.stamp(), newMerge));
+                PhiNode newPhi = graph().addWithoutUnique(new ValuePhiNode(oldPhi.stamp(), newMerge));
 
                 for (AbstractEndNode end : ends) {
                     newPhi.addInput(phiValues.get(end));
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IndirectCallTargetNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IndirectCallTargetNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -34,12 +34,7 @@
 
     @Input protected ValueNode computedAddress;
 
-    public static IndirectCallTargetNode create(ValueNode computedAddress, List<ValueNode> arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target,
-                    CallingConvention.Type callType, InvokeKind invokeKind) {
-        return new IndirectCallTargetNode(computedAddress, arguments, returnStamp, signature, target, callType, invokeKind);
-    }
-
-    protected IndirectCallTargetNode(ValueNode computedAddress, List<ValueNode> arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, CallingConvention.Type callType,
+    public IndirectCallTargetNode(ValueNode computedAddress, List<ValueNode> arguments, Stamp returnStamp, JavaType[] signature, ResolvedJavaMethod target, CallingConvention.Type callType,
                     InvokeKind invokeKind) {
         super(arguments, returnStamp, signature, target, callType, invokeKind);
         this.computedAddress = computedAddress;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -46,32 +46,11 @@
     protected boolean polymorphic;
     protected boolean useForInlining;
 
-    /**
-     * Constructs a new Invoke instruction.
-     *
-     * @param callTarget the target method being called
-     * @param bci the bytecode index of the original invoke (used for debug infos)
-     */
-    public static InvokeNode create(CallTargetNode callTarget, int bci) {
-        return new InvokeNode(callTarget, bci);
-    }
-
-    protected InvokeNode(CallTargetNode callTarget, int bci) {
+    public InvokeNode(CallTargetNode callTarget, int bci) {
         this(callTarget, bci, callTarget.returnStamp());
     }
 
-    /**
-     * Constructs a new Invoke instruction.
-     *
-     * @param callTarget the target method being called
-     * @param bci the bytecode index of the original invoke (used for debug infos)
-     * @param stamp the stamp to be used for this value
-     */
-    public static InvokeNode create(CallTargetNode callTarget, int bci, Stamp stamp) {
-        return new InvokeNode(callTarget, bci, stamp);
-    }
-
-    protected InvokeNode(CallTargetNode callTarget, int bci, Stamp stamp) {
+    public InvokeNode(CallTargetNode callTarget, int bci, Stamp stamp) {
         super(stamp);
         this.callTarget = callTarget;
         this.bci = bci;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeWithExceptionNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -48,11 +48,7 @@
     protected boolean useForInlining;
     protected double exceptionProbability;
 
-    public static InvokeWithExceptionNode create(CallTargetNode callTarget, BeginNode exceptionEdge, int bci) {
-        return new InvokeWithExceptionNode(callTarget, exceptionEdge, bci);
-    }
-
-    protected InvokeWithExceptionNode(CallTargetNode callTarget, BeginNode exceptionEdge, int bci) {
+    public InvokeWithExceptionNode(CallTargetNode callTarget, BeginNode exceptionEdge, int bci) {
         super(callTarget.returnStamp());
         this.exceptionEdge = exceptionEdge;
         this.bci = bci;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/KillingBeginNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/KillingBeginNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -31,11 +31,7 @@
 
     protected LocationIdentity locationIdentity;
 
-    public static KillingBeginNode create(LocationIdentity locationIdentity) {
-        return new KillingBeginNode(locationIdentity);
-    }
-
-    protected KillingBeginNode(LocationIdentity locationIdentity) {
+    public KillingBeginNode(LocationIdentity locationIdentity) {
         this.locationIdentity = locationIdentity;
     }
 
@@ -43,7 +39,7 @@
         if (with instanceof KillingBeginNode) {
             return (KillingBeginNode) with;
         }
-        KillingBeginNode begin = with.graph().add(KillingBeginNode.create(locationIdentity));
+        KillingBeginNode begin = with.graph().add(new KillingBeginNode(locationIdentity));
         begin.setNext(with);
         return begin;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicConstantNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicConstantNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -34,11 +34,7 @@
 
     protected final boolean value;
 
-    public static LogicConstantNode create(boolean value) {
-        return new LogicConstantNode(value);
-    }
-
-    protected LogicConstantNode(boolean value) {
+    public LogicConstantNode(boolean value) {
         super();
         this.value = value;
     }
@@ -51,7 +47,7 @@
      * @return a node representing the boolean
      */
     public static LogicConstantNode forBoolean(boolean v, Graph graph) {
-        return graph.unique(LogicConstantNode.create(v));
+        return graph.unique(new LogicConstantNode(v));
     }
 
     /**
@@ -61,7 +57,7 @@
      * @return a node representing the boolean
      */
     public static LogicConstantNode forBoolean(boolean v) {
-        return LogicConstantNode.create(v);
+        return new LogicConstantNode(v);
     }
 
     /**
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicNegationNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicNegationNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -33,11 +33,7 @@
 
     @Input(InputType.Condition) LogicNode value;
 
-    public static LogicNegationNode create(LogicNode value) {
-        return new LogicNegationNode(value);
-    }
-
-    protected LogicNegationNode(LogicNode value) {
+    public LogicNegationNode(LogicNode value) {
         this.value = value;
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -41,8 +41,8 @@
 
     public static LogicNode and(LogicNode a, boolean negateA, LogicNode b, boolean negateB, double shortCircuitProbability) {
         StructuredGraph graph = a.graph();
-        ShortCircuitOrNode notAorNotB = graph.unique(ShortCircuitOrNode.create(a, !negateA, b, !negateB, shortCircuitProbability));
-        return graph.unique(LogicNegationNode.create(notAorNotB));
+        ShortCircuitOrNode notAorNotB = graph.unique(new ShortCircuitOrNode(a, !negateA, b, !negateB, shortCircuitProbability));
+        return graph.unique(new LogicNegationNode(notAorNotB));
     }
 
     public static LogicNode or(LogicNode a, LogicNode b, double shortCircuitProbability) {
@@ -50,6 +50,6 @@
     }
 
     public static LogicNode or(LogicNode a, boolean negateA, LogicNode b, boolean negateB, double shortCircuitProbability) {
-        return a.graph().unique(ShortCircuitOrNode.create(a, negateA, b, negateB, shortCircuitProbability));
+        return a.graph().unique(new ShortCircuitOrNode(a, negateA, b, negateB, shortCircuitProbability));
     }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopBeginNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopBeginNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -44,11 +44,7 @@
     protected int unswitches;
     @OptionalInput(InputType.Guard) GuardingNode overflowGuard;
 
-    public static LoopBeginNode create() {
-        return new LoopBeginNode();
-    }
-
-    protected LoopBeginNode() {
+    public LoopBeginNode() {
         loopFrequency = 1;
     }
 
@@ -195,7 +191,7 @@
         for (LoopExitNode loopexit : loopExits().snapshot()) {
             loopexit.removeProxies();
             FrameState loopStateAfter = loopexit.stateAfter();
-            graph().replaceFixedWithFixed(loopexit, graph().add(BeginNode.create()));
+            graph().replaceFixedWithFixed(loopexit, graph().add(new BeginNode()));
             if (loopStateAfter != null && loopStateAfter.isAlive() && loopStateAfter.usages().isEmpty()) {
                 GraphUtil.killWithUnusedFloatingInputs(loopStateAfter);
             }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopEndNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopEndNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,11 +35,7 @@
     protected boolean canSafepoint;
     protected int endIndex;
 
-    public static LoopEndNode create(LoopBeginNode begin) {
-        return new LoopEndNode(begin);
-    }
-
-    protected LoopEndNode(LoopBeginNode begin) {
+    public LoopEndNode(LoopBeginNode begin) {
         int idx = begin.nextEndIndex();
         assert idx >= 0;
         this.endIndex = idx;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -31,11 +31,7 @@
 
     @Input(InputType.Association) LoopBeginNode loopBegin;
 
-    public static LoopExitNode create(LoopBeginNode loop) {
-        return new LoopExitNode(loop);
-    }
-
-    protected LoopExitNode(LoopBeginNode loop) {
+    public LoopExitNode(LoopBeginNode loop) {
         assert loop != null;
         loopBegin = loop;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryMapNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryMapNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -50,11 +50,7 @@
         return true;
     }
 
-    public static MemoryMapNode create(Map<LocationIdentity, MemoryNode> mmap) {
-        return new MemoryMapNode(mmap);
-    }
-
-    protected MemoryMapNode(Map<LocationIdentity, MemoryNode> mmap) {
+    public MemoryMapNode(Map<LocationIdentity, MemoryNode> mmap) {
         super(StampFactory.forVoid());
         locationIdentities = new ArrayList<>(mmap.keySet());
         nodes = new NodeInputList<>(this, mmap.values());
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryPhiNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MemoryPhiNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -37,21 +37,13 @@
     @Input(InputType.Memory) NodeInputList<ValueNode> values;
     protected final LocationIdentity locationIdentity;
 
-    public static MemoryPhiNode create(MergeNode merge, LocationIdentity locationIdentity) {
-        return new MemoryPhiNode(merge, locationIdentity);
-    }
-
-    protected MemoryPhiNode(MergeNode merge, LocationIdentity locationIdentity) {
+    public MemoryPhiNode(MergeNode merge, LocationIdentity locationIdentity) {
         super(StampFactory.forVoid(), merge);
         this.locationIdentity = locationIdentity;
         this.values = new NodeInputList<>(this);
     }
 
-    public static MemoryPhiNode create(MergeNode merge, LocationIdentity locationIdentity, ValueNode[] values) {
-        return new MemoryPhiNode(merge, locationIdentity, values);
-    }
-
-    protected MemoryPhiNode(MergeNode merge, LocationIdentity locationIdentity, ValueNode[] values) {
+    public MemoryPhiNode(MergeNode merge, LocationIdentity locationIdentity, ValueNode[] values) {
         super(StampFactory.forVoid(), merge);
         this.locationIdentity = locationIdentity;
         this.values = new NodeInputList<>(this, values);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MergeNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MergeNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -39,11 +39,7 @@
  */
 @NodeInfo(allowedUsageTypes = {InputType.Association})
 public class MergeNode extends BeginStateSplitNode implements IterableNodeType, LIRLowerable {
-    public static MergeNode create() {
-        return new MergeNode();
-    }
-
-    protected MergeNode() {
+    public MergeNode() {
     }
 
     @Input(InputType.Association) protected NodeInputList<AbstractEndNode> ends = new NodeInputList<>(this);
@@ -175,9 +171,9 @@
                 }
                 AbstractEndNode newEnd;
                 if (merge instanceof LoopBeginNode) {
-                    newEnd = graph().add(LoopEndNode.create((LoopBeginNode) merge));
+                    newEnd = graph().add(new LoopEndNode((LoopBeginNode) merge));
                 } else {
-                    newEnd = graph().add(EndNode.create());
+                    newEnd = graph().add(new EndNode());
                     merge.addForwardEnd(newEnd);
                 }
                 for (PhiNode phi : merge.phis()) {
@@ -216,7 +212,7 @@
             ValuePhiNode returnValuePhi = returnNode.result() == null || !isPhiAtMerge(returnNode.result()) ? null : (ValuePhiNode) returnNode.result();
             List<AbstractEndNode> endNodes = forwardEnds().snapshot();
             for (AbstractEndNode end : endNodes) {
-                ReturnNode newReturn = graph().add(ReturnNode.create(returnValuePhi == null ? returnNode.result() : returnValuePhi.valueAt(end)));
+                ReturnNode newReturn = graph().add(new ReturnNode(returnValuePhi == null ? returnNode.result() : returnValuePhi.valueAt(end)));
                 if (tool != null) {
                     tool.addToWorkList(end.predecessor());
                 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ParameterNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ParameterNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -34,11 +34,7 @@
 @NodeInfo(nameTemplate = "Param({p#index})")
 public class ParameterNode extends AbstractLocalNode implements IterableNodeType, UncheckedInterfaceProvider {
 
-    public static ParameterNode create(int index, Stamp stamp) {
-        return new ParameterNode(index, stamp);
-    }
-
-    protected ParameterNode(int index, Stamp stamp) {
+    public ParameterNode(int index, Stamp stamp) {
         super(index, stamp);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PhiNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PhiNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -143,17 +143,13 @@
     @NodeInfo
     static class MultipleValuesNode extends ValueNode {
 
-        public static MultipleValuesNode create() {
-            return new MultipleValuesNode();
-        }
-
-        protected MultipleValuesNode() {
+        public MultipleValuesNode() {
             super(null);
         }
 
     }
 
-    public static final ValueNode MULTIPLE_VALUES = MultipleValuesNode.create();
+    public static final ValueNode MULTIPLE_VALUES = new MultipleValuesNode();
 
     /**
      * If all inputs are the same value, this value is returned, otherwise {@link #MULTIPLE_VALUES}.
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiArrayNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiArrayNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -44,11 +44,7 @@
         return length;
     }
 
-    public static PiArrayNode create(ValueNode object, ValueNode length, Stamp stamp) {
-        return new PiArrayNode(object, length, stamp);
-    }
-
-    protected PiArrayNode(ValueNode object, ValueNode length, Stamp stamp) {
+    public PiArrayNode(ValueNode object, ValueNode length, Stamp stamp) {
         super(object, stamp);
         this.length = length;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -51,31 +51,19 @@
         return object;
     }
 
-    public static PiNode create(ValueNode object, Stamp stamp) {
-        return new PiNode(object, stamp);
-    }
-
-    protected PiNode(ValueNode object, Stamp stamp) {
+    public PiNode(ValueNode object, Stamp stamp) {
         super(stamp);
         this.piStamp = stamp;
         this.object = object;
     }
 
-    public static PiNode create(ValueNode object, Stamp stamp, ValueNode anchor) {
-        return new PiNode(object, stamp, anchor);
-    }
-
-    protected PiNode(ValueNode object, Stamp stamp, ValueNode anchor) {
+    public PiNode(ValueNode object, Stamp stamp, ValueNode anchor) {
         super(stamp, (GuardingNode) anchor);
         this.object = object;
         this.piStamp = stamp;
     }
 
-    public static PiNode create(ValueNode object, ResolvedJavaType toType, boolean exactType, boolean nonNull) {
-        return new PiNode(object, toType, exactType, nonNull);
-    }
-
-    protected PiNode(ValueNode object, ResolvedJavaType toType, boolean exactType, boolean nonNull) {
+    public PiNode(ValueNode object, ResolvedJavaType toType, boolean exactType, boolean nonNull) {
         this(object, StampFactory.object(toType, exactType, nonNull || StampTool.isPointerNonNull(object.stamp()), true));
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ProxyNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -59,10 +59,10 @@
     }
 
     public static ValueProxyNode forValue(ValueNode value, BeginNode exit, StructuredGraph graph) {
-        return graph.unique(ValueProxyNode.create(value, exit));
+        return graph.unique(new ValueProxyNode(value, exit));
     }
 
     public static GuardProxyNode forGuard(GuardingNode value, BeginNode exit, StructuredGraph graph) {
-        return graph.unique(GuardProxyNode.create(value, exit));
+        return graph.unique(new GuardProxyNode(value, exit));
     }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ReturnNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ReturnNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -37,25 +37,11 @@
         return result;
     }
 
-    /**
-     * Constructs a new Return instruction.
-     *
-     * @param result the instruction producing the result for this return; {@code null} if this is a
-     *            void return
-     */
-    public static ReturnNode create(ValueNode result) {
-        return new ReturnNode(result);
-    }
-
-    protected ReturnNode(ValueNode result) {
+    public ReturnNode(ValueNode result) {
         this(result, null);
     }
 
-    public static ReturnNode create(ValueNode result, MemoryMapNode memoryMap) {
-        return new ReturnNode(result, memoryMap);
-    }
-
-    protected ReturnNode(ValueNode result, MemoryMapNode memoryMap) {
+    public ReturnNode(ValueNode result, MemoryMapNode memoryMap) {
         super(StampFactory.forVoid());
         this.result = result;
         this.memoryMap = memoryMap;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SafepointNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SafepointNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,11 +32,7 @@
 @NodeInfo
 public class SafepointNode extends DeoptimizingFixedWithNextNode implements LIRLowerable {
 
-    public static SafepointNode create() {
-        return new SafepointNode();
-    }
-
-    protected SafepointNode() {
+    public SafepointNode() {
         super(StampFactory.forVoid());
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ShortCircuitOrNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ShortCircuitOrNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,11 +35,7 @@
     protected boolean yNegated;
     protected double shortCircuitProbability;
 
-    public static ShortCircuitOrNode create(LogicNode x, boolean xNegated, LogicNode y, boolean yNegated, double shortCircuitProbability) {
-        return new ShortCircuitOrNode(x, xNegated, y, yNegated, shortCircuitProbability);
-    }
-
-    protected ShortCircuitOrNode(LogicNode x, boolean xNegated, LogicNode y, boolean yNegated, double shortCircuitProbability) {
+    public ShortCircuitOrNode(LogicNode x, boolean xNegated, LogicNode y, boolean yNegated, double shortCircuitProbability) {
         this.x = x;
         this.xNegated = xNegated;
         this.y = y;
@@ -87,7 +83,7 @@
         }
 
         if (xCond != forX || yCond != forY) {
-            return ShortCircuitOrNode.create(xCond, xNeg, yCond, yNeg, shortCircuitProbability);
+            return new ShortCircuitOrNode(xCond, xNeg, yCond, yNeg, shortCircuitProbability);
         } else {
             return this;
         }
@@ -109,7 +105,7 @@
             if (isXNegated()) {
                 if (isYNegated()) {
                     // !a || !a = !a
-                    return LogicNegationNode.create(forX);
+                    return new LogicNegationNode(forX);
                 } else {
                     // !a || a = true
                     return LogicConstantNode.tautology();
@@ -129,7 +125,7 @@
                 return LogicConstantNode.tautology();
             } else {
                 if (isYNegated()) {
-                    return LogicNegationNode.create(forY);
+                    return new LogicNegationNode(forY);
                 } else {
                     return forY;
                 }
@@ -140,7 +136,7 @@
                 return LogicConstantNode.tautology();
             } else {
                 if (isXNegated()) {
-                    return LogicNegationNode.create(forX);
+                    return new LogicNegationNode(forX);
                 } else {
                     return forX;
                 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SimpleInfopointNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SimpleInfopointNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,11 +32,7 @@
 public class SimpleInfopointNode extends InfopointNode implements LIRLowerable, IterableNodeType, Simplifiable {
     protected BytecodePosition position;
 
-    public static SimpleInfopointNode create(InfopointReason reason, BytecodePosition position) {
-        return new SimpleInfopointNode(reason, position);
-    }
-
-    protected SimpleInfopointNode(InfopointReason reason, BytecodePosition position) {
+    public SimpleInfopointNode(InfopointReason reason, BytecodePosition position) {
         super(reason);
         this.position = position;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StartNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StartNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -31,11 +31,7 @@
  */
 @NodeInfo(allowedUsageTypes = {InputType.Memory})
 public class StartNode extends BeginStateSplitNode implements MemoryCheckpoint.Single {
-    public static StartNode create() {
-        return new StartNode();
-    }
-
-    protected StartNode() {
+    public StartNode() {
     }
 
     @Override
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java	Mon Jan 12 20:39:04 2015 +0100
@@ -105,7 +105,7 @@
 
     private StructuredGraph(String name, ResolvedJavaMethod method, long graphId, int entryBCI) {
         super(name);
-        this.setStart(add(StartNode.create()));
+        this.setStart(add(new StartNode()));
         this.method = method;
         this.graphId = graphId;
         this.entryBCI = entryBCI;
@@ -392,7 +392,7 @@
         if (begin.forwardEndCount() == 1) { // bypass merge and remove
             reduceTrivialMerge(begin);
         } else { // convert to merge
-            MergeNode merge = this.add(MergeNode.create());
+            MergeNode merge = this.add(new MergeNode());
             this.replaceFixedWithFixed(begin, merge);
         }
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeProfileProxyNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/TypeProfileProxyNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -55,11 +55,7 @@
             // Only null profiling is not beneficial enough to keep the node around.
             return object;
         }
-        return object.graph().addWithoutUnique(create(object, profile));
-    }
-
-    public static ValueNode create(ValueNode object, JavaTypeProfile profile) {
-        return new TypeProfileProxyNode(object, profile);
+        return object.graph().addWithoutUnique(new TypeProfileProxyNode(object, profile));
     }
 
     protected TypeProfileProxyNode(ValueNode value, JavaTypeProfile profile) {
@@ -97,7 +93,7 @@
             }
             if (newProfile != this.profile) {
                 Debug.log("Improved profile via other profile.");
-                return TypeProfileProxyNode.create(forValue, newProfile);
+                return new TypeProfileProxyNode(forValue, newProfile);
             }
         } else if (StampTool.typeOrNull(forValue) != null) {
             ResolvedJavaType type = StampTool.typeOrNull(forValue);
@@ -119,7 +115,7 @@
                     // Only null profiling is not beneficial enough to keep the node around.
                     return forValue;
                 }
-                return TypeProfileProxyNode.create(forValue, newProfile);
+                return new TypeProfileProxyNode(forValue, newProfile);
             }
         }
         return this;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnwindNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/UnwindNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -39,11 +39,7 @@
         return exception;
     }
 
-    public static UnwindNode create(ValueNode exception) {
-        return new UnwindNode(exception);
-    }
-
-    protected UnwindNode(ValueNode exception) {
+    public UnwindNode(ValueNode exception) {
         super(StampFactory.forVoid());
         assert exception == null || exception.getKind() == Kind.Object;
         this.exception = exception;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValuePhiNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValuePhiNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,34 +35,13 @@
 
     @Input protected NodeInputList<ValueNode> values;
 
-    /**
-     * Create a value phi with the specified stamp.
-     *
-     * @param stamp the stamp of the value
-     * @param merge the merge that the new phi belongs to
-     */
-    public static ValuePhiNode create(Stamp stamp, MergeNode merge) {
-        return new ValuePhiNode(stamp, merge);
-    }
-
-    protected ValuePhiNode(Stamp stamp, MergeNode merge) {
+    public ValuePhiNode(Stamp stamp, MergeNode merge) {
         super(stamp, merge);
         assert stamp != StampFactory.forVoid();
         values = new NodeInputList<>(this);
     }
 
-    /**
-     * Create a value phi with the specified stamp and the given values.
-     *
-     * @param stamp the stamp of the value
-     * @param merge the merge that the new phi belongs to
-     * @param values the initial values of the phi
-     */
-    public static ValuePhiNode create(Stamp stamp, MergeNode merge, ValueNode[] values) {
-        return new ValuePhiNode(stamp, merge, values);
-    }
-
-    protected ValuePhiNode(Stamp stamp, MergeNode merge, ValueNode[] values) {
+    public ValuePhiNode(Stamp stamp, MergeNode merge, ValueNode[] values) {
         super(stamp, merge);
         assert stamp != StampFactory.forVoid();
         this.values = new NodeInputList<>(this, values);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueProxyNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueProxyNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,11 +32,7 @@
 
     @Input ValueNode value;
 
-    public static ValueProxyNode create(ValueNode value, BeginNode proxyPoint) {
-        return new ValueProxyNode(value, proxyPoint);
-    }
-
-    protected ValueProxyNode(ValueNode value, BeginNode proxyPoint) {
+    public ValueProxyNode(ValueNode value, BeginNode proxyPoint) {
         super(value.stamp(), proxyPoint);
         this.value = value;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AbsNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AbsNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -36,11 +36,7 @@
 @NodeInfo
 public class AbsNode extends UnaryArithmeticNode<Abs> implements ArithmeticLIRLowerable, NarrowableArithmeticNode {
 
-    public static AbsNode create(ValueNode x) {
-        return new AbsNode(x);
-    }
-
-    protected AbsNode(ValueNode x) {
+    public AbsNode(ValueNode x) {
         super(ArithmeticOpTable::getAbs, x);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AddNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AddNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,11 +35,7 @@
 @NodeInfo(shortName = "+")
 public class AddNode extends BinaryArithmeticNode<Add> implements NarrowableArithmeticNode {
 
-    public static AddNode create(ValueNode x, ValueNode y) {
-        return new AddNode(x, y);
-    }
-
-    protected AddNode(ValueNode x, ValueNode y) {
+    public AddNode(ValueNode x, ValueNode y) {
         super(ArithmeticOpTable::getAdd, x, y);
     }
 
@@ -51,7 +47,7 @@
         }
 
         if (forX.isConstant() && !forY.isConstant()) {
-            return AddNode.create(forY, forX);
+            return new AddNode(forY, forX);
         }
         BinaryOp<Add> op = getOp(forX, forY);
         boolean associative = op.isAssociative();
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AndNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AndNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -36,11 +36,7 @@
 @NodeInfo(shortName = "&")
 public class AndNode extends BinaryArithmeticNode<And> implements NarrowableArithmeticNode {
 
-    public static AndNode create(ValueNode x, ValueNode y) {
-        return new AndNode(x, y);
-    }
-
-    protected AndNode(ValueNode x, ValueNode y) {
+    public AndNode(ValueNode x, ValueNode y) {
         super(ArithmeticOpTable::getAnd, x, y);
     }
 
@@ -55,7 +51,7 @@
             return forX;
         }
         if (forX.isConstant() && !forY.isConstant()) {
-            return AndNode.create(forY, forX);
+            return new AndNode(forY, forX);
         }
         if (forY.isConstant()) {
             Constant c = forY.asConstant();
@@ -72,7 +68,7 @@
                 if (forX instanceof SignExtendNode) {
                     SignExtendNode ext = (SignExtendNode) forX;
                     if (rawY == ((1L << ext.getInputBits()) - 1)) {
-                        return ZeroExtendNode.create(ext.getValue(), ext.getResultBits());
+                        return new ZeroExtendNode(ext.getValue(), ext.getResultBits());
                     }
                 }
                 IntegerStamp xStamp = (IntegerStamp) forX.stamp();
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryArithmeticNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryArithmeticNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -74,27 +74,27 @@
     }
 
     public static AddNode add(StructuredGraph graph, ValueNode v1, ValueNode v2) {
-        return graph.unique(AddNode.create(v1, v2));
+        return graph.unique(new AddNode(v1, v2));
     }
 
     public static AddNode add(ValueNode v1, ValueNode v2) {
-        return AddNode.create(v1, v2);
+        return new AddNode(v1, v2);
     }
 
     public static MulNode mul(StructuredGraph graph, ValueNode v1, ValueNode v2) {
-        return graph.unique(MulNode.create(v1, v2));
+        return graph.unique(new MulNode(v1, v2));
     }
 
     public static MulNode mul(ValueNode v1, ValueNode v2) {
-        return MulNode.create(v1, v2);
+        return new MulNode(v1, v2);
     }
 
     public static SubNode sub(StructuredGraph graph, ValueNode v1, ValueNode v2) {
-        return graph.unique(SubNode.create(v1, v2));
+        return graph.unique(new SubNode(v1, v2));
     }
 
     public static SubNode sub(ValueNode v1, ValueNode v2) {
-        return SubNode.create(v1, v2);
+        return new SubNode(v1, v2);
     }
 
     private enum ReassociateMatch {
@@ -224,11 +224,11 @@
         } else if (node instanceof MulNode) {
             return BinaryArithmeticNode.mul(a, AddNode.mul(m1, m2));
         } else if (node instanceof AndNode) {
-            return AndNode.create(a, AndNode.create(m1, m2));
+            return new AndNode(a, new AndNode(m1, m2));
         } else if (node instanceof OrNode) {
-            return OrNode.create(a, OrNode.create(m1, m2));
+            return new OrNode(a, new OrNode(m1, m2));
         } else if (node instanceof XorNode) {
-            return XorNode.create(a, XorNode.create(m1, m2));
+            return new XorNode(a, new XorNode(m1, m2));
         } else {
             throw GraalInternalError.shouldNotReachHere();
         }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -79,7 +79,7 @@
                     return conditionalNode.condition();
                 } else {
                     assert falseResult == true;
-                    return LogicNegationNode.create(conditionalNode.condition());
+                    return new LogicNegationNode(conditionalNode.condition());
 
                 }
             }
@@ -159,20 +159,20 @@
         CompareNode comparison;
         if (condition == Condition.EQ) {
             if (x.stamp() instanceof AbstractObjectStamp) {
-                comparison = ObjectEqualsNode.create(x, y);
+                comparison = new ObjectEqualsNode(x, y);
             } else if (x.stamp() instanceof AbstractPointerStamp) {
-                comparison = PointerEqualsNode.create(x, y);
+                comparison = new PointerEqualsNode(x, y);
             } else {
                 assert x.getKind().isNumericInteger();
-                comparison = IntegerEqualsNode.create(x, y);
+                comparison = new IntegerEqualsNode(x, y);
             }
         } else if (condition == Condition.LT) {
             assert x.getKind().isNumericInteger();
-            comparison = IntegerLessThanNode.create(x, y);
+            comparison = new IntegerLessThanNode(x, y);
         } else {
             assert condition == Condition.BT;
             assert x.getKind().isNumericInteger();
-            comparison = IntegerBelowNode.create(x, y);
+            comparison = new IntegerBelowNode(x, y);
         }
 
         return comparison;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConditionalNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -48,19 +48,11 @@
         return condition;
     }
 
-    public static ConditionalNode create(LogicNode condition) {
-        return new ConditionalNode(condition);
-    }
-
-    protected ConditionalNode(LogicNode condition) {
+    public ConditionalNode(LogicNode condition) {
         this(condition, ConstantNode.forInt(1, condition.graph()), ConstantNode.forInt(0, condition.graph()));
     }
 
-    public static ConditionalNode create(LogicNode condition, ValueNode trueValue, ValueNode falseValue) {
-        return new ConditionalNode(condition, trueValue, falseValue);
-    }
-
-    protected ConditionalNode(LogicNode condition, ValueNode trueValue, ValueNode falseValue) {
+    public ConditionalNode(LogicNode condition, ValueNode trueValue, ValueNode falseValue) {
         super(trueValue.stamp().meet(falseValue.stamp()));
         assert trueValue.stamp().isCompatible(falseValue.stamp());
         this.condition = condition;
@@ -85,7 +77,7 @@
     public ValueNode canonical(CanonicalizerTool tool) {
         if (condition instanceof LogicNegationNode) {
             LogicNegationNode negated = (LogicNegationNode) condition;
-            return ConditionalNode.create(negated.getValue(), falseValue(), trueValue());
+            return new ConditionalNode(negated.getValue(), falseValue(), trueValue());
         }
 
         // this optimizes the case where a value that can only be 0 or 1 is materialized to 0 or 1
@@ -127,20 +119,12 @@
         generator.emitConditional(this);
     }
 
-    public static ConditionalNode create(@InjectedNodeParameter StructuredGraph graph, Condition condition, ValueNode x, ValueNode y) {
-        return new ConditionalNode(graph, condition, x, y);
-    }
-
-    protected ConditionalNode(StructuredGraph graph, Condition condition, ValueNode x, ValueNode y) {
+    public ConditionalNode(@InjectedNodeParameter StructuredGraph graph, Condition condition, ValueNode x, ValueNode y) {
         this(createCompareNode(graph, condition, x, y));
     }
 
-    public static ConditionalNode create(ValueNode type, ValueNode object) {
-        return new ConditionalNode(type, object);
-    }
-
-    protected ConditionalNode(ValueNode type, ValueNode object) {
-        this(type.graph().unique(InstanceOfDynamicNode.create(type, object)));
+    public ConditionalNode(ValueNode type, ValueNode object) {
+        this(type.graph().unique(new InstanceOfDynamicNode(type, object)));
     }
 
     @NodeIntrinsic
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/DivNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/DivNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,11 +35,7 @@
 @NodeInfo(shortName = "/")
 public class DivNode extends BinaryArithmeticNode<Div> {
 
-    public static DivNode create(ValueNode x, ValueNode y) {
-        return new DivNode(x, y);
-    }
-
-    protected DivNode(ValueNode x, ValueNode y) {
+    public DivNode(ValueNode x, ValueNode y) {
         super(ArithmeticOpTable::getDiv, x, y);
     }
 
@@ -64,11 +60,11 @@
                 }
                 ValueNode divResult = null;
                 if (CodeUtil.isPowerOf2(i)) {
-                    divResult = RightShiftNode.create(forX, ConstantNode.forInt(CodeUtil.log2(i)));
+                    divResult = new RightShiftNode(forX, ConstantNode.forInt(CodeUtil.log2(i)));
                 }
                 if (divResult != null) {
                     if (signFlip) {
-                        return NegateNode.create(divResult);
+                        return new NegateNode(divResult);
                     } else {
                         return divResult;
                     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatConvertNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatConvertNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -41,11 +41,7 @@
 
     protected final FloatConvert op;
 
-    public static FloatConvertNode create(FloatConvert op, ValueNode input) {
-        return new FloatConvertNode(op, input);
-    }
-
-    protected FloatConvertNode(FloatConvert op, ValueNode input) {
+    public FloatConvertNode(FloatConvert op, ValueNode input) {
         super(table -> table.getFloatConvert(op), input);
         this.op = op;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatEqualsNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatEqualsNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -33,17 +33,7 @@
 @NodeInfo(shortName = "==")
 public class FloatEqualsNode extends CompareNode {
 
-    /**
-     * Constructs a new floating point equality comparison node.
-     *
-     * @param x the instruction producing the first input to the instruction
-     * @param y the instruction that produces the second input to this instruction
-     */
-    public static FloatEqualsNode create(ValueNode x, ValueNode y) {
-        return new FloatEqualsNode(x, y);
-    }
-
-    protected FloatEqualsNode(ValueNode x, ValueNode y) {
+    public FloatEqualsNode(ValueNode x, ValueNode y) {
         super(x, y);
         assert x.stamp() instanceof FloatStamp && y.stamp() instanceof FloatStamp : x.stamp() + " " + y.stamp();
         assert x.stamp().isCompatible(y.stamp());
@@ -80,9 +70,9 @@
     @Override
     protected CompareNode duplicateModified(ValueNode newX, ValueNode newY) {
         if (newX.stamp() instanceof FloatStamp && newY.stamp() instanceof FloatStamp) {
-            return FloatEqualsNode.create(newX, newY);
+            return new FloatEqualsNode(newX, newY);
         } else if (newX.stamp() instanceof IntegerStamp && newY.stamp() instanceof IntegerStamp) {
-            return IntegerEqualsNode.create(newX, newY);
+            return new IntegerEqualsNode(newX, newY);
         }
         throw GraalInternalError.shouldNotReachHere();
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatLessThanNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatLessThanNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,19 +35,7 @@
 
     protected final boolean unorderedIsTrue;
 
-    /**
-     * Constructs a new floating point comparison node.
-     *
-     * @param x the instruction producing the first input to the instruction
-     * @param y the instruction that produces the second input to this instruction
-     * @param unorderedIsTrue whether a comparison that is undecided (involving NaNs, etc.) leads to
-     *            a "true" result
-     */
-    public static FloatLessThanNode create(ValueNode x, ValueNode y, boolean unorderedIsTrue) {
-        return new FloatLessThanNode(x, y, unorderedIsTrue);
-    }
-
-    protected FloatLessThanNode(ValueNode x, ValueNode y, boolean unorderedIsTrue) {
+    public FloatLessThanNode(ValueNode x, ValueNode y, boolean unorderedIsTrue) {
         super(x, y);
         assert x.stamp() instanceof FloatStamp && y.stamp() instanceof FloatStamp;
         assert x.stamp().isCompatible(y.stamp());
@@ -79,9 +67,9 @@
     @Override
     protected CompareNode duplicateModified(ValueNode newX, ValueNode newY) {
         if (newX.stamp() instanceof FloatStamp && newY.stamp() instanceof FloatStamp) {
-            return FloatLessThanNode.create(newX, newY, unorderedIsTrue);
+            return new FloatLessThanNode(newX, newY, unorderedIsTrue);
         } else if (newX.stamp() instanceof IntegerStamp && newY.stamp() instanceof IntegerStamp) {
-            return IntegerLessThanNode.create(newX, newY);
+            return new IntegerLessThanNode(newX, newY);
         }
         throw GraalInternalError.shouldNotReachHere();
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,17 +32,7 @@
 @NodeInfo(shortName = "|<|")
 public class IntegerBelowNode extends CompareNode {
 
-    /**
-     * Constructs a new unsigned integer comparison node.
-     *
-     * @param x the instruction producing the first input to the instruction
-     * @param y the instruction that produces the second input to this instruction
-     */
-    public static IntegerBelowNode create(ValueNode x, ValueNode y) {
-        return new IntegerBelowNode(x, y);
-    }
-
-    protected IntegerBelowNode(ValueNode x, ValueNode y) {
+    public IntegerBelowNode(ValueNode x, ValueNode y) {
         super(x, y);
         assert x.stamp() instanceof IntegerStamp;
         assert y.stamp() instanceof IntegerStamp;
@@ -79,13 +69,13 @@
         }
         if (forX.isConstant() && forX.asJavaConstant().asLong() == 0) {
             // 0 |<| y is the same as 0 != y
-            return LogicNegationNode.create(CompareNode.createCompareNode(Condition.EQ, forX, forY));
+            return new LogicNegationNode(CompareNode.createCompareNode(Condition.EQ, forX, forY));
         }
         return this;
     }
 
     @Override
     protected CompareNode duplicateModified(ValueNode newX, ValueNode newY) {
-        return IntegerBelowNode.create(newX, newY);
+        return new IntegerBelowNode(newX, newY);
     }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -120,13 +120,13 @@
         if (toStamp.getBits() == fromStamp.getBits()) {
             result = input;
         } else if (toStamp.getBits() < fromStamp.getBits()) {
-            result = NarrowNode.create(input, fromStamp.getBits(), toStamp.getBits());
+            result = new NarrowNode(input, fromStamp.getBits(), toStamp.getBits());
         } else if (zeroExtend) {
             // toStamp.getBits() > fromStamp.getBits()
-            result = ZeroExtendNode.create(input, toStamp.getBits());
+            result = new ZeroExtendNode(input, toStamp.getBits());
         } else {
             // toStamp.getBits() > fromStamp.getBits()
-            result = SignExtendNode.create(input, toStamp.getBits());
+            result = new SignExtendNode(input, toStamp.getBits());
         }
 
         IntegerStamp resultStamp = (IntegerStamp) result.stamp();
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerDivNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerDivNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,11 +35,7 @@
 @NodeInfo(shortName = "/")
 public class IntegerDivNode extends FixedBinaryNode implements Lowerable, LIRLowerable {
 
-    public static IntegerDivNode create(ValueNode x, ValueNode y) {
-        return new IntegerDivNode(x, y);
-    }
-
-    protected IntegerDivNode(ValueNode x, ValueNode y) {
+    public IntegerDivNode(ValueNode x, ValueNode y) {
         super(IntegerStamp.OPS.getDiv().foldStamp(x.stamp(), y.stamp()), x, y);
     }
 
@@ -63,7 +59,7 @@
                 return forX;
             }
             if (c == -1) {
-                return NegateNode.create(forX);
+                return new NegateNode(forX);
             }
             long abs = Math.abs(c);
             if (CodeUtil.isPowerOf2(abs) && forX.stamp() instanceof IntegerStamp) {
@@ -73,13 +69,13 @@
                 // no rounding if dividend is positive or if its low bits are always 0
                 if (stampX.canBeNegative() || (stampX.upMask() & (abs - 1)) != 0) {
                     int bits = PrimitiveStamp.getBits(stamp());
-                    RightShiftNode sign = RightShiftNode.create(forX, ConstantNode.forInt(bits - 1));
-                    UnsignedRightShiftNode round = UnsignedRightShiftNode.create(sign, ConstantNode.forInt(bits - log2));
+                    RightShiftNode sign = new RightShiftNode(forX, ConstantNode.forInt(bits - 1));
+                    UnsignedRightShiftNode round = new UnsignedRightShiftNode(sign, ConstantNode.forInt(bits - log2));
                     dividend = BinaryArithmeticNode.add(dividend, round);
                 }
-                RightShiftNode shift = RightShiftNode.create(dividend, ConstantNode.forInt(log2));
+                RightShiftNode shift = new RightShiftNode(dividend, ConstantNode.forInt(log2));
                 if (c < 0) {
-                    return NegateNode.create(shift);
+                    return new NegateNode(shift);
                 }
                 return shift;
             }
@@ -92,7 +88,7 @@
                 IntegerRemNode integerRemNode = (IntegerRemNode) integerSubNode.getY();
                 if (integerSubNode.stamp().isCompatible(this.stamp()) && integerRemNode.stamp().isCompatible(this.stamp()) && integerSubNode.getX() == integerRemNode.getX() &&
                                 forY == integerRemNode.getY()) {
-                    return IntegerDivNode.create(integerSubNode.getX(), forY);
+                    return new IntegerDivNode(integerSubNode.getX(), forY);
                 }
             }
         }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -34,17 +34,7 @@
 @NodeInfo(shortName = "==")
 public class IntegerEqualsNode extends CompareNode {
 
-    /**
-     * Constructs a new integer equality comparison node.
-     *
-     * @param x the instruction producing the first input to the instruction
-     * @param y the instruction that produces the second input to this instruction
-     */
-    public static IntegerEqualsNode create(ValueNode x, ValueNode y) {
-        return new IntegerEqualsNode(x, y);
-    }
-
-    protected IntegerEqualsNode(ValueNode x, ValueNode y) {
+    public IntegerEqualsNode(ValueNode x, ValueNode y) {
         super(x, y);
         assert !x.getKind().isNumericFloat() && x.getKind() != Kind.Object;
         assert !y.getKind().isNumericFloat() && y.getKind() != Kind.Object;
@@ -68,9 +58,9 @@
             ValueNode b = mirrored ? normalizeNode.getX() : normalizeNode.getY();
 
             if (normalizeNode.getX().getKind() == Kind.Double || normalizeNode.getX().getKind() == Kind.Float) {
-                return FloatEqualsNode.create(a, b);
+                return new FloatEqualsNode(a, b);
             } else {
-                return IntegerEqualsNode.create(a, b);
+                return new IntegerEqualsNode(a, b);
             }
         }
         return this;
@@ -79,9 +69,9 @@
     @Override
     protected CompareNode duplicateModified(ValueNode newX, ValueNode newY) {
         if (newX.stamp() instanceof FloatStamp && newY.stamp() instanceof FloatStamp) {
-            return FloatEqualsNode.create(newX, newY);
+            return new FloatEqualsNode(newX, newY);
         } else if (newX.stamp() instanceof IntegerStamp && newY.stamp() instanceof IntegerStamp) {
-            return IntegerEqualsNode.create(newX, newY);
+            return new IntegerEqualsNode(newX, newY);
         }
         throw GraalInternalError.shouldNotReachHere();
     }
@@ -101,7 +91,7 @@
         if (constant instanceof PrimitiveConstant && ((PrimitiveConstant) constant).asLong() == 0) {
             if (nonConstant instanceof AndNode) {
                 AndNode andNode = (AndNode) nonConstant;
-                return IntegerTestNode.create(andNode.getX(), andNode.getY());
+                return new IntegerTestNode(andNode.getX(), andNode.getY());
             } else if (nonConstant instanceof ShiftNode && nonConstant.stamp() instanceof IntegerStamp) {
                 if (nonConstant instanceof LeftShiftNode) {
                     LeftShiftNode shift = (LeftShiftNode) nonConstant;
@@ -109,10 +99,10 @@
                         int mask = shift.getShiftAmountMask();
                         int amount = shift.getY().asJavaConstant().asInt() & mask;
                         if (shift.getX().getKind() == Kind.Int) {
-                            return IntegerTestNode.create(shift.getX(), ConstantNode.forInt(-1 >>> amount));
+                            return new IntegerTestNode(shift.getX(), ConstantNode.forInt(-1 >>> amount));
                         } else {
                             assert shift.getX().getKind() == Kind.Long;
-                            return IntegerTestNode.create(shift.getX(), ConstantNode.forLong(-1L >>> amount));
+                            return new IntegerTestNode(shift.getX(), ConstantNode.forLong(-1L >>> amount));
                         }
                     }
                 } else if (nonConstant instanceof RightShiftNode) {
@@ -121,10 +111,10 @@
                         int mask = shift.getShiftAmountMask();
                         int amount = shift.getY().asJavaConstant().asInt() & mask;
                         if (shift.getX().getKind() == Kind.Int) {
-                            return IntegerTestNode.create(shift.getX(), ConstantNode.forInt(-1 << amount));
+                            return new IntegerTestNode(shift.getX(), ConstantNode.forInt(-1 << amount));
                         } else {
                             assert shift.getX().getKind() == Kind.Long;
-                            return IntegerTestNode.create(shift.getX(), ConstantNode.forLong(-1L << amount));
+                            return new IntegerTestNode(shift.getX(), ConstantNode.forLong(-1L << amount));
                         }
                     }
                 } else if (nonConstant instanceof UnsignedRightShiftNode) {
@@ -133,10 +123,10 @@
                         int mask = shift.getShiftAmountMask();
                         int amount = shift.getY().asJavaConstant().asInt() & mask;
                         if (shift.getX().getKind() == Kind.Int) {
-                            return IntegerTestNode.create(shift.getX(), ConstantNode.forInt(-1 << amount));
+                            return new IntegerTestNode(shift.getX(), ConstantNode.forInt(-1 << amount));
                         } else {
                             assert shift.getX().getKind() == Kind.Long;
-                            return IntegerTestNode.create(shift.getX(), ConstantNode.forLong(-1L << amount));
+                            return new IntegerTestNode(shift.getX(), ConstantNode.forLong(-1L << amount));
                         }
                     }
                 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -34,17 +34,7 @@
 @NodeInfo(shortName = "<")
 public class IntegerLessThanNode extends CompareNode {
 
-    /**
-     * Constructs a new integer comparison node.
-     *
-     * @param x the instruction producing the first input to the instruction
-     * @param y the instruction that produces the second input to this instruction
-     */
-    public static IntegerLessThanNode create(ValueNode x, ValueNode y) {
-        return new IntegerLessThanNode(x, y);
-    }
-
-    protected IntegerLessThanNode(ValueNode x, ValueNode y) {
+    public IntegerLessThanNode(ValueNode x, ValueNode y) {
         super(x, y);
         assert !x.getKind().isNumericFloat() && x.getKind() != Kind.Object;
         assert !y.getKind().isNumericFloat() && y.getKind() != Kind.Object;
@@ -69,9 +59,9 @@
             ValueNode b = mirrored ? normalizeNode.getX() : normalizeNode.getY();
 
             if (normalizeNode.getX().getKind() == Kind.Double || normalizeNode.getX().getKind() == Kind.Float) {
-                return FloatLessThanNode.create(a, b, mirrored ^ normalizeNode.isUnorderedLess);
+                return new FloatLessThanNode(a, b, mirrored ^ normalizeNode.isUnorderedLess);
             } else {
-                return IntegerLessThanNode.create(a, b);
+                return new IntegerLessThanNode(a, b);
             }
         }
         return this;
@@ -96,7 +86,7 @@
         }
         if (forX.stamp() instanceof IntegerStamp && forY.stamp() instanceof IntegerStamp) {
             if (IntegerStamp.sameSign((IntegerStamp) forX.stamp(), (IntegerStamp) forY.stamp())) {
-                return IntegerBelowNode.create(forX, forY);
+                return new IntegerBelowNode(forX, forY);
             }
         }
         return this;
@@ -105,9 +95,9 @@
     @Override
     protected CompareNode duplicateModified(ValueNode newX, ValueNode newY) {
         if (newX.stamp() instanceof FloatStamp && newY.stamp() instanceof FloatStamp) {
-            return FloatLessThanNode.create(newX, newY, true);
+            return new FloatLessThanNode(newX, newY, true);
         } else if (newX.stamp() instanceof IntegerStamp && newY.stamp() instanceof IntegerStamp) {
-            return IntegerLessThanNode.create(newX, newY);
+            return new IntegerLessThanNode(newX, newY);
         }
         throw GraalInternalError.shouldNotReachHere();
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerRemNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerRemNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,11 +32,7 @@
 @NodeInfo(shortName = "%")
 public class IntegerRemNode extends FixedBinaryNode implements Lowerable, LIRLowerable {
 
-    public static IntegerRemNode create(ValueNode x, ValueNode y) {
-        return new IntegerRemNode(x, y);
-    }
-
-    protected IntegerRemNode(ValueNode x, ValueNode y) {
+    public IntegerRemNode(ValueNode x, ValueNode y) {
         super(IntegerStamp.OPS.getRem().foldStamp(x.stamp(), y.stamp()), x, y);
     }
 
@@ -59,7 +55,7 @@
             if (c == 1 || c == -1) {
                 return ConstantNode.forIntegerStamp(stamp(), 0);
             } else if (c > 0 && CodeUtil.isPowerOf2(c) && forX.stamp() instanceof IntegerStamp && ((IntegerStamp) forX.stamp()).isPositive()) {
-                return AndNode.create(forX, ConstantNode.forIntegerStamp(stamp(), c - 1));
+                return new AndNode(forX, ConstantNode.forIntegerStamp(stamp(), c - 1));
             }
         }
         return this;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,17 +35,7 @@
 @NodeInfo
 public class IntegerTestNode extends BinaryOpLogicNode {
 
-    /**
-     * Constructs a new Test instruction.
-     *
-     * @param x the instruction producing the first input to the instruction
-     * @param y the instruction that produces the second input to this instruction
-     */
-    public static IntegerTestNode create(ValueNode x, ValueNode y) {
-        return new IntegerTestNode(x, y);
-    }
-
-    protected IntegerTestNode(ValueNode x, ValueNode y) {
+    public IntegerTestNode(ValueNode x, ValueNode y) {
         super(x, y);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IsNullNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IsNullNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,16 +35,7 @@
 @NodeInfo
 public class IsNullNode extends UnaryOpLogicNode implements LIRLowerable, Virtualizable, PiPushable {
 
-    /**
-     * Constructs a new IsNullNode instruction.
-     *
-     * @param object the instruction producing the object to check against null
-     */
-    public static IsNullNode create(ValueNode object) {
-        return new IsNullNode(object);
-    }
-
-    protected IsNullNode(ValueNode object) {
+    public IsNullNode(ValueNode object) {
         super(object);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/LeftShiftNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/LeftShiftNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -34,11 +34,7 @@
 @NodeInfo(shortName = "<<")
 public class LeftShiftNode extends ShiftNode<Shl> {
 
-    public static LeftShiftNode create(ValueNode x, ValueNode y) {
-        return new LeftShiftNode(x, y);
-    }
-
-    protected LeftShiftNode(ValueNode x, ValueNode y) {
+    public LeftShiftNode(ValueNode x, ValueNode y) {
         super(ArithmeticOpTable::getShl, x, y);
     }
 
@@ -66,19 +62,19 @@
                         if (total != (total & mask)) {
                             return ConstantNode.forIntegerKind(getKind(), 0);
                         }
-                        return LeftShiftNode.create(other.getX(), ConstantNode.forInt(total));
+                        return new LeftShiftNode(other.getX(), ConstantNode.forInt(total));
                     } else if ((other instanceof RightShiftNode || other instanceof UnsignedRightShiftNode) && otherAmount == amount) {
                         if (getKind() == Kind.Long) {
-                            return AndNode.create(other.getX(), ConstantNode.forLong(-1L << amount));
+                            return new AndNode(other.getX(), ConstantNode.forLong(-1L << amount));
                         } else {
                             assert getKind() == Kind.Int;
-                            return AndNode.create(other.getX(), ConstantNode.forInt(-1 << amount));
+                            return new AndNode(other.getX(), ConstantNode.forInt(-1 << amount));
                         }
                     }
                 }
             }
             if (originalAmout != amount) {
-                return LeftShiftNode.create(forX, ConstantNode.forInt(amount));
+                return new LeftShiftNode(forX, ConstantNode.forInt(amount));
             }
         }
         return this;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/MulNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/MulNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -36,11 +36,7 @@
 @NodeInfo(shortName = "*")
 public class MulNode extends BinaryArithmeticNode<Mul> implements NarrowableArithmeticNode {
 
-    public static MulNode create(ValueNode x, ValueNode y) {
-        return new MulNode(x, y);
-    }
-
-    protected MulNode(ValueNode x, ValueNode y) {
+    public MulNode(ValueNode x, ValueNode y) {
         super(ArithmeticOpTable::getMul, x, y);
     }
 
@@ -52,7 +48,7 @@
         }
 
         if (forX.isConstant() && !forY.isConstant()) {
-            return MulNode.create(forY, forX);
+            return new MulNode(forY, forX);
         }
         if (forY.isConstant()) {
             BinaryOp<Mul> op = getOp(forX, forY);
@@ -74,18 +70,18 @@
                     long bit2 = i - bit1;
                     bit2 = bit2 & -bit2;    // Extract 2nd bit
                     if (CodeUtil.isPowerOf2(i)) { //
-                        mulResult = LeftShiftNode.create(forX, ConstantNode.forInt(CodeUtil.log2(i)));
+                        mulResult = new LeftShiftNode(forX, ConstantNode.forInt(CodeUtil.log2(i)));
                     } else if (bit2 + bit1 == i) { // We can work with two shifts and add
-                        ValueNode shift1 = LeftShiftNode.create(forX, ConstantNode.forInt(CodeUtil.log2(bit1)));
-                        ValueNode shift2 = LeftShiftNode.create(forX, ConstantNode.forInt(CodeUtil.log2(bit2)));
-                        mulResult = AddNode.create(shift1, shift2);
+                        ValueNode shift1 = new LeftShiftNode(forX, ConstantNode.forInt(CodeUtil.log2(bit1)));
+                        ValueNode shift2 = new LeftShiftNode(forX, ConstantNode.forInt(CodeUtil.log2(bit2)));
+                        mulResult = new AddNode(shift1, shift2);
                     } else if (CodeUtil.isPowerOf2(i + 1)) { // shift and subtract
-                        ValueNode shift1 = LeftShiftNode.create(forX, ConstantNode.forInt(CodeUtil.log2(i + 1)));
-                        mulResult = SubNode.create(shift1, forX);
+                        ValueNode shift1 = new LeftShiftNode(forX, ConstantNode.forInt(CodeUtil.log2(i + 1)));
+                        mulResult = new SubNode(shift1, forX);
                     }
                     if (mulResult != null) {
                         if (signFlip) {
-                            return NegateNode.create(mulResult);
+                            return new NegateNode(mulResult);
                         } else {
                             return mulResult;
                         }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NarrowNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NarrowNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -37,17 +37,12 @@
 @NodeInfo
 public class NarrowNode extends IntegerConvertNode<Narrow, SignExtend> {
 
-    public static NarrowNode create(ValueNode input, int resultBits) {
-        int inputBits = PrimitiveStamp.getBits(input.stamp());
-        assert 0 < resultBits && resultBits <= inputBits;
-        return create(input, inputBits, resultBits);
+    public NarrowNode(ValueNode input, int resultBits) {
+        this(input, PrimitiveStamp.getBits(input.stamp()), resultBits);
+        assert 0 < resultBits && resultBits <= PrimitiveStamp.getBits(input.stamp());
     }
 
-    public static NarrowNode create(ValueNode input, int inputBits, int resultBits) {
-        return new NarrowNode(input, inputBits, resultBits);
-    }
-
-    protected NarrowNode(ValueNode input, int inputBits, int resultBits) {
+    public NarrowNode(ValueNode input, int inputBits, int resultBits) {
         super(ArithmeticOpTable::getNarrow, ArithmeticOpTable::getSignExtend, inputBits, resultBits, input);
     }
 
@@ -67,7 +62,7 @@
             // zzzzzzzz yyyyxxxx -(narrow)-> yyyyxxxx -(narrow)-> xxxx
             // ==> zzzzzzzz yyyyxxxx -(narrow)-> xxxx
             NarrowNode other = (NarrowNode) forValue;
-            return NarrowNode.create(other.getValue(), other.getInputBits(), getResultBits());
+            return new NarrowNode(other.getValue(), other.getInputBits(), getResultBits());
         } else if (forValue instanceof IntegerConvertNode) {
             // SignExtendNode or ZeroExtendNode
             IntegerConvertNode<?, ?> other = (IntegerConvertNode<?, ?>) forValue;
@@ -78,16 +73,16 @@
             } else if (getResultBits() < other.getInputBits()) {
                 // yyyyxxxx -(extend)-> zzzzzzzz yyyyxxxx -(narrow)-> xxxx
                 // ==> yyyyxxxx -(narrow)-> xxxx
-                return NarrowNode.create(other.getValue(), other.getInputBits(), getResultBits());
+                return new NarrowNode(other.getValue(), other.getInputBits(), getResultBits());
             } else {
                 if (other instanceof SignExtendNode) {
                     // sxxx -(sign-extend)-> ssssssss sssssxxx -(narrow)-> sssssxxx
                     // ==> sxxx -(sign-extend)-> sssssxxx
-                    return SignExtendNode.create(other.getValue(), other.getInputBits(), getResultBits());
+                    return new SignExtendNode(other.getValue(), other.getInputBits(), getResultBits());
                 } else if (other instanceof ZeroExtendNode) {
                     // xxxx -(zero-extend)-> 00000000 00000xxx -(narrow)-> 0000xxxx
                     // ==> xxxx -(zero-extend)-> 0000xxxx
-                    return ZeroExtendNode.create(other.getValue(), other.getInputBits(), getResultBits());
+                    return new ZeroExtendNode(other.getValue(), other.getInputBits(), getResultBits());
                 }
             }
         }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NegateNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NegateNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -36,16 +36,7 @@
 @NodeInfo
 public class NegateNode extends UnaryArithmeticNode<Neg> implements NarrowableArithmeticNode {
 
-    /**
-     * Creates new NegateNode instance.
-     *
-     * @param value the instruction producing the value that is input to this instruction
-     */
-    public static NegateNode create(ValueNode value) {
-        return new NegateNode(value);
-    }
-
-    protected NegateNode(ValueNode value) {
+    public NegateNode(ValueNode value) {
         super(ArithmeticOpTable::getNeg, value);
     }
 
@@ -60,7 +51,7 @@
         }
         if (forValue instanceof SubNode) {
             SubNode sub = (SubNode) forValue;
-            return SubNode.create(sub.getY(), sub.getX());
+            return new SubNode(sub.getY(), sub.getX());
         }
         return this;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NormalizeCompareNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NormalizeCompareNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -39,19 +39,7 @@
 
     protected final boolean isUnorderedLess;
 
-    /**
-     * Creates a new compare operation.
-     *
-     * @param x the first input
-     * @param y the second input
-     * @param isUnorderedLess true when an unordered floating point comparison is interpreted as
-     *            less, false when greater.
-     */
-    public static NormalizeCompareNode create(ValueNode x, ValueNode y, boolean isUnorderedLess) {
-        return new NormalizeCompareNode(x, y, isUnorderedLess);
-    }
-
-    protected NormalizeCompareNode(ValueNode x, ValueNode y, boolean isUnorderedLess) {
+    public NormalizeCompareNode(ValueNode x, ValueNode y, boolean isUnorderedLess) {
         super(StampFactory.forKind(Kind.Int), x, y);
         this.isUnorderedLess = isUnorderedLess;
     }
@@ -67,15 +55,15 @@
         LogicNode equalComp;
         LogicNode lessComp;
         if (getX().stamp() instanceof FloatStamp) {
-            equalComp = graph().unique(FloatEqualsNode.create(getX(), getY()));
-            lessComp = graph().unique(FloatLessThanNode.create(getX(), getY(), isUnorderedLess));
+            equalComp = graph().unique(new FloatEqualsNode(getX(), getY()));
+            lessComp = graph().unique(new FloatLessThanNode(getX(), getY(), isUnorderedLess));
         } else {
-            equalComp = graph().unique(IntegerEqualsNode.create(getX(), getY()));
-            lessComp = graph().unique(IntegerLessThanNode.create(getX(), getY()));
+            equalComp = graph().unique(new IntegerEqualsNode(getX(), getY()));
+            lessComp = graph().unique(new IntegerLessThanNode(getX(), getY()));
         }
 
-        ConditionalNode equalValue = graph().unique(ConditionalNode.create(equalComp, ConstantNode.forInt(0, graph()), ConstantNode.forInt(1, graph())));
-        ConditionalNode value = graph().unique(ConditionalNode.create(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);
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NotNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NotNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -36,16 +36,7 @@
 @NodeInfo
 public class NotNode extends UnaryArithmeticNode<Not> implements ArithmeticLIRLowerable, NarrowableArithmeticNode {
 
-    /**
-     * Creates new NotNode instance.
-     *
-     * @param x the instruction producing the value that is input to this instruction
-     */
-    public static NotNode create(ValueNode x) {
-        return new NotNode(x);
-    }
-
-    protected NotNode(ValueNode x) {
+    public NotNode(ValueNode x) {
         super(ArithmeticOpTable::getNot, x);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ObjectEqualsNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ObjectEqualsNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,17 +32,7 @@
 @NodeInfo(shortName = "==")
 public class ObjectEqualsNode extends PointerEqualsNode implements Virtualizable {
 
-    /**
-     * Constructs a new object equality comparison node.
-     *
-     * @param x the instruction producing the first input to the instruction
-     * @param y the instruction that produces the second input to this instruction
-     */
-    public static ObjectEqualsNode create(ValueNode x, ValueNode y) {
-        return new ObjectEqualsNode(x, y);
-    }
-
-    protected ObjectEqualsNode(ValueNode x, ValueNode y) {
+    public ObjectEqualsNode(ValueNode x, ValueNode y) {
         super(x, y);
         assert x.stamp() instanceof AbstractObjectStamp;
         assert y.stamp() instanceof AbstractObjectStamp;
@@ -54,7 +44,7 @@
                 JavaConstant otherUnboxed = tool.getConstantReflectionProvider().unboxPrimitive(other.asJavaConstant());
                 if (otherUnboxed != null && otherUnboxed.getKind() == Kind.Boolean) {
                     int expectedValue = otherUnboxed.asBoolean() ? 1 : 0;
-                    IntegerEqualsNode equals = IntegerEqualsNode.create(state.getEntry(0), ConstantNode.forInt(expectedValue, graph()));
+                    IntegerEqualsNode equals = new IntegerEqualsNode(state.getEntry(0), ConstantNode.forInt(expectedValue, graph()));
                     tool.addNode(equals);
                     tool.replaceWithValue(equals);
                 } else {
@@ -85,7 +75,7 @@
                 /*
                  * One of the two objects has identity, the other doesn't. In code, this looks like
                  * "Integer.valueOf(a) == new Integer(b)", which is always false.
-                 *
+                 * 
                  * In other words: an object created via valueOf can never be equal to one created
                  * by new in the same compilation unit.
                  */
@@ -98,7 +88,7 @@
                         // both are virtual without identity: check contents
                         assert stateX.getVirtualObject().entryCount() == 1 && stateY.getVirtualObject().entryCount() == 1;
                         assert stateX.getVirtualObject().entryKind(0).getStackKind() == Kind.Int || stateX.getVirtualObject().entryKind(0) == Kind.Long;
-                        IntegerEqualsNode equals = IntegerEqualsNode.create(stateX.getEntry(0), stateY.getEntry(0));
+                        IntegerEqualsNode equals = new IntegerEqualsNode(stateX.getEntry(0), stateY.getEntry(0));
                         tool.addNode(equals);
                         tool.replaceWithValue(equals);
                     }
@@ -113,9 +103,9 @@
     @Override
     protected CompareNode duplicateModified(ValueNode newX, ValueNode newY) {
         if (newX.stamp() instanceof ObjectStamp && newY.stamp() instanceof ObjectStamp) {
-            return ObjectEqualsNode.create(newX, newY);
+            return new ObjectEqualsNode(newX, newY);
         } else if (newX.stamp() instanceof AbstractPointerStamp && newY.stamp() instanceof AbstractPointerStamp) {
-            return PointerEqualsNode.create(newX, newY);
+            return new PointerEqualsNode(newX, newY);
         }
         throw GraalInternalError.shouldNotReachHere();
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/OrNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/OrNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -36,11 +36,7 @@
 @NodeInfo(shortName = "|")
 public class OrNode extends BinaryArithmeticNode<Or> {
 
-    public static OrNode create(ValueNode x, ValueNode y) {
-        return new OrNode(x, y);
-    }
-
-    protected OrNode(ValueNode x, ValueNode y) {
+    public OrNode(ValueNode x, ValueNode y) {
         super(ArithmeticOpTable::getOr, x, y);
     }
 
@@ -55,7 +51,7 @@
             return forX;
         }
         if (forX.isConstant() && !forY.isConstant()) {
-            return create(forY, forX);
+            return new OrNode(forY, forX);
         }
         if (forY.isConstant()) {
             Constant c = forY.asConstant();
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/PointerEqualsNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/PointerEqualsNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,17 +32,7 @@
 @NodeInfo(shortName = "==")
 public class PointerEqualsNode extends CompareNode {
 
-    /**
-     * Constructs a new pointer equality comparison node.
-     *
-     * @param x the instruction producing the first input to the instruction
-     * @param y the instruction that produces the second input to this instruction
-     */
-    public static PointerEqualsNode create(ValueNode x, ValueNode y) {
-        return new PointerEqualsNode(x, y);
-    }
-
-    protected PointerEqualsNode(ValueNode x, ValueNode y) {
+    public PointerEqualsNode(ValueNode x, ValueNode y) {
         super(x, y);
         assert x.stamp() instanceof AbstractPointerStamp;
         assert y.stamp() instanceof AbstractPointerStamp;
@@ -65,15 +55,15 @@
         } else if (forX.stamp().alwaysDistinct(forY.stamp())) {
             return LogicConstantNode.contradiction();
         } else if (((AbstractPointerStamp) forX.stamp()).alwaysNull()) {
-            return IsNullNode.create(forY);
+            return new IsNullNode(forY);
         } else if (((AbstractPointerStamp) forY.stamp()).alwaysNull()) {
-            return IsNullNode.create(forX);
+            return new IsNullNode(forX);
         }
         return super.canonical(tool, forX, forY);
     }
 
     @Override
     protected CompareNode duplicateModified(ValueNode newX, ValueNode newY) {
-        return PointerEqualsNode.create(newX, newY);
+        return new PointerEqualsNode(newX, newY);
     }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ReinterpretNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ReinterpretNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -40,19 +40,11 @@
 @NodeInfo
 public class ReinterpretNode extends UnaryNode implements ArithmeticLIRLowerable {
 
-    public static ReinterpretNode create(Kind to, ValueNode value) {
-        return new ReinterpretNode(to, value);
-    }
-
-    protected ReinterpretNode(Kind to, ValueNode value) {
+    public ReinterpretNode(Kind to, ValueNode value) {
         this(StampFactory.forKind(to), value);
     }
 
-    public static ReinterpretNode create(Stamp to, ValueNode value) {
-        return new ReinterpretNode(to, value);
-    }
-
-    protected ReinterpretNode(Stamp to, ValueNode value) {
+    public ReinterpretNode(Stamp to, ValueNode value) {
         super(to, value);
         assert to instanceof ArithmeticStamp;
     }
@@ -81,7 +73,7 @@
         }
         if (forValue instanceof ReinterpretNode) {
             ReinterpretNode reinterpret = (ReinterpretNode) forValue;
-            return ReinterpretNode.create(stamp(), reinterpret.getValue());
+            return new ReinterpretNode(stamp(), reinterpret.getValue());
         }
         return this;
     }
@@ -93,7 +85,7 @@
     }
 
     public static ValueNode reinterpret(Kind toKind, ValueNode value) {
-        return value.graph().unique(ReinterpretNode.create(toKind, value));
+        return value.graph().unique(new ReinterpretNode(toKind, value));
     }
 
     @NodeIntrinsic
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/RemNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/RemNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,11 +32,7 @@
 @NodeInfo(shortName = "%")
 public class RemNode extends BinaryArithmeticNode<Rem> implements Lowerable {
 
-    public static RemNode create(ValueNode x, ValueNode y) {
-        return new RemNode(x, y);
-    }
-
-    protected RemNode(ValueNode x, ValueNode y) {
+    public RemNode(ValueNode x, ValueNode y) {
         super(ArithmeticOpTable::getRem, x, y);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/RightShiftNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/RightShiftNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -33,11 +33,7 @@
 @NodeInfo(shortName = ">>")
 public class RightShiftNode extends ShiftNode<Shr> {
 
-    public static RightShiftNode create(ValueNode x, ValueNode y) {
-        return new RightShiftNode(x, y);
-    }
-
-    protected RightShiftNode(ValueNode x, ValueNode y) {
+    public RightShiftNode(ValueNode x, ValueNode y) {
         super(ArithmeticOpTable::getShr, x, y);
     }
 
@@ -49,7 +45,7 @@
         }
 
         if (forX.stamp() instanceof IntegerStamp && ((IntegerStamp) forX.stamp()).isPositive()) {
-            return UnsignedRightShiftNode.create(forX, forY);
+            return new UnsignedRightShiftNode(forX, forY);
         }
 
         if (forY.isConstant()) {
@@ -82,14 +78,14 @@
                              * full shift for this kind
                              */
                             assert total >= mask;
-                            return RightShiftNode.create(other.getX(), ConstantNode.forInt(mask));
+                            return new RightShiftNode(other.getX(), ConstantNode.forInt(mask));
                         }
-                        return RightShiftNode.create(other.getX(), ConstantNode.forInt(total));
+                        return new RightShiftNode(other.getX(), ConstantNode.forInt(total));
                     }
                 }
             }
             if (originalAmout != amount) {
-                return RightShiftNode.create(forX, ConstantNode.forInt(amount));
+                return new RightShiftNode(forX, ConstantNode.forInt(amount));
             }
         }
         return this;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SignExtendNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SignExtendNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -37,17 +37,12 @@
 @NodeInfo
 public class SignExtendNode extends IntegerConvertNode<SignExtend, Narrow> {
 
-    public static SignExtendNode create(ValueNode input, int resultBits) {
-        int inputBits = PrimitiveStamp.getBits(input.stamp());
-        assert 0 < inputBits && inputBits <= resultBits;
-        return create(input, inputBits, resultBits);
+    public SignExtendNode(ValueNode input, int resultBits) {
+        this(input, PrimitiveStamp.getBits(input.stamp()), resultBits);
+        assert 0 < PrimitiveStamp.getBits(input.stamp()) && PrimitiveStamp.getBits(input.stamp()) <= resultBits;
     }
 
-    public static SignExtendNode create(ValueNode input, int inputBits, int resultBits) {
-        return new SignExtendNode(input, inputBits, resultBits);
-    }
-
-    protected SignExtendNode(ValueNode input, int inputBits, int resultBits) {
+    public SignExtendNode(ValueNode input, int inputBits, int resultBits) {
         super(ArithmeticOpTable::getSignExtend, ArithmeticOpTable::getNarrow, inputBits, resultBits, input);
     }
 
@@ -67,13 +62,13 @@
             // sxxx -(sign-extend)-> ssss sxxx -(sign-extend)-> ssssssss sssssxxx
             // ==> sxxx -(sign-extend)-> ssssssss sssssxxx
             SignExtendNode other = (SignExtendNode) forValue;
-            return SignExtendNode.create(other.getValue(), other.getInputBits(), getResultBits());
+            return new SignExtendNode(other.getValue(), other.getInputBits(), getResultBits());
         } else if (forValue instanceof ZeroExtendNode) {
             ZeroExtendNode other = (ZeroExtendNode) forValue;
             if (other.getResultBits() > other.getInputBits()) {
                 // sxxx -(zero-extend)-> 0000 sxxx -(sign-extend)-> 00000000 0000sxxx
                 // ==> sxxx -(zero-extend)-> 00000000 0000sxxx
-                return ZeroExtendNode.create(other.getValue(), other.getInputBits(), getResultBits());
+                return new ZeroExtendNode(other.getValue(), other.getInputBits(), getResultBits());
             }
         }
 
@@ -82,7 +77,7 @@
             if ((inputStamp.upMask() & (1L << (getInputBits() - 1))) == 0L) {
                 // 0xxx -(sign-extend)-> 0000 0xxx
                 // ==> 0xxx -(zero-extend)-> 0000 0xxx
-                return ZeroExtendNode.create(forValue, getInputBits(), getResultBits());
+                return new ZeroExtendNode(forValue, getInputBits(), getResultBits());
             }
         }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SqrtNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SqrtNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,11 +35,7 @@
 @NodeInfo
 public class SqrtNode extends UnaryArithmeticNode<Sqrt> implements ArithmeticLIRLowerable, NarrowableArithmeticNode {
 
-    public static SqrtNode create(ValueNode x) {
-        return new SqrtNode(x);
-    }
-
-    protected SqrtNode(ValueNode x) {
+    public SqrtNode(ValueNode x) {
         super(ArithmeticOpTable::getSqrt, x);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SubNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SubNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -36,11 +36,7 @@
 @NodeInfo(shortName = "-")
 public class SubNode extends BinaryArithmeticNode<Sub> implements NarrowableArithmeticNode {
 
-    public static SubNode create(ValueNode x, ValueNode y) {
-        return new SubNode(x, y);
-    }
-
-    protected SubNode(ValueNode x, ValueNode y) {
+    public SubNode(ValueNode x, ValueNode y) {
         super(ArithmeticOpTable::getSub, x, y);
     }
 
@@ -75,18 +71,18 @@
                 SubNode x = (SubNode) forX;
                 if (x.getX() == forY) {
                     // (a - b) - a
-                    return NegateNode.create(x.getY());
+                    return new NegateNode(x.getY());
                 }
             }
             if (forY instanceof AddNode) {
                 AddNode y = (AddNode) forY;
                 if (y.getX() == forX) {
                     // a - (a + b)
-                    return NegateNode.create(y.getY());
+                    return new NegateNode(y.getY());
                 }
                 if (y.getY() == forX) {
                     // b - (a + b)
-                    return NegateNode.create(y.getX());
+                    return new NegateNode(y.getX());
                 }
             } else if (forY instanceof SubNode) {
                 SubNode y = (SubNode) forY;
@@ -123,7 +119,7 @@
                  * have to test for the neutral element of +, because we are doing this
                  * transformation: 0 - x == (-x) + 0 == -x.
                  */
-                return NegateNode.create(forY);
+                return new NegateNode(forY);
             }
             if (associative) {
                 return reassociate(this, ValueNode.isConstantPredicate(), forX, forY);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedDivNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedDivNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,11 +32,7 @@
 @NodeInfo(shortName = "|/|")
 public class UnsignedDivNode extends FixedBinaryNode implements Lowerable, LIRLowerable {
 
-    public static UnsignedDivNode create(ValueNode x, ValueNode y) {
-        return new UnsignedDivNode(x, y);
-    }
-
-    protected UnsignedDivNode(ValueNode x, ValueNode y) {
+    public UnsignedDivNode(ValueNode x, ValueNode y) {
         super(x.stamp().unrestricted(), x, y);
     }
 
@@ -54,7 +50,7 @@
                 return forX;
             }
             if (CodeUtil.isPowerOf2(c)) {
-                return UnsignedRightShiftNode.create(forX, ConstantNode.forInt(CodeUtil.log2(c)));
+                return new UnsignedRightShiftNode(forX, ConstantNode.forInt(CodeUtil.log2(c)));
             }
         }
         return this;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRemNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRemNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,11 +32,7 @@
 @NodeInfo(shortName = "|%|")
 public class UnsignedRemNode extends FixedBinaryNode implements Lowerable, LIRLowerable {
 
-    public static UnsignedRemNode create(ValueNode x, ValueNode y) {
-        return new UnsignedRemNode(x, y);
-    }
-
-    protected UnsignedRemNode(ValueNode x, ValueNode y) {
+    public UnsignedRemNode(ValueNode x, ValueNode y) {
         super(x.stamp().unrestricted(), x, y);
     }
 
@@ -53,7 +49,7 @@
             if (c == 1) {
                 return ConstantNode.forIntegerStamp(stamp(), 0);
             } else if (CodeUtil.isPowerOf2(c)) {
-                return AndNode.create(forX, ConstantNode.forIntegerStamp(stamp(), c - 1));
+                return new AndNode(forX, ConstantNode.forIntegerStamp(stamp(), c - 1));
             }
         }
         return this;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRightShiftNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnsignedRightShiftNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -34,11 +34,7 @@
 @NodeInfo(shortName = ">>>")
 public class UnsignedRightShiftNode extends ShiftNode<UShr> {
 
-    public static UnsignedRightShiftNode create(ValueNode x, ValueNode y) {
-        return new UnsignedRightShiftNode(x, y);
-    }
-
-    protected UnsignedRightShiftNode(ValueNode x, ValueNode y) {
+    public UnsignedRightShiftNode(ValueNode x, ValueNode y) {
         super(ArithmeticOpTable::getUShr, x, y);
     }
 
@@ -66,19 +62,19 @@
                         if (total != (total & mask)) {
                             return ConstantNode.forIntegerKind(getKind(), 0);
                         }
-                        return UnsignedRightShiftNode.create(other.getX(), ConstantNode.forInt(total));
+                        return new UnsignedRightShiftNode(other.getX(), ConstantNode.forInt(total));
                     } else if (other instanceof LeftShiftNode && otherAmount == amount) {
                         if (getKind() == Kind.Long) {
-                            return AndNode.create(other.getX(), ConstantNode.forLong(-1L >>> amount));
+                            return new AndNode(other.getX(), ConstantNode.forLong(-1L >>> amount));
                         } else {
                             assert getKind() == Kind.Int;
-                            return AndNode.create(other.getX(), ConstantNode.forInt(-1 >>> amount));
+                            return new AndNode(other.getX(), ConstantNode.forInt(-1 >>> amount));
                         }
                     }
                 }
             }
             if (originalAmout != amount) {
-                return UnsignedRightShiftNode.create(forX, ConstantNode.forInt(amount));
+                return new UnsignedRightShiftNode(forX, ConstantNode.forInt(amount));
             }
         }
         return this;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/XorNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/XorNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -36,11 +36,7 @@
 @NodeInfo(shortName = "^")
 public class XorNode extends BinaryArithmeticNode<Xor> {
 
-    public static XorNode create(ValueNode x, ValueNode y) {
-        return new XorNode(x, y);
-    }
-
-    protected XorNode(ValueNode x, ValueNode y) {
+    public XorNode(ValueNode x, ValueNode y) {
         super(ArithmeticOpTable::getXor, x, y);
         assert x.stamp().isCompatible(y.stamp());
     }
@@ -56,7 +52,7 @@
             return ConstantNode.forPrimitive(stamp(), getOp(forX, forY).getZero(forX.stamp()));
         }
         if (forX.isConstant() && !forY.isConstant()) {
-            return XorNode.create(forY, forX);
+            return new XorNode(forY, forX);
         }
         if (forY.isConstant()) {
             Constant c = forY.asConstant();
@@ -68,7 +64,7 @@
                 long rawY = ((PrimitiveConstant) c).asLong();
                 long mask = CodeUtil.mask(PrimitiveStamp.getBits(stamp()));
                 if ((rawY & mask) == mask) {
-                    return NotNode.create(forX);
+                    return new NotNode(forX);
                 }
             }
             return reassociate(this, ValueNode.isConstantPredicate(), forX, forY);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ZeroExtendNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ZeroExtendNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -39,17 +39,12 @@
 @NodeInfo
 public class ZeroExtendNode extends IntegerConvertNode<ZeroExtend, Narrow> {
 
-    public static ZeroExtendNode create(ValueNode input, int resultBits) {
-        int inputBits = PrimitiveStamp.getBits(input.stamp());
-        assert 0 < inputBits && inputBits <= resultBits;
-        return create(input, inputBits, resultBits);
+    public ZeroExtendNode(ValueNode input, int resultBits) {
+        this(input, PrimitiveStamp.getBits(input.stamp()), resultBits);
+        assert 0 < PrimitiveStamp.getBits(input.stamp()) && PrimitiveStamp.getBits(input.stamp()) <= resultBits;
     }
 
-    public static ZeroExtendNode create(ValueNode input, int inputBits, int resultBits) {
-        return new ZeroExtendNode(input, inputBits, resultBits);
-    }
-
-    protected ZeroExtendNode(ValueNode input, int inputBits, int resultBits) {
+    public ZeroExtendNode(ValueNode input, int inputBits, int resultBits) {
         super(ArithmeticOpTable::getZeroExtend, ArithmeticOpTable::getNarrow, inputBits, resultBits, input);
     }
 
@@ -82,7 +77,7 @@
             // xxxx -(zero-extend)-> 0000 xxxx -(zero-extend)-> 00000000 0000xxxx
             // ==> xxxx -(zero-extend)-> 00000000 0000xxxx
             ZeroExtendNode other = (ZeroExtendNode) forValue;
-            return ZeroExtendNode.create(other.getValue(), other.getInputBits(), getResultBits());
+            return new ZeroExtendNode(other.getValue(), other.getInputBits(), getResultBits());
         }
         if (forValue instanceof NarrowNode) {
             NarrowNode narrow = (NarrowNode) forValue;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/DynamicCounterNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/DynamicCounterNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -44,11 +44,7 @@
     protected final String group;
     protected final boolean withContext;
 
-    public static DynamicCounterNode create(String name, String group, ValueNode increment, boolean withContext) {
-        return new DynamicCounterNode(name, group, increment, withContext);
-    }
-
-    protected DynamicCounterNode(String name, String group, ValueNode increment, boolean withContext) {
+    public DynamicCounterNode(String name, String group, ValueNode increment, boolean withContext) {
         super(StampFactory.forVoid());
         this.name = name;
         this.group = group;
@@ -79,7 +75,7 @@
 
     public static void addCounterBefore(String group, String name, long increment, boolean withContext, FixedNode position) {
         StructuredGraph graph = position.graph();
-        graph.addBeforeFixed(position, position.graph().add(DynamicCounterNode.create(name, group, ConstantNode.forLong(increment, position.graph()), withContext)));
+        graph.addBeforeFixed(position, position.graph().add(new DynamicCounterNode(name, group, ConstantNode.forLong(increment, position.graph()), withContext)));
     }
 
     @NodeIntrinsic
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/VerifyHeapNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/VerifyHeapNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -34,11 +34,7 @@
 @NodeInfo
 public class VerifyHeapNode extends FixedWithNextNode implements Lowerable {
 
-    public static VerifyHeapNode create() {
-        return new VerifyHeapNode();
-    }
-
-    protected VerifyHeapNode() {
+    public VerifyHeapNode() {
         super(StampFactory.forVoid());
     }
 
@@ -49,12 +45,12 @@
 
     public static void addBefore(FixedNode position) {
         StructuredGraph graph = position.graph();
-        graph.addBeforeFixed(position, graph.add(VerifyHeapNode.create()));
+        graph.addBeforeFixed(position, graph.add(new VerifyHeapNode()));
     }
 
     public static void addAfter(FixedWithNextNode position) {
         StructuredGraph graph = position.graph();
-        graph.addAfterFixed(position, graph.add(VerifyHeapNode.create()));
+        graph.addAfterFixed(position, graph.add(new VerifyHeapNode()));
     }
 
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/WeakCounterNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/debug/WeakCounterNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
 
     @Input ValueNode checkedValue;
 
-    public static WeakCounterNode create(String group, String name, ValueNode increment, boolean addContext, ValueNode checkedValue) {
-        return new WeakCounterNode(group, name, increment, addContext, checkedValue);
-    }
-
-    protected WeakCounterNode(String group, String name, ValueNode increment, boolean addContext, ValueNode checkedValue) {
+    public WeakCounterNode(String group, String name, ValueNode increment, boolean addContext, ValueNode checkedValue) {
         super(group, name, increment, addContext);
         this.checkedValue = checkedValue;
     }
@@ -65,7 +61,7 @@
 
     public static void addCounterBefore(String group, String name, long increment, boolean addContext, ValueNode checkedValue, FixedNode position) {
         StructuredGraph graph = position.graph();
-        WeakCounterNode counter = graph.add(WeakCounterNode.create(name, group, ConstantNode.forLong(increment, graph), addContext, checkedValue));
+        WeakCounterNode counter = graph.add(new WeakCounterNode(name, group, ConstantNode.forLong(increment, graph), addContext, checkedValue));
         graph.addBeforeFixed(position, counter);
     }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AddLocationNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AddLocationNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -24,7 +24,6 @@
 
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.compiler.common.type.*;
-import com.oracle.graal.graph.*;
 import com.oracle.graal.graph.spi.*;
 import com.oracle.graal.lir.gen.*;
 import com.oracle.graal.nodeinfo.*;
@@ -50,17 +49,9 @@
         return (LocationNode) y;
     }
 
-    public static AddLocationNode create(LocationNode x, LocationNode y, Graph graph) {
+    public AddLocationNode(LocationNode x, LocationNode y) {
+        super(StampFactory.forVoid());
         assert x.getLocationIdentity().equals(y.getLocationIdentity());
-        return graph.unique(AddLocationNode.create(x, y));
-    }
-
-    public static AddLocationNode create(ValueNode x, ValueNode y) {
-        return new AddLocationNode(x, y);
-    }
-
-    protected AddLocationNode(ValueNode x, ValueNode y) {
-        super(StampFactory.forVoid());
         this.x = x;
         this.y = y;
     }
@@ -83,7 +74,7 @@
             if (xIdx.getIndexScaling() == yIdx.getIndexScaling()) {
                 long displacement = xIdx.getDisplacement() + yIdx.getDisplacement();
                 ValueNode index = BinaryArithmeticNode.add(xIdx.getIndex(), yIdx.getIndex());
-                return IndexedLocationNode.create(getLocationIdentity(), displacement, index, xIdx.getIndexScaling());
+                return new IndexedLocationNode(getLocationIdentity(), displacement, index, xIdx.getIndexScaling());
             }
         }
         return this;
@@ -92,15 +83,15 @@
     private LocationNode canonical(ConstantLocationNode constant, LocationNode other) {
         if (other instanceof ConstantLocationNode) {
             ConstantLocationNode otherConst = (ConstantLocationNode) other;
-            return ConstantLocationNode.create(getLocationIdentity(), otherConst.getDisplacement() + constant.getDisplacement());
+            return new ConstantLocationNode(getLocationIdentity(), otherConst.getDisplacement() + constant.getDisplacement());
         } else if (other instanceof IndexedLocationNode) {
             IndexedLocationNode otherIdx = (IndexedLocationNode) other;
-            return IndexedLocationNode.create(getLocationIdentity(), otherIdx.getDisplacement() + constant.getDisplacement(), otherIdx.getIndex(), otherIdx.getIndexScaling());
+            return new IndexedLocationNode(getLocationIdentity(), otherIdx.getDisplacement() + constant.getDisplacement(), otherIdx.getIndex(), otherIdx.getIndexScaling());
         } else if (other instanceof AddLocationNode) {
             AddLocationNode otherAdd = (AddLocationNode) other;
             LocationNode newInner = otherAdd.canonical(constant, otherAdd.getX());
             if (newInner != otherAdd) {
-                return AddLocationNode.create(newInner, otherAdd.getY());
+                return new AddLocationNode(newInner, otherAdd.getY());
             }
         }
         return this;
@@ -116,7 +107,4 @@
     public IntegerStamp getDisplacementStamp() {
         return (IntegerStamp) IntegerStamp.OPS.getAdd().foldStamp(getX().getDisplacementStamp(), getY().getDisplacementStamp());
     }
-
-    @NodeIntrinsic
-    public static native Location addLocation(Location x, Location y);
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BoxNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BoxNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -44,11 +44,7 @@
 
     protected final Kind boxingKind;
 
-    public static BoxNode create(ValueNode value, ResolvedJavaType resultType, Kind boxingKind) {
-        return new BoxNode(value, resultType, boxingKind);
-    }
-
-    protected BoxNode(ValueNode value, ResolvedJavaType resultType, Kind boxingKind) {
+    public BoxNode(ValueNode value, ResolvedJavaType resultType, Kind boxingKind) {
         super(StampFactory.exactNonNull(resultType), value);
         this.boxingKind = boxingKind;
     }
@@ -76,7 +72,7 @@
         ValueNode v = tool.getReplacedValue(getValue());
         ResolvedJavaType type = StampTool.typeOrNull(stamp());
 
-        VirtualBoxingNode newVirtual = VirtualBoxingNode.create(type, boxingKind);
+        VirtualBoxingNode newVirtual = new VirtualBoxingNode(type, boxingKind);
         assert newVirtual.getFields().length == 1;
 
         tool.createVirtualObject(newVirtual, new ValueNode[]{v}, Collections.<MonitorIdNode> emptyList());
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BranchProbabilityNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BranchProbabilityNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -53,11 +53,7 @@
     @Input ValueNode probability;
     @Input ValueNode condition;
 
-    public static BranchProbabilityNode create(ValueNode probability, ValueNode condition) {
-        return new BranchProbabilityNode(probability, condition);
-    }
-
-    protected BranchProbabilityNode(ValueNode probability, ValueNode condition) {
+    public BranchProbabilityNode(ValueNode probability, ValueNode condition) {
         super(condition.stamp());
         this.probability = probability;
         this.condition = condition;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BytecodeExceptionNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/BytecodeExceptionNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -39,11 +39,7 @@
     protected final Class<? extends Throwable> exceptionClass;
     @Input NodeInputList<ValueNode> arguments;
 
-    public static BytecodeExceptionNode create(MetaAccessProvider metaAccess, Class<? extends Throwable> exceptionClass, ValueNode... arguments) {
-        return new BytecodeExceptionNode(metaAccess, exceptionClass, arguments);
-    }
-
-    protected BytecodeExceptionNode(MetaAccessProvider metaAccess, Class<? extends Throwable> exceptionClass, ValueNode... arguments) {
+    public BytecodeExceptionNode(MetaAccessProvider metaAccess, Class<? extends Throwable> exceptionClass, ValueNode... arguments) {
         super(StampFactory.exactNonNull(metaAccess.lookupJavaType(exceptionClass)));
         this.exceptionClass = exceptionClass;
         this.arguments = new NodeInputList<>(this, arguments);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ComputeAddressNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ComputeAddressNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -43,11 +43,7 @@
         return (LocationNode) location;
     }
 
-    public static ComputeAddressNode create(ValueNode object, ValueNode location, Stamp stamp) {
-        return new ComputeAddressNode(object, location, stamp);
-    }
-
-    protected ComputeAddressNode(ValueNode object, ValueNode location, Stamp stamp) {
+    public ComputeAddressNode(ValueNode object, ValueNode location, Stamp stamp) {
         super(stamp);
         this.object = object;
         this.location = location;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ConstantLocationNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ConstantLocationNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -24,7 +24,6 @@
 
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.compiler.common.type.*;
-import com.oracle.graal.graph.*;
 import com.oracle.graal.lir.gen.*;
 import com.oracle.graal.nodeinfo.*;
 import com.oracle.graal.nodes.spi.*;
@@ -39,15 +38,7 @@
     protected final LocationIdentity locationIdentity;
     protected final long displacement;
 
-    public static ConstantLocationNode create(LocationIdentity identity, long displacement, Graph graph) {
-        return graph.unique(ConstantLocationNode.create(identity, displacement));
-    }
-
-    public static ConstantLocationNode create(LocationIdentity identity, long displacement) {
-        return new ConstantLocationNode(identity, displacement);
-    }
-
-    protected ConstantLocationNode(LocationIdentity identity, long displacement) {
+    public ConstantLocationNode(LocationIdentity identity, long displacement) {
         super(StampFactory.forVoid());
         this.locationIdentity = identity;
         this.displacement = displacement;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FixedValueAnchorNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FixedValueAnchorNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -36,14 +36,9 @@
         return object;
     }
 
-    public static FixedValueAnchorNode create(ValueNode object) {
-        return new FixedValueAnchorNode(object);
-    }
-
-    protected FixedValueAnchorNode(ValueNode object) {
+    public FixedValueAnchorNode(ValueNode object) {
         super(StampFactory.forNodeIntrinsic());
         this.object = object;
-
     }
 
     @Override
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -39,27 +39,15 @@
 
     @OptionalInput(InputType.Memory) MemoryNode lastLocationAccess;
 
-    public static FloatingReadNode create(ValueNode object, LocationNode location, MemoryNode lastLocationAccess, Stamp stamp) {
-        return new FloatingReadNode(object, location, lastLocationAccess, stamp);
-    }
-
-    protected FloatingReadNode(ValueNode object, LocationNode location, MemoryNode lastLocationAccess, Stamp stamp) {
+    public FloatingReadNode(ValueNode object, LocationNode location, MemoryNode lastLocationAccess, Stamp stamp) {
         this(object, location, lastLocationAccess, stamp, null, BarrierType.NONE);
     }
 
-    public static FloatingReadNode create(ValueNode object, LocationNode location, MemoryNode lastLocationAccess, Stamp stamp, GuardingNode guard) {
-        return new FloatingReadNode(object, location, lastLocationAccess, stamp, guard);
-    }
-
-    protected FloatingReadNode(ValueNode object, LocationNode location, MemoryNode lastLocationAccess, Stamp stamp, GuardingNode guard) {
+    public FloatingReadNode(ValueNode object, LocationNode location, MemoryNode lastLocationAccess, Stamp stamp, GuardingNode guard) {
         this(object, location, lastLocationAccess, stamp, guard, BarrierType.NONE);
     }
 
-    public static FloatingReadNode create(ValueNode object, LocationNode location, MemoryNode lastLocationAccess, Stamp stamp, GuardingNode guard, BarrierType barrierType) {
-        return new FloatingReadNode(object, location, lastLocationAccess, stamp, guard, barrierType);
-    }
-
-    protected FloatingReadNode(ValueNode object, LocationNode location, MemoryNode lastLocationAccess, Stamp stamp, GuardingNode guard, BarrierType barrierType) {
+    public FloatingReadNode(ValueNode object, LocationNode location, MemoryNode lastLocationAccess, Stamp stamp, GuardingNode guard, BarrierType barrierType) {
         super(object, location, stamp, guard, barrierType);
         this.lastLocationAccess = lastLocationAccess;
     }
@@ -83,14 +71,14 @@
     @Override
     public Node canonical(CanonicalizerTool tool) {
         if (object() instanceof PiNode && ((PiNode) object()).getGuard() == getGuard()) {
-            return FloatingReadNode.create(((PiNode) object()).getOriginalNode(), location(), getLastLocationAccess(), stamp(), getGuard(), getBarrierType());
+            return new FloatingReadNode(((PiNode) object()).getOriginalNode(), location(), getLastLocationAccess(), stamp(), getGuard(), getBarrierType());
         }
         return ReadNode.canonicalizeRead(this, location(), object(), tool);
     }
 
     @Override
     public FixedAccessNode asFixedNode() {
-        return graph().add(ReadNode.create(object(), accessLocation(), stamp(), getGuard(), getBarrierType()));
+        return graph().add(new ReadNode(object(), accessLocation(), stamp(), getGuard(), getBarrierType()));
     }
 
     @Override
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -45,41 +45,25 @@
     protected final ForeignCallDescriptor descriptor;
     protected int bci = BytecodeFrame.UNKNOWN_BCI;
 
-    public static ForeignCallNode create(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, ValueNode... arguments) {
-        return new ForeignCallNode(foreignCalls, descriptor, arguments);
-    }
-
-    protected ForeignCallNode(ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, ValueNode... arguments) {
+    public ForeignCallNode(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, ValueNode... arguments) {
         super(StampFactory.forKind(Kind.fromJavaClass(descriptor.getResultType())));
         this.arguments = new NodeInputList<>(this, arguments);
         this.descriptor = descriptor;
         this.foreignCalls = foreignCalls;
     }
 
-    public static ForeignCallNode create(ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, List<ValueNode> arguments) {
-        return new ForeignCallNode(foreignCalls, descriptor, arguments);
-    }
-
-    protected ForeignCallNode(ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, List<ValueNode> arguments) {
+    public ForeignCallNode(ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, List<ValueNode> arguments) {
         this(foreignCalls, descriptor, StampFactory.forKind(Kind.fromJavaClass(descriptor.getResultType())), arguments);
     }
 
-    public static ForeignCallNode create(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, Stamp stamp, List<ValueNode> arguments) {
-        return new ForeignCallNode(foreignCalls, descriptor, stamp, arguments);
-    }
-
-    protected ForeignCallNode(ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, Stamp stamp, List<ValueNode> arguments) {
+    public ForeignCallNode(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, Stamp stamp, List<ValueNode> arguments) {
         super(stamp);
         this.arguments = new NodeInputList<>(this, arguments);
         this.descriptor = descriptor;
         this.foreignCalls = foreignCalls;
     }
 
-    public static ForeignCallNode create(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, Stamp stamp) {
-        return new ForeignCallNode(foreignCalls, descriptor, stamp);
-    }
-
-    protected ForeignCallNode(ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, Stamp stamp) {
+    public ForeignCallNode(@InjectedNodeParameter ForeignCallsProvider foreignCalls, ForeignCallDescriptor descriptor, Stamp stamp) {
         super(stamp);
         this.arguments = new NodeInputList<>(this);
         this.descriptor = descriptor;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -63,15 +63,7 @@
         return indexScaling;
     }
 
-    public static IndexedLocationNode create(LocationIdentity identity, long displacement, ValueNode index, Graph graph, int indexScaling) {
-        return graph.unique(IndexedLocationNode.create(identity, displacement, index, indexScaling));
-    }
-
-    public static IndexedLocationNode create(LocationIdentity identity, long displacement, ValueNode index, int indexScaling) {
-        return new IndexedLocationNode(identity, displacement, index, indexScaling);
-    }
-
-    protected IndexedLocationNode(LocationIdentity identity, long displacement, ValueNode index, int indexScaling) {
+    public IndexedLocationNode(LocationIdentity identity, long displacement, ValueNode index, int indexScaling) {
         super(StampFactory.forVoid());
         assert index != null;
         assert indexScaling != 0;
@@ -89,7 +81,7 @@
     @Override
     public Node canonical(CanonicalizerTool tool) {
         if (index.isConstant()) {
-            return ConstantLocationNode.create(getLocationIdentity(), index.asJavaConstant().asLong() * indexScaling + displacement);
+            return new ConstantLocationNode(getLocationIdentity(), index.asJavaConstant().asLong() * indexScaling + displacement);
         }
         return this;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IntegerSwitchNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IntegerSwitchNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -41,21 +41,7 @@
 
     protected final int[] keys;
 
-    /**
-     * Constructs a integer switch instruction. The keyProbabilities and keySuccessors array contain
-     * key.length + 1 entries, the last entry describes the default (fall through) case.
-     *
-     * @param value the instruction producing the value being switched on
-     * @param successors the list of successors
-     * @param keys the sorted list of keys
-     * @param keyProbabilities the probabilities of the keys
-     * @param keySuccessors the successor index for each key
-     */
-    public static IntegerSwitchNode create(ValueNode value, BeginNode[] successors, int[] keys, double[] keyProbabilities, int[] keySuccessors) {
-        return new IntegerSwitchNode(value, successors, keys, keyProbabilities, keySuccessors);
-    }
-
-    protected IntegerSwitchNode(ValueNode value, BeginNode[] successors, int[] keys, double[] keyProbabilities, int[] keySuccessors) {
+    public IntegerSwitchNode(ValueNode value, BeginNode[] successors, int[] keys, double[] keyProbabilities, int[] keySuccessors) {
         super(value, successors, keySuccessors, keyProbabilities);
         assert keySuccessors.length == keys.length + 1;
         assert keySuccessors.length == keyProbabilities.length;
@@ -71,21 +57,7 @@
         return true;
     }
 
-    /**
-     * Constructs a integer switch instruction. The keyProbabilities and keySuccessors array contain
-     * key.length + 1 entries, the last entry describes the default (fall through) case.
-     *
-     * @param value the instruction producing the value being switched on
-     * @param successorCount the number of successors
-     * @param keys the sorted list of keys
-     * @param keyProbabilities the probabilities of the keys
-     * @param keySuccessors the successor index for each key
-     */
-    public static IntegerSwitchNode create(ValueNode value, int successorCount, int[] keys, double[] keyProbabilities, int[] keySuccessors) {
-        return new IntegerSwitchNode(value, successorCount, keys, keyProbabilities, keySuccessors);
-    }
-
-    protected IntegerSwitchNode(ValueNode value, int successorCount, int[] keys, double[] keyProbabilities, int[] keySuccessors) {
+    public IntegerSwitchNode(ValueNode value, int successorCount, int[] keys, double[] keyProbabilities, int[] keySuccessors) {
         this(value, new BeginNode[successorCount], keys, keyProbabilities, keySuccessors);
     }
 
@@ -199,7 +171,7 @@
                     }
 
                     BeginNode[] successorsArray = newSuccessors.toArray(new BeginNode[newSuccessors.size()]);
-                    IntegerSwitchNode newSwitch = graph().add(IntegerSwitchNode.create(value(), successorsArray, newKeys, newKeyProbabilities, newKeySuccessors));
+                    IntegerSwitchNode newSwitch = graph().add(new IntegerSwitchNode(value(), successorsArray, newKeys, newKeyProbabilities, newKeySuccessors));
                     ((FixedWithNextNode) predecessor()).setNext(newSwitch);
                     GraphUtil.killWithUnusedFloatingInputs(this);
                 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/JavaReadNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/JavaReadNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -40,11 +40,7 @@
     protected final Kind readKind;
     protected final boolean compressible;
 
-    public static JavaReadNode create(Kind readKind, ValueNode object, LocationNode location, BarrierType barrierType, boolean compressible) {
-        return new JavaReadNode(readKind, object, location, barrierType, compressible);
-    }
-
-    protected JavaReadNode(Kind readKind, ValueNode object, LocationNode location, BarrierType barrierType, boolean compressible) {
+    public JavaReadNode(Kind readKind, ValueNode object, LocationNode location, BarrierType barrierType, boolean compressible) {
         super(object, location, StampFactory.forKind(readKind), barrierType);
         this.readKind = readKind;
         this.compressible = compressible;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/JavaWriteNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/JavaWriteNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -37,11 +37,7 @@
     protected final Kind writeKind;
     protected final boolean compressible;
 
-    public static JavaWriteNode create(Kind writeKind, ValueNode object, ValueNode value, ValueNode location, BarrierType barrierType, boolean compressible, boolean initialization) {
-        return new JavaWriteNode(writeKind, object, value, location, barrierType, compressible, initialization);
-    }
-
-    protected JavaWriteNode(Kind writeKind, ValueNode object, ValueNode value, ValueNode location, BarrierType barrierType, boolean compressible, boolean initialization) {
+    public JavaWriteNode(Kind writeKind, ValueNode object, ValueNode value, ValueNode location, BarrierType barrierType, boolean compressible, boolean initialization) {
         super(object, value, location, barrierType, initialization);
         this.writeKind = writeKind;
         this.compressible = compressible;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -41,21 +41,17 @@
         return value;
     }
 
-    public static LoadHubNode create(@InjectedNodeParameter StampProvider stampProvider, ValueNode value) {
-        return new LoadHubNode(hubStamp(stampProvider, value), value, null);
-    }
-
-    public static LoadHubNode create(@InjectedNodeParameter StampProvider stampProvider, ValueNode value, ValueNode guard) {
-        return new LoadHubNode(hubStamp(stampProvider, value), value, guard);
-    }
-
     private static Stamp hubStamp(StampProvider stampProvider, ValueNode value) {
         assert value.stamp() instanceof ObjectStamp;
         return stampProvider.createHubStamp(((ObjectStamp) value.stamp()));
     }
 
-    protected LoadHubNode(Stamp stamp, ValueNode value, ValueNode guard) {
-        super(stamp, (GuardingNode) guard);
+    public LoadHubNode(@InjectedNodeParameter StampProvider stampProvider, ValueNode value) {
+        this(stampProvider, value, null);
+    }
+
+    public LoadHubNode(@InjectedNodeParameter StampProvider stampProvider, ValueNode value, ValueNode guard) {
+        super(hubStamp(stampProvider, value), (GuardingNode) guard);
         assert value != guard;
         this.value = value;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadMethodNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadMethodNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -45,11 +45,7 @@
         return hub;
     }
 
-    public static LoadMethodNode create(@InjectedNodeParameter Stamp stamp, ResolvedJavaMethod method, ResolvedJavaType receiverType, ValueNode hub) {
-        return new LoadMethodNode(stamp, method, receiverType, hub);
-    }
-
-    protected LoadMethodNode(Stamp stamp, ResolvedJavaMethod method, ResolvedJavaType receiverType, ValueNode hub) {
+    public LoadMethodNode(@InjectedNodeParameter Stamp stamp, ResolvedJavaMethod method, ResolvedJavaType receiverType, ValueNode hub) {
         super(stamp);
         this.receiverType = receiverType;
         this.hub = hub;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MembarNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/MembarNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -28,7 +28,6 @@
 
 import sun.misc.*;
 
-import com.oracle.graal.api.code.*;
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.compiler.common.*;
 import com.oracle.graal.compiler.common.type.*;
@@ -44,14 +43,7 @@
 
     protected final int barriers;
 
-    /**
-     * @param barriers a mask of the barrier constants defined in {@link MemoryBarriers}
-     */
-    public static MembarNode create(int barriers) {
-        return new MembarNode(barriers);
-    }
-
-    protected MembarNode(int barriers) {
+    public MembarNode(int barriers) {
         super(StampFactory.forVoid());
         this.barriers = barriers;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/NullCheckNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/NullCheckNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,11 +32,7 @@
 
     @Input ValueNode object;
 
-    public static NullCheckNode create(ValueNode object) {
-        return new NullCheckNode(object);
-    }
-
-    protected NullCheckNode(ValueNode object) {
+    public NullCheckNode(ValueNode object) {
         super(StampFactory.forVoid());
         this.object = object;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/OSRLocalNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/OSRLocalNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -30,11 +30,7 @@
 @NodeInfo(nameTemplate = "OSRLocal({p#index})")
 public class OSRLocalNode extends AbstractLocalNode implements IterableNodeType {
 
-    public static OSRLocalNode create(int index, Stamp stamp) {
-        return new OSRLocalNode(index, stamp);
-    }
-
-    protected OSRLocalNode(int index, Stamp stamp) {
+    public OSRLocalNode(int index, Stamp stamp) {
         super(index, stamp);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/OSRStartNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/OSRStartNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -29,11 +29,7 @@
 
 @NodeInfo
 public class OSRStartNode extends StartNode implements Lowerable {
-    public static OSRStartNode create() {
-        return new OSRStartNode();
-    }
-
-    protected OSRStartNode() {
+    public OSRStartNode() {
     }
 
     @Override
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -39,35 +39,19 @@
 @NodeInfo
 public class ReadNode extends FloatableAccessNode implements LIRLowerable, Canonicalizable, PiPushable, Virtualizable, GuardingNode {
 
-    public static ReadNode create(ValueNode object, ValueNode location, Stamp stamp, BarrierType barrierType) {
-        return new ReadNode(object, location, stamp, barrierType);
-    }
-
-    protected ReadNode(ValueNode object, ValueNode location, Stamp stamp, BarrierType barrierType) {
+    public ReadNode(ValueNode object, ValueNode location, Stamp stamp, BarrierType barrierType) {
         super(object, location, stamp, null, barrierType);
     }
 
-    public static ReadNode create(ValueNode object, ValueNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType) {
-        return new ReadNode(object, location, stamp, guard, barrierType);
-    }
-
-    protected ReadNode(ValueNode object, ValueNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType) {
+    public ReadNode(ValueNode object, ValueNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType) {
         super(object, location, stamp, guard, barrierType);
     }
 
-    public static ReadNode create(ValueNode object, ValueNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType, boolean nullCheck, FrameState stateBefore) {
-        return new ReadNode(object, location, stamp, guard, barrierType, nullCheck, stateBefore);
-    }
-
-    protected ReadNode(ValueNode object, ValueNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType, boolean nullCheck, FrameState stateBefore) {
+    public ReadNode(ValueNode object, ValueNode location, Stamp stamp, GuardingNode guard, BarrierType barrierType, boolean nullCheck, FrameState stateBefore) {
         super(object, location, stamp, guard, barrierType, nullCheck, stateBefore);
     }
 
-    public static ReadNode create(ValueNode object, ValueNode location, ValueNode guard, BarrierType barrierType) {
-        return new ReadNode(object, location, guard, barrierType);
-    }
-
-    protected ReadNode(ValueNode object, ValueNode location, ValueNode guard, BarrierType barrierType) {
+    public ReadNode(ValueNode object, ValueNode location, ValueNode guard, BarrierType barrierType) {
         /*
          * Used by node intrinsics. Really, you can trust me on that! Since the initial value for
          * location is a parameter, i.e., a ParameterNode, the constructor cannot use the declared
@@ -88,14 +72,14 @@
         if (usages().isEmpty()) {
             if (getGuard() != null && !(getGuard() instanceof FixedNode)) {
                 // The guard is necessary even if the read goes away.
-                return ValueAnchorNode.create((ValueNode) getGuard());
+                return new ValueAnchorNode((ValueNode) getGuard());
             } else {
                 // Read without usages or guard can be safely removed.
                 return null;
             }
         }
         if (object() instanceof PiNode && ((PiNode) object()).getGuard() == getGuard()) {
-            return ReadNode.create(((PiNode) object()).getOriginalNode(), location(), stamp(), getGuard(), getBarrierType(), getNullCheck(), stateBefore());
+            return new ReadNode(((PiNode) object()).getOriginalNode(), location(), stamp(), getGuard(), getBarrierType(), getNullCheck(), stateBefore());
         }
         if (!getNullCheck()) {
             return canonicalizeRead(this, location(), object(), tool);
@@ -108,7 +92,7 @@
 
     @Override
     public FloatingAccessNode asFloatingNode(MemoryNode lastLocationAccess) {
-        return graph().unique(FloatingReadNode.create(object(), location(), lastLocationAccess, stamp(), getGuard(), getBarrierType()));
+        return graph().unique(new FloatingReadNode(object(), location(), lastLocationAccess, stamp(), getGuard(), getBarrierType()));
     }
 
     @Override
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/StoreHubNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/StoreHubNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -41,11 +41,7 @@
         return object;
     }
 
-    public static StoreHubNode create(ValueNode object, ValueNode value) {
-        return new StoreHubNode(object, value);
-    }
-
-    protected StoreHubNode(ValueNode object, ValueNode value) {
+    public StoreHubNode(ValueNode object, ValueNode value) {
         super(StampFactory.forVoid());
         this.value = value;
         this.object = object;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnboxNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnboxNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,11 +35,7 @@
 
     protected final Kind boxingKind;
 
-    public static UnboxNode create(ValueNode value, Kind boxingKind) {
-        return new UnboxNode(value, boxingKind);
-    }
-
-    protected UnboxNode(ValueNode value, Kind boxingKind) {
+    public UnboxNode(ValueNode value, Kind boxingKind) {
         super(StampFactory.forKind(boxingKind.getStackKind()), value);
         this.boxingKind = boxingKind;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeCastNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -42,29 +42,17 @@
 
     @Input ValueNode object;
 
-    public static UnsafeCastNode create(ValueNode object, Stamp stamp) {
-        return new UnsafeCastNode(object, stamp);
-    }
-
-    protected UnsafeCastNode(ValueNode object, Stamp stamp) {
+    public UnsafeCastNode(ValueNode object, Stamp stamp) {
         super(stamp);
         this.object = object;
     }
 
-    public static UnsafeCastNode create(ValueNode object, Stamp stamp, ValueNode anchor) {
-        return new UnsafeCastNode(object, stamp, anchor);
-    }
-
-    protected UnsafeCastNode(ValueNode object, Stamp stamp, ValueNode anchor) {
+    public UnsafeCastNode(ValueNode object, Stamp stamp, ValueNode anchor) {
         super(stamp, (GuardingNode) anchor);
         this.object = object;
     }
 
-    public static UnsafeCastNode create(ValueNode object, ResolvedJavaType toType, boolean exactType, boolean nonNull) {
-        return new UnsafeCastNode(object, toType, exactType, nonNull);
-    }
-
-    protected UnsafeCastNode(ValueNode object, ResolvedJavaType toType, boolean exactType, boolean nonNull) {
+    public UnsafeCastNode(ValueNode object, ResolvedJavaType toType, boolean exactType, boolean nonNull) {
         this(object, toType.getKind() == Kind.Object ? StampFactory.object(toType, exactType, nonNull || StampTool.isPointerNonNull(object.stamp()), true) : StampFactory.forKind(toType.getKind()));
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -39,19 +39,11 @@
 public class UnsafeLoadNode extends UnsafeAccessNode implements Lowerable, Virtualizable {
     @OptionalInput(InputType.Condition) LogicNode guardingCondition;
 
-    public static UnsafeLoadNode create(ValueNode object, ValueNode offset, Kind accessKind, LocationIdentity locationIdentity) {
-        return new UnsafeLoadNode(object, offset, accessKind, locationIdentity);
-    }
-
-    protected UnsafeLoadNode(ValueNode object, ValueNode offset, Kind accessKind, LocationIdentity locationIdentity) {
+    public UnsafeLoadNode(ValueNode object, ValueNode offset, Kind accessKind, LocationIdentity locationIdentity) {
         this(object, offset, accessKind, locationIdentity, null);
     }
 
-    public static UnsafeLoadNode create(ValueNode object, ValueNode offset, Kind accessKind, LocationIdentity locationIdentity, LogicNode condition) {
-        return new UnsafeLoadNode(object, offset, accessKind, locationIdentity, condition);
-    }
-
-    protected UnsafeLoadNode(ValueNode object, ValueNode offset, Kind accessKind, LocationIdentity locationIdentity, LogicNode condition) {
+    public UnsafeLoadNode(ValueNode object, ValueNode offset, Kind accessKind, LocationIdentity locationIdentity, LogicNode condition) {
         super(StampFactory.forKind(accessKind.getStackKind()), object, offset, accessKind, locationIdentity);
         this.guardingCondition = condition;
     }
@@ -85,12 +77,12 @@
 
     @Override
     protected ValueNode cloneAsFieldAccess(ResolvedJavaField field) {
-        return LoadFieldNode.create(object(), field);
+        return new LoadFieldNode(object(), field);
     }
 
     @Override
     protected ValueNode cloneAsArrayAccess(ValueNode location, LocationIdentity identity) {
-        return UnsafeLoadNode.create(object(), location, accessKind(), identity, guardingCondition);
+        return new UnsafeLoadNode(object(), location, accessKind(), identity, guardingCondition);
     }
 
     @SuppressWarnings({"unchecked", "unused"})
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -41,19 +41,11 @@
     @Input ValueNode value;
     @OptionalInput(InputType.State) FrameState stateAfter;
 
-    public static UnsafeStoreNode create(ValueNode object, ValueNode offset, ValueNode value, Kind accessKind, LocationIdentity locationIdentity) {
-        return new UnsafeStoreNode(object, offset, value, accessKind, locationIdentity);
-    }
-
-    protected UnsafeStoreNode(ValueNode object, ValueNode offset, ValueNode value, Kind accessKind, LocationIdentity locationIdentity) {
+    public UnsafeStoreNode(ValueNode object, ValueNode offset, ValueNode value, Kind accessKind, LocationIdentity locationIdentity) {
         this(object, offset, value, accessKind, locationIdentity, null);
     }
 
-    public static UnsafeStoreNode create(ValueNode object, ValueNode offset, ValueNode value, Kind accessKind, LocationIdentity locationIdentity, FrameState stateAfter) {
-        return new UnsafeStoreNode(object, offset, value, accessKind, locationIdentity, stateAfter);
-    }
-
-    protected UnsafeStoreNode(ValueNode object, ValueNode offset, ValueNode value, Kind accessKind, LocationIdentity locationIdentity, FrameState stateAfter) {
+    public UnsafeStoreNode(ValueNode object, ValueNode offset, ValueNode value, Kind accessKind, LocationIdentity locationIdentity, FrameState stateAfter) {
         super(StampFactory.forVoid(), object, offset, accessKind, locationIdentity);
         this.value = value;
         this.stateAfter = stateAfter;
@@ -117,12 +109,12 @@
 
     @Override
     protected ValueNode cloneAsFieldAccess(ResolvedJavaField field) {
-        return StoreFieldNode.create(object(), field, value(), stateAfter());
+        return new StoreFieldNode(object(), field, value(), stateAfter());
     }
 
     @Override
     protected ValueNode cloneAsArrayAccess(ValueNode location, LocationIdentity identity) {
-        return UnsafeStoreNode.create(object(), location, value, accessKind(), identity, stateAfter());
+        return new UnsafeStoreNode(object(), location, value, accessKind(), identity, stateAfter());
     }
 
     public FrameState getState() {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ValueAnchorNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ValueAnchorNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
 
     @OptionalInput(InputType.Guard) ValueNode anchored;
 
-    public static ValueAnchorNode create(ValueNode value) {
-        return new ValueAnchorNode(value);
-    }
-
-    protected ValueAnchorNode(ValueNode value) {
+    public ValueAnchorNode(ValueNode value) {
         super(StampFactory.forVoid());
         this.anchored = value;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -36,27 +36,15 @@
 @NodeInfo
 public class WriteNode extends AbstractWriteNode implements LIRLowerable, Simplifiable, Virtualizable {
 
-    public static WriteNode create(ValueNode object, ValueNode value, ValueNode location, BarrierType barrierType) {
-        return new WriteNode(object, value, location, barrierType);
-    }
-
-    protected WriteNode(ValueNode object, ValueNode value, ValueNode location, BarrierType barrierType) {
+    public WriteNode(ValueNode object, ValueNode value, ValueNode location, BarrierType barrierType) {
         super(object, value, location, barrierType);
     }
 
-    public static WriteNode create(ValueNode object, ValueNode value, ValueNode location, BarrierType barrierType, boolean initialization) {
-        return new WriteNode(object, value, location, barrierType, initialization);
-    }
-
-    protected WriteNode(ValueNode object, ValueNode value, ValueNode location, BarrierType barrierType, boolean initialization) {
+    public WriteNode(ValueNode object, ValueNode value, ValueNode location, BarrierType barrierType, boolean initialization) {
         super(object, value, location, barrierType, initialization);
     }
 
-    public static WriteNode create(ValueNode object, ValueNode value, ValueNode location, BarrierType barrierType, GuardingNode guard, boolean initialization) {
-        return new WriteNode(object, value, location, barrierType, guard, initialization);
-    }
-
-    protected WriteNode(ValueNode object, ValueNode value, ValueNode location, BarrierType barrierType, GuardingNode guard, boolean initialization) {
+    public WriteNode(ValueNode object, ValueNode value, ValueNode location, BarrierType barrierType, GuardingNode guard, boolean initialization) {
         super(object, value, location, barrierType, guard, initialization);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewArrayNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewArrayNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -41,18 +41,7 @@
         return length;
     }
 
-    /**
-     * Constructs a new AbstractNewArrayNode.
-     *
-     * @param stamp the stamp of the newly created array
-     * @param length the node that produces the length for this allocation.
-     * @param fillContents determines whether the array elements should be initialized to zero/null.
-     */
-    public static AbstractNewArrayNode create(Stamp stamp, ValueNode length, boolean fillContents) {
-        return new AbstractNewArrayNode(stamp, length, fillContents);
-    }
-
-    protected AbstractNewArrayNode(Stamp stamp, ValueNode length, boolean fillContents) {
+    public AbstractNewArrayNode(Stamp stamp, ValueNode length, boolean fillContents) {
         super(stamp, fillContents);
         this.length = length;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewObjectNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AbstractNewObjectNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -40,17 +40,7 @@
 
     protected final boolean fillContents;
 
-    /**
-     * Constructs a new AbstractNewObjectNode.
-     *
-     * @param stamp the stamp of the newly created object
-     * @param fillContents determines if the object's contents should be initialized to zero/null.
-     */
-    public static AbstractNewObjectNode create(Stamp stamp, boolean fillContents) {
-        return new AbstractNewObjectNode(stamp, fillContents);
-    }
-
-    protected AbstractNewObjectNode(Stamp stamp, boolean fillContents) {
+    public AbstractNewObjectNode(Stamp stamp, boolean fillContents) {
         super(stamp);
         this.fillContents = fillContents;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ArrayLengthNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ArrayLengthNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -46,11 +46,7 @@
         return array;
     }
 
-    public static ArrayLengthNode create(ValueNode array) {
-        return new ArrayLengthNode(array);
-    }
-
-    protected ArrayLengthNode(ValueNode array) {
+    public ArrayLengthNode(ValueNode array) {
         super(StampFactory.positiveInt());
         this.array = array;
     }
@@ -77,7 +73,7 @@
         }
         if (originalValue instanceof ValueProxyNode) {
             ValueProxyNode proxy = (ValueProxyNode) originalValue;
-            return ValueProxyNode.create(reproxyValue(proxy.getOriginalNode(), value), proxy.proxyPoint());
+            return new ValueProxyNode(reproxyValue(proxy.getOriginalNode(), value), proxy.proxyPoint());
         } else if (originalValue instanceof ValueProxy) {
             ValueProxy proxy = (ValueProxy) originalValue;
             return reproxyValue(proxy.getOriginalNode(), value);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AtomicReadAndAddNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AtomicReadAndAddNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -44,11 +44,7 @@
 
     protected final LocationIdentity locationIdentity;
 
-    public static AtomicReadAndAddNode create(ValueNode object, ValueNode offset, ValueNode delta, LocationIdentity locationIdentity) {
-        return new AtomicReadAndAddNode(object, offset, delta, locationIdentity);
-    }
-
-    protected AtomicReadAndAddNode(ValueNode object, ValueNode offset, ValueNode delta, LocationIdentity locationIdentity) {
+    public AtomicReadAndAddNode(ValueNode object, ValueNode offset, ValueNode delta, LocationIdentity locationIdentity) {
         super(StampFactory.forKind(delta.getKind()));
         this.object = object;
         this.offset = offset;
@@ -73,7 +69,7 @@
     }
 
     public void generate(NodeLIRBuilderTool gen) {
-        LocationNode location = IndexedLocationNode.create(getLocationIdentity(), 0, offset, graph(), 1);
+        LocationNode location = graph().unique(new IndexedLocationNode(getLocationIdentity(), 0, offset, 1));
         Value address = location.generateAddress(gen, gen.getLIRGeneratorTool(), gen.operand(object()));
         Value result = gen.getLIRGeneratorTool().emitAtomicReadAndAdd(address, gen.operand(delta));
         gen.setResult(this, result);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AtomicReadAndWriteNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/AtomicReadAndWriteNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -46,11 +46,7 @@
     protected final Kind valueKind;
     protected final LocationIdentity locationIdentity;
 
-    public static AtomicReadAndWriteNode create(ValueNode object, ValueNode offset, ValueNode newValue, Kind valueKind, LocationIdentity locationIdentity) {
-        return new AtomicReadAndWriteNode(object, offset, newValue, valueKind, locationIdentity);
-    }
-
-    protected AtomicReadAndWriteNode(ValueNode object, ValueNode offset, ValueNode newValue, Kind valueKind, LocationIdentity locationIdentity) {
+    public AtomicReadAndWriteNode(ValueNode object, ValueNode offset, ValueNode newValue, Kind valueKind, LocationIdentity locationIdentity) {
         super(StampFactory.forKind(newValue.getKind()));
         this.object = object;
         this.offset = offset;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastDynamicNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastDynamicNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -45,15 +45,7 @@
      */
     protected final boolean forStoreCheck;
 
-    /**
-     * @param hub the type being cast to
-     * @param object the object being cast
-     */
-    public static CheckCastDynamicNode create(ValueNode hub, ValueNode object, boolean forStoreCheck) {
-        return new CheckCastDynamicNode(hub, object, forStoreCheck);
-    }
-
-    protected CheckCastDynamicNode(ValueNode hub, ValueNode object, boolean forStoreCheck) {
+    public CheckCastDynamicNode(ValueNode hub, ValueNode object, boolean forStoreCheck) {
         super(object.stamp());
         this.hub = hub;
         this.object = object;
@@ -101,7 +93,7 @@
         if (forHub.isConstant()) {
             ResolvedJavaType t = tool.getConstantReflection().asJavaType(forHub.asConstant());
             if (t != null) {
-                return CheckCastNode.create(t, forObject, null, forStoreCheck);
+                return new CheckCastNode(t, forObject, null, forStoreCheck);
             }
         }
         return this;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -53,17 +53,7 @@
      */
     protected final boolean forStoreCheck;
 
-    /**
-     * Creates a new CheckCast instruction.
-     *
-     * @param type the type being cast to
-     * @param object the instruction producing the object
-     */
-    public static CheckCastNode create(ResolvedJavaType type, ValueNode object, JavaTypeProfile profile, boolean forStoreCheck) {
-        return new CheckCastNode(type, object, profile, forStoreCheck);
-    }
-
-    protected CheckCastNode(ResolvedJavaType type, ValueNode object, JavaTypeProfile profile, boolean forStoreCheck) {
+    public CheckCastNode(ResolvedJavaType type, ValueNode object, JavaTypeProfile profile, boolean forStoreCheck) {
         super(StampFactory.declaredTrusted(type));
         assert type != null;
         this.type = type;
@@ -115,12 +105,12 @@
             condition = LogicConstantNode.contradiction(graph());
             newStamp = StampFactory.declaredTrusted(type);
         } else if (StampTool.isPointerNonNull(object)) {
-            condition = graph().addWithoutUnique(InstanceOfNode.create(type, object, profile));
+            condition = graph().addWithoutUnique(new InstanceOfNode(type, object, profile));
         } else {
             if (profile != null && profile.getNullSeen() == TriState.FALSE) {
-                FixedGuardNode nullCheck = graph().add(FixedGuardNode.create(graph().unique(IsNullNode.create(object)), UnreachedCode, InvalidateReprofile, true));
-                PiNode nullGuarded = graph().unique(PiNode.create(object, object().stamp().join(StampFactory.objectNonNull()), nullCheck));
-                InstanceOfNode typeTest = graph().addWithoutUnique(InstanceOfNode.create(type, nullGuarded, profile));
+                FixedGuardNode nullCheck = graph().add(new FixedGuardNode(graph().unique(new IsNullNode(object)), UnreachedCode, InvalidateReprofile, true));
+                PiNode nullGuarded = graph().unique(new PiNode(object, object().stamp().join(StampFactory.objectNonNull()), nullCheck));
+                InstanceOfNode typeTest = graph().addWithoutUnique(new InstanceOfNode(type, nullGuarded, profile));
                 graph().addBeforeFixed(this, nullCheck);
                 condition = typeTest;
                 /*
@@ -134,11 +124,11 @@
             } else {
                 // TODO (ds) replace with probability of null-seen when available
                 double shortCircuitProbability = NOT_FREQUENT_PROBABILITY;
-                InstanceOfNode typeTest = graph().addWithoutUnique(InstanceOfNode.create(type, object, profile));
-                condition = LogicNode.or(graph().unique(IsNullNode.create(object)), typeTest, shortCircuitProbability);
+                InstanceOfNode typeTest = graph().addWithoutUnique(new InstanceOfNode(type, object, profile));
+                condition = LogicNode.or(graph().unique(new IsNullNode(object)), typeTest, shortCircuitProbability);
             }
         }
-        GuardingPiNode checkedObject = graph().add(GuardingPiNode.create(theValue, condition, false, forStoreCheck ? ArrayStoreException : ClassCastException, InvalidateReprofile, newStamp));
+        GuardingPiNode checkedObject = graph().add(new GuardingPiNode(theValue, condition, false, forStoreCheck ? ArrayStoreException : ClassCastException, InvalidateReprofile, newStamp));
         graph().replaceFixedWithFixed(this, checkedObject);
         checkedObject.lower(tool);
     }
@@ -170,7 +160,7 @@
             if (exactType != null && !exactType.equals(type)) {
                 // Propagate more precise type information to usages of the checkcast.
                 tool.assumptions().recordConcreteSubtype(type, exactType);
-                return CheckCastNode.create(exactType, object, profile, forStoreCheck);
+                return new CheckCastNode(exactType, object, profile, forStoreCheck);
             }
         }
 
@@ -185,7 +175,7 @@
             CheckCastNode ccn = (CheckCastNode) predecessor();
             if (ccn != null && ccn.type != null && ccn == object && ccn.forStoreCheck == forStoreCheck && ccn.type.isAssignableFrom(type)) {
                 StructuredGraph graph = ccn.graph();
-                CheckCastNode newccn = graph.add(CheckCastNode.create(type, ccn.object, ccn.profile, ccn.forStoreCheck));
+                CheckCastNode newccn = graph.add(new CheckCastNode(type, ccn.object, ccn.profile, ccn.forStoreCheck));
                 graph.replaceFixedWithFixed(ccn, newccn);
                 replaceAtUsages(newccn);
                 graph.removeFixed(this);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CompareAndSwapNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -46,11 +46,7 @@
     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 new CompareAndSwapNode(object, offset, expected, newValue, valueKind, locationIdentity);
-    }
-
-    protected CompareAndSwapNode(ValueNode object, ValueNode offset, ValueNode expected, ValueNode newValue, Kind valueKind, LocationIdentity locationIdentity) {
+    public CompareAndSwapNode(ValueNode object, ValueNode offset, ValueNode expected, ValueNode newValue, Kind valueKind, LocationIdentity locationIdentity) {
         super(StampFactory.forKind(Kind.Boolean.getStackKind()));
         assert expected.stamp().isCompatible(newValue.stamp());
         this.object = object;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewArrayNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -48,19 +48,11 @@
      */
     protected final Kind knownElementKind;
 
-    public static DynamicNewArrayNode create(ValueNode elementType, ValueNode length) {
-        return new DynamicNewArrayNode(elementType, length);
-    }
-
-    protected DynamicNewArrayNode(ValueNode elementType, ValueNode length) {
+    public DynamicNewArrayNode(ValueNode elementType, ValueNode length) {
         this(elementType, length, true, null);
     }
 
-    public static DynamicNewArrayNode create(ValueNode elementType, ValueNode length, boolean fillContents, Kind knownElementKind) {
-        return new DynamicNewArrayNode(elementType, length, fillContents, knownElementKind);
-    }
-
-    protected DynamicNewArrayNode(ValueNode elementType, ValueNode length, boolean fillContents, Kind knownElementKind) {
+    public DynamicNewArrayNode(ValueNode elementType, ValueNode length, boolean fillContents, Kind knownElementKind) {
         super(StampFactory.objectNonNull(), length, fillContents);
         this.elementType = elementType;
         this.knownElementKind = knownElementKind;
@@ -76,7 +68,7 @@
 
     protected NewArrayNode forConstantType(ResolvedJavaType type) {
         ValueNode len = length();
-        NewArrayNode ret = graph().add(NewArrayNode.create(type, len.isAlive() ? len : graph().addOrUniqueWithInputs(len), fillContents()));
+        NewArrayNode ret = graph().add(new NewArrayNode(type, len.isAlive() ? len : graph().addOrUniqueWithInputs(len), fillContents()));
         if (stateBefore() != null) {
             ret.setStateBefore(stateBefore());
         }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewInstanceNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/DynamicNewInstanceNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -34,11 +34,7 @@
 
     @Input ValueNode clazz;
 
-    public static DynamicNewInstanceNode create(ValueNode clazz, boolean fillContents) {
-        return new DynamicNewInstanceNode(clazz, fillContents);
-    }
-
-    protected DynamicNewInstanceNode(ValueNode clazz, boolean fillContents) {
+    public DynamicNewInstanceNode(ValueNode clazz, boolean fillContents) {
         super(StampFactory.objectNonNull(), fillContents);
         this.clazz = clazz;
     }
@@ -48,7 +44,7 @@
         if (clazz.isConstant()) {
             ResolvedJavaType type = tool.getConstantReflection().asJavaType(clazz.asConstant());
             if (type != null && type.isInitialized() && !type.isArray() && !type.isInterface() && !type.isPrimitive()) {
-                return NewInstanceNode.create(type, fillContents());
+                return new NewInstanceNode(type, fillContents());
             }
         }
         return this;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ExceptionObjectNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ExceptionObjectNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -36,11 +36,7 @@
 @NodeInfo(allowedUsageTypes = {InputType.Memory})
 public class ExceptionObjectNode extends DispatchBeginNode implements Lowerable, MemoryCheckpoint.Single {
 
-    public static ExceptionObjectNode create(MetaAccessProvider metaAccess) {
-        return new ExceptionObjectNode(metaAccess);
-    }
-
-    protected ExceptionObjectNode(MetaAccessProvider metaAccess) {
+    public ExceptionObjectNode(MetaAccessProvider metaAccess) {
         super(StampFactory.declaredNonNull(metaAccess.lookupJavaType(Throwable.class)));
     }
 
@@ -57,8 +53,8 @@
              * deopts can float in between the begin node and the load exception node.
              */
             LocationIdentity locationsKilledByInvoke = ((InvokeWithExceptionNode) predecessor()).getLocationIdentity();
-            BeginNode entry = graph().add(KillingBeginNode.create(locationsKilledByInvoke));
-            LoadExceptionObjectNode loadException = graph().add(LoadExceptionObjectNode.create(stamp()));
+            BeginNode entry = graph().add(new KillingBeginNode(locationsKilledByInvoke));
+            LoadExceptionObjectNode loadException = graph().add(new LoadExceptionObjectNode(stamp()));
 
             loadException.setStateAfter(stateAfter());
             replaceAtUsages(InputType.Value, loadException);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfDynamicNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfDynamicNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -40,15 +40,7 @@
     @Input ValueNode object;
     @Input ValueNode mirror;
 
-    /**
-     * @param mirror the {@link Class} value representing the target target type of the test
-     * @param object the object being tested
-     */
-    public static InstanceOfDynamicNode create(ValueNode mirror, ValueNode object) {
-        return new InstanceOfDynamicNode(mirror, object);
-    }
-
-    protected InstanceOfDynamicNode(ValueNode mirror, ValueNode object) {
+    public InstanceOfDynamicNode(ValueNode mirror, ValueNode object) {
         this.mirror = mirror;
         this.object = object;
         assert mirror.getKind() == Kind.Object : mirror.getKind();
@@ -68,7 +60,7 @@
                 if (t.isPrimitive()) {
                     return LogicConstantNode.contradiction();
                 } else {
-                    return InstanceOfNode.create(t, forObject, null);
+                    return new InstanceOfNode(t, forObject, null);
                 }
             }
         }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/InstanceOfNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -39,17 +39,7 @@
     protected final ResolvedJavaType type;
     protected JavaTypeProfile profile;
 
-    /**
-     * Constructs a new InstanceOfNode.
-     *
-     * @param type the target type of the instanceof check
-     * @param object the object being tested by the instanceof
-     */
-    public static InstanceOfNode create(ResolvedJavaType type, ValueNode object, JavaTypeProfile profile) {
-        return new InstanceOfNode(type, object, profile);
-    }
-
-    protected InstanceOfNode(ResolvedJavaType type, ValueNode object, JavaTypeProfile profile) {
+    public InstanceOfNode(ResolvedJavaType type, ValueNode object, JavaTypeProfile profile) {
         super(object);
         this.type = type;
         this.profile = profile;
@@ -117,7 +107,7 @@
             if (!nonNull) {
                 // the instanceof matches if the object is non-null, so return true
                 // depending on the null-ness.
-                return LogicNegationNode.create(IsNullNode.create(forValue));
+                return new LogicNegationNode(new IsNullNode(forValue));
             }
         }
         return null;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadExceptionObjectNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadExceptionObjectNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -30,11 +30,7 @@
 @NodeInfo
 public class LoadExceptionObjectNode extends AbstractStateSplit implements Lowerable {
 
-    public static LoadExceptionObjectNode create(Stamp stamp) {
-        return new LoadExceptionObjectNode(stamp);
-    }
-
-    protected LoadExceptionObjectNode(Stamp stamp) {
+    public LoadExceptionObjectNode(Stamp stamp) {
         super(stamp);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadFieldNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -39,17 +39,7 @@
 @NodeInfo(nameTemplate = "LoadField#{p#field/s}")
 public class LoadFieldNode extends AccessFieldNode implements Canonicalizable.Unary<ValueNode>, VirtualizableRoot, UncheckedInterfaceProvider {
 
-    /**
-     * Creates a new LoadFieldNode instance.
-     *
-     * @param object the receiver object
-     * @param field the compiler interface field
-     */
-    public static LoadFieldNode create(ValueNode object, ResolvedJavaField field) {
-        return new LoadFieldNode(object, field);
-    }
-
-    protected LoadFieldNode(ValueNode object, ResolvedJavaField field) {
+    public LoadFieldNode(ValueNode object, ResolvedJavaField field) {
         super(createStamp(field), object, field);
     }
 
@@ -83,7 +73,7 @@
             }
         }
         if (!isStatic() && forObject.isNullConstant()) {
-            return DeoptimizeNode.create(DeoptimizationAction.None, DeoptimizationReason.NullCheckException);
+            return new DeoptimizeNode(DeoptimizationAction.None, DeoptimizationReason.NullCheckException);
         }
         return this;
     }
@@ -119,7 +109,7 @@
             for (int i = 0; i < phi.valueCount(); i++) {
                 constantNodes[i] = ConstantNode.forConstant(constants[i], metaAccess);
             }
-            return ValuePhiNode.create(stamp(), phi.merge(), constantNodes);
+            return new ValuePhiNode(stamp(), phi.merge(), constantNodes);
         }
         return null;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadIndexedNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoadIndexedNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -44,8 +44,8 @@
      * @param index the instruction producing the index
      * @param elementKind the element type
      */
-    public static LoadIndexedNode create(ValueNode array, ValueNode index, Kind elementKind) {
-        return new LoadIndexedNode(createStamp(array, elementKind), array, index, elementKind);
+    public LoadIndexedNode(ValueNode array, ValueNode index, Kind elementKind) {
+        this(createStamp(array, elementKind), array, index, elementKind);
     }
 
     protected LoadIndexedNode(Stamp stamp, ValueNode array, ValueNode index, Kind elementKind) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredAtomicReadAndWriteNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredAtomicReadAndWriteNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -40,11 +40,7 @@
     @Input ValueNode newValue;
     @OptionalInput(InputType.State) FrameState stateAfter;
 
-    public static LoweredAtomicReadAndWriteNode create(ValueNode object, LocationNode location, ValueNode newValue, BarrierType barrierType) {
-        return new LoweredAtomicReadAndWriteNode(object, location, newValue, barrierType);
-    }
-
-    protected LoweredAtomicReadAndWriteNode(ValueNode object, LocationNode location, ValueNode newValue, BarrierType barrierType) {
+    public LoweredAtomicReadAndWriteNode(ValueNode object, LocationNode location, ValueNode newValue, BarrierType barrierType) {
         super(object, location, newValue.stamp().unrestricted(), barrierType);
         this.newValue = newValue;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredCompareAndSwapNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/LoweredCompareAndSwapNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -61,11 +61,7 @@
         return newValue;
     }
 
-    public static LoweredCompareAndSwapNode create(ValueNode object, LocationNode location, ValueNode expectedValue, ValueNode newValue, BarrierType barrierType) {
-        return new LoweredCompareAndSwapNode(object, location, expectedValue, newValue, barrierType);
-    }
-
-    protected LoweredCompareAndSwapNode(ValueNode object, LocationNode location, ValueNode expectedValue, ValueNode newValue, BarrierType barrierType) {
+    public LoweredCompareAndSwapNode(ValueNode object, LocationNode location, ValueNode expectedValue, ValueNode newValue, BarrierType barrierType) {
         super(object, location, StampFactory.forKind(Kind.Boolean.getStackKind()), barrierType);
         assert expectedValue.getKind() == newValue.getKind();
         this.expectedValue = expectedValue;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,14 +35,7 @@
 public class MethodCallTargetNode extends CallTargetNode implements IterableNodeType, Simplifiable {
     protected final JavaType returnType;
 
-    /**
-     * @param arguments
-     */
-    public static MethodCallTargetNode create(InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] arguments, JavaType returnType) {
-        return new MethodCallTargetNode(invokeKind, targetMethod, arguments, returnType);
-    }
-
-    protected MethodCallTargetNode(InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] arguments, JavaType returnType) {
+    public MethodCallTargetNode(InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] arguments, JavaType returnType) {
         super(arguments, targetMethod, invokeKind);
         this.returnType = returnType;
     }
@@ -190,11 +183,11 @@
                  * an assumption but as we need an instanceof check anyway we can verify both
                  * properties by checking of the receiver is an instance of the single implementor.
                  */
-                LogicNode condition = graph().unique(InstanceOfNode.create(singleImplementor, receiver, getProfile()));
+                LogicNode condition = graph().unique(new InstanceOfNode(singleImplementor, receiver, getProfile()));
                 GuardNode guard = graph().unique(
-                                GuardNode.create(condition, BeginNode.prevBegin(invoke().asNode()), DeoptimizationReason.OptimizedTypeCheckViolated, DeoptimizationAction.InvalidateRecompile, false,
+                                new GuardNode(condition, BeginNode.prevBegin(invoke().asNode()), DeoptimizationReason.OptimizedTypeCheckViolated, DeoptimizationAction.InvalidateRecompile, false,
                                                 JavaConstant.NULL_POINTER));
-                PiNode piNode = graph().unique(PiNode.create(receiver, StampFactory.declaredNonNull(singleImplementor), guard));
+                PiNode piNode = graph().unique(new PiNode(receiver, StampFactory.declaredNonNull(singleImplementor), guard));
                 arguments().set(0, piNode);
                 setInvokeKind(InvokeKind.Virtual);
                 setTargetMethod(singleImplementorMethod);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorEnterNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorEnterNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,16 +35,7 @@
 @NodeInfo
 public class MonitorEnterNode extends AccessMonitorNode implements Virtualizable, Lowerable, IterableNodeType, MonitorEnter, MemoryCheckpoint.Single {
 
-    /**
-     * Creates a new MonitorEnterNode.
-     *
-     * @param object the instruction producing the object
-     */
-    public static MonitorEnterNode create(ValueNode object, MonitorIdNode monitorId) {
-        return new MonitorEnterNode(object, monitorId);
-    }
-
-    protected MonitorEnterNode(ValueNode object, MonitorIdNode monitorId) {
+    public MonitorEnterNode(ValueNode object, MonitorIdNode monitorId) {
         super(object, monitorId);
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorExitNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorExitNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -41,14 +41,7 @@
 
     @OptionalInput ValueNode escapedReturnValue;
 
-    /**
-     * Creates a new MonitorExitNode.
-     */
-    public static MonitorExitNode create(ValueNode object, MonitorIdNode monitorId, ValueNode escapedReturnValue) {
-        return new MonitorExitNode(object, monitorId, escapedReturnValue);
-    }
-
-    protected MonitorExitNode(ValueNode object, MonitorIdNode monitorId, ValueNode escapedReturnValue) {
+    public MonitorExitNode(ValueNode object, MonitorIdNode monitorId, ValueNode escapedReturnValue) {
         super(object, monitorId);
         this.escapedReturnValue = escapedReturnValue;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorIdNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MonitorIdNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
 
     protected int lockDepth;
 
-    public static MonitorIdNode create(int lockDepth) {
-        return new MonitorIdNode(lockDepth);
-    }
-
-    protected MonitorIdNode(int lockDepth) {
+    public MonitorIdNode(int lockDepth) {
         super(StampFactory.forVoid());
         this.lockDepth = lockDepth;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewArrayNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -40,19 +40,7 @@
 @NodeInfo
 public class NewArrayNode extends AbstractNewArrayNode implements VirtualizableAllocation {
 
-    /**
-     * Constructs a new NewArrayNode.
-     *
-     * @param elementType the the type of the elements of the newly created array (not the type of
-     *            the array itself).
-     * @param length the node that produces the length for this allocation.
-     * @param fillContents determines whether the array elements should be initialized to zero/null.
-     */
-    public static NewArrayNode create(ResolvedJavaType elementType, ValueNode length, boolean fillContents) {
-        return new NewArrayNode(elementType, length, fillContents);
-    }
-
-    protected NewArrayNode(ResolvedJavaType elementType, ValueNode length, boolean fillContents) {
+    public NewArrayNode(ResolvedJavaType elementType, ValueNode length, boolean fillContents) {
         super(StampFactory.exactNonNull(elementType.getArrayClass()), length, fillContents);
     }
 
@@ -90,7 +78,7 @@
     }
 
     protected VirtualArrayNode createVirtualArrayNode(int constantLength) {
-        return VirtualArrayNode.create(elementType(), constantLength);
+        return new VirtualArrayNode(elementType(), constantLength);
     }
 
     /* Factored out in a separate method so that subclasses can override it. */
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewInstanceNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -40,18 +40,7 @@
 
     protected final ResolvedJavaType instanceClass;
 
-    /**
-     * Constructs a NewInstanceNode.
-     *
-     * @param type the class being allocated
-     * @param fillContents determines whether the new object's fields should be initialized to
-     *            zero/null.
-     */
-    public static NewInstanceNode create(ResolvedJavaType type, boolean fillContents) {
-        return new NewInstanceNode(type, fillContents);
-    }
-
-    protected NewInstanceNode(ResolvedJavaType type, boolean fillContents) {
+    public NewInstanceNode(ResolvedJavaType type, boolean fillContents) {
         super(StampFactory.exactNonNull(type), fillContents);
         assert !type.isArray() && !type.isInterface() && !type.isPrimitive();
         this.instanceClass = type;
@@ -85,7 +74,7 @@
     }
 
     protected VirtualInstanceNode createVirtualInstanceNode(boolean hasIdentity) {
-        return VirtualInstanceNode.create(instanceClass(), hasIdentity);
+        return new VirtualInstanceNode(instanceClass(), hasIdentity);
     }
 
     /* Factored out in a separate method so that subclasses can override it. */
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewMultiArrayNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/NewMultiArrayNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -50,17 +50,7 @@
         return dimensions;
     }
 
-    /**
-     * Constructs a new NewMultiArrayNode.
-     *
-     * @param type the element type of the array
-     * @param dimensions the node which produce the dimensions for this array
-     */
-    public static NewMultiArrayNode create(ResolvedJavaType type, ValueNode[] dimensions) {
-        return new NewMultiArrayNode(type, dimensions);
-    }
-
-    protected NewMultiArrayNode(ResolvedJavaType type, ValueNode[] dimensions) {
+    public NewMultiArrayNode(ResolvedJavaType type, ValueNode[] dimensions) {
         super(StampFactory.exactNonNull(type));
         this.type = type;
         this.dimensions = new NodeInputList<>(this, dimensions);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/RegisterFinalizerNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -41,11 +41,7 @@
     @OptionalInput(InputType.State) FrameState deoptState;
     @Input ValueNode value;
 
-    public static RegisterFinalizerNode create(ValueNode value) {
-        return new RegisterFinalizerNode(value);
-    }
-
-    protected RegisterFinalizerNode(ValueNode value) {
+    public RegisterFinalizerNode(ValueNode value) {
         super(StampFactory.forVoid());
         this.value = value;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/SelfReplacingMethodCallTargetNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/SelfReplacingMethodCallTargetNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -44,12 +44,7 @@
     protected final JavaType replacementReturnType;
     @Input NodeInputList<ValueNode> replacementArguments;
 
-    public static SelfReplacingMethodCallTargetNode create(InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] arguments, JavaType returnType,
-                    ResolvedJavaMethod replacementTargetMethod, ValueNode[] replacementArguments, JavaType replacementReturnType) {
-        return new SelfReplacingMethodCallTargetNode(invokeKind, targetMethod, arguments, returnType, replacementTargetMethod, replacementArguments, replacementReturnType);
-    }
-
-    protected SelfReplacingMethodCallTargetNode(InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] arguments, JavaType returnType, ResolvedJavaMethod replacementTargetMethod,
+    public SelfReplacingMethodCallTargetNode(InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] arguments, JavaType returnType, ResolvedJavaMethod replacementTargetMethod,
                     ValueNode[] replacementArguments, JavaType replacementReturnType) {
         super(invokeKind, targetMethod, arguments, returnType);
         this.replacementTargetMethod = replacementTargetMethod;
@@ -73,7 +68,7 @@
     public void lower(LoweringTool tool) {
         InvokeKind replacementInvokeKind = replacementTargetMethod.isStatic() ? InvokeKind.Static : InvokeKind.Special;
         MethodCallTargetNode replacement = graph().add(
-                        MethodCallTargetNode.create(replacementInvokeKind, replacementTargetMethod, replacementArguments.toArray(new ValueNode[replacementArguments.size()]), replacementReturnType));
+                        new MethodCallTargetNode(replacementInvokeKind, replacementTargetMethod, replacementArguments.toArray(new ValueNode[replacementArguments.size()]), replacementReturnType));
 
         // Replace myself...
         this.replaceAndDelete(replacement);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreFieldNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -56,27 +56,12 @@
         return value;
     }
 
-    /**
-     * Creates a new StoreFieldNode.
-     *
-     * @param object the receiver object
-     * @param field the compiler interface field
-     * @param value the node representing the value to store to the field
-     */
-    public static StoreFieldNode create(ValueNode object, ResolvedJavaField field, ValueNode value) {
-        return new StoreFieldNode(object, field, value);
-    }
-
-    protected StoreFieldNode(ValueNode object, ResolvedJavaField field, ValueNode value) {
+    public StoreFieldNode(ValueNode object, ResolvedJavaField field, ValueNode value) {
         super(StampFactory.forVoid(), object, field);
         this.value = value;
     }
 
-    public static StoreFieldNode create(ValueNode object, ResolvedJavaField field, ValueNode value, FrameState stateAfter) {
-        return new StoreFieldNode(object, field, value, stateAfter);
-    }
-
-    protected StoreFieldNode(ValueNode object, ResolvedJavaField field, ValueNode value, FrameState stateAfter) {
+    public StoreFieldNode(ValueNode object, ResolvedJavaField field, ValueNode value, FrameState stateAfter) {
         super(StampFactory.forVoid(), object, field);
         this.value = value;
         this.stateAfter = stateAfter;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -56,19 +56,7 @@
         return value;
     }
 
-    /**
-     * Creates a new StoreIndexedNode.
-     *
-     * @param array the node producing the array
-     * @param index the node producing the index
-     * @param elementKind the element type
-     * @param value the value to store into the array
-     */
-    public static StoreIndexedNode create(ValueNode array, ValueNode index, Kind elementKind, ValueNode value) {
-        return new StoreIndexedNode(array, index, elementKind, value);
-    }
-
-    protected StoreIndexedNode(ValueNode array, ValueNode index, Kind elementKind, ValueNode value) {
+    public StoreIndexedNode(ValueNode array, ValueNode index, Kind elementKind, ValueNode value) {
         super(StampFactory.forVoid(), array, index, elementKind);
         this.value = value;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeSwitchNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/TypeSwitchNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -42,21 +42,7 @@
 
     protected final ResolvedJavaType[] keys;
 
-    /**
-     * Constructs a type switch instruction. The keyProbabilities array contain key.length + 1
-     * entries. The last entry in every array describes the default case.
-     *
-     * @param value the instruction producing the value being switched on, the object hub
-     * @param successors the list of successors
-     * @param keys the list of types
-     * @param keyProbabilities the probabilities of the keys
-     * @param keySuccessors the successor index for each key
-     */
-    public static TypeSwitchNode create(ValueNode value, BeginNode[] successors, ResolvedJavaType[] keys, double[] keyProbabilities, int[] keySuccessors) {
-        return new TypeSwitchNode(value, successors, keys, keyProbabilities, keySuccessors);
-    }
-
-    protected TypeSwitchNode(ValueNode value, BeginNode[] successors, ResolvedJavaType[] keys, double[] keyProbabilities, int[] keySuccessors) {
+    public TypeSwitchNode(ValueNode value, BeginNode[] successors, ResolvedJavaType[] keys, double[] keyProbabilities, int[] keySuccessors) {
         super(value, successors, keySuccessors, keyProbabilities);
         assert successors.length <= keys.length + 1;
         assert keySuccessors.length == keyProbabilities.length;
@@ -205,7 +191,7 @@
                     }
 
                     BeginNode[] successorsArray = newSuccessors.toArray(new BeginNode[newSuccessors.size()]);
-                    TypeSwitchNode newSwitch = graph().add(TypeSwitchNode.create(value(), successorsArray, newKeys, newKeyProbabilities, newKeySuccessors));
+                    TypeSwitchNode newSwitch = graph().add(new TypeSwitchNode(value(), successorsArray, newKeys, newKeyProbabilities, newKeySuccessors));
                     ((FixedWithNextNode) predecessor()).setNext(newSwitch);
                     GraphUtil.killWithUnusedFloatingInputs(this);
                 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/AllocatedObjectNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/AllocatedObjectNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
     @Input VirtualObjectNode virtualObject;
     @Input(InputType.Extension) CommitAllocationNode commit;
 
-    public static AllocatedObjectNode create(VirtualObjectNode virtualObject) {
-        return new AllocatedObjectNode(virtualObject);
-    }
-
-    protected AllocatedObjectNode(VirtualObjectNode virtualObject) {
+    public AllocatedObjectNode(VirtualObjectNode virtualObject) {
         super(StampFactory.exactNonNull(virtualObject.type()));
         this.virtualObject = virtualObject;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/CommitAllocationNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/CommitAllocationNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -40,11 +40,7 @@
     @Input(InputType.Association) NodeInputList<MonitorIdNode> locks = new NodeInputList<>(this);
     protected ArrayList<Integer> lockIndexes = new ArrayList<>(Arrays.asList(0));
 
-    public static CommitAllocationNode create() {
-        return new CommitAllocationNode();
-    }
-
-    protected CommitAllocationNode() {
+    public CommitAllocationNode() {
         super(StampFactory.forVoid());
     }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualArrayNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualArrayNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,11 +35,7 @@
     protected final ResolvedJavaType componentType;
     protected final int length;
 
-    public static VirtualArrayNode create(ResolvedJavaType componentType, int length) {
-        return new VirtualArrayNode(componentType, length);
-    }
-
-    protected VirtualArrayNode(ResolvedJavaType componentType, int length) {
+    public VirtualArrayNode(ResolvedJavaType componentType, int length) {
         super(componentType.getArrayClass(), true);
         this.componentType = componentType;
         this.length = length;
@@ -141,12 +137,12 @@
 
     @Override
     public VirtualArrayNode duplicate() {
-        return VirtualArrayNode.create(componentType, length);
+        return new VirtualArrayNode(componentType, length);
     }
 
     @Override
     public ValueNode getMaterializedRepresentation(FixedNode fixed, ValueNode[] entries, LockState locks) {
-        return AllocatedObjectNode.create(this);
+        return new AllocatedObjectNode(this);
     }
 
     public ValueNode length() {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualBoxingNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualBoxingNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,11 +32,7 @@
 
     protected final Kind boxingKind;
 
-    public static VirtualBoxingNode create(ResolvedJavaType type, Kind boxingKind) {
-        return new VirtualBoxingNode(type, boxingKind);
-    }
-
-    protected VirtualBoxingNode(ResolvedJavaType type, Kind boxingKind) {
+    public VirtualBoxingNode(ResolvedJavaType type, Kind boxingKind) {
         super(type, false);
         this.boxingKind = boxingKind;
     }
@@ -47,13 +43,13 @@
 
     @Override
     public VirtualBoxingNode duplicate() {
-        return VirtualBoxingNode.create(type(), boxingKind);
+        return new VirtualBoxingNode(type(), boxingKind);
     }
 
     @Override
     public ValueNode getMaterializedRepresentation(FixedNode fixed, ValueNode[] entries, LockState locks) {
         assert entries.length == 1;
         assert locks == null;
-        return BoxNode.create(entries[0], type(), boxingKind);
+        return new BoxNode(entries[0], type(), boxingKind);
     }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualInstanceNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/VirtualInstanceNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,19 +32,11 @@
     protected final ResolvedJavaType type;
     protected final ResolvedJavaField[] fields;
 
-    public static VirtualInstanceNode create(ResolvedJavaType type, boolean hasIdentity) {
-        return new VirtualInstanceNode(type, hasIdentity);
-    }
-
-    protected VirtualInstanceNode(ResolvedJavaType type, boolean hasIdentity) {
+    public VirtualInstanceNode(ResolvedJavaType type, boolean hasIdentity) {
         this(type, type.getInstanceFields(true), hasIdentity);
     }
 
-    public static VirtualInstanceNode create(ResolvedJavaType type, ResolvedJavaField[] fields, boolean hasIdentity) {
-        return new VirtualInstanceNode(type, fields, hasIdentity);
-    }
-
-    protected VirtualInstanceNode(ResolvedJavaType type, ResolvedJavaField[] fields, boolean hasIdentity) {
+    public VirtualInstanceNode(ResolvedJavaType type, ResolvedJavaField[] fields, boolean hasIdentity) {
         super(type, hasIdentity);
         this.type = type;
         this.fields = fields;
@@ -105,11 +97,11 @@
 
     @Override
     public VirtualInstanceNode duplicate() {
-        return VirtualInstanceNode.create(type, fields, super.hasIdentity());
+        return new VirtualInstanceNode(type, fields, super.hasIdentity());
     }
 
     @Override
     public ValueNode getMaterializedRepresentation(FixedNode fixed, ValueNode[] entries, LockState locks) {
-        return AllocatedObjectNode.create(this);
+        return new AllocatedObjectNode(this);
     }
 }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java	Mon Jan 12 20:39:04 2015 +0100
@@ -699,9 +699,9 @@
                     PiNode piNode;
                     if (isNull) {
                         ConstantNode nullObject = ConstantNode.defaultForKind(Kind.Object, graph);
-                        piNode = graph.unique(PiNode.create(nullObject, nullObject.stamp(), replacementAnchor.asNode()));
+                        piNode = graph.unique(new PiNode(nullObject, nullObject.stamp(), replacementAnchor.asNode()));
                     } else {
-                        piNode = graph.unique(PiNode.create(object, StampFactory.declaredTrusted(type, nonNull), replacementAnchor.asNode()));
+                        piNode = graph.unique(new PiNode(object, StampFactory.declaredTrusted(type, nonNull), replacementAnchor.asNode()));
                     }
                     checkCast.replaceAtUsages(piNode);
                     graph.removeFixed(checkCast);
@@ -753,7 +753,7 @@
 
                 if (replacement != null) {
                     if (replacementAnchor != null && !(replacementAnchor instanceof BeginNode)) {
-                        ValueAnchorNode anchor = graph.add(ValueAnchorNode.create(replacementAnchor.asNode()));
+                        ValueAnchorNode anchor = graph.add(new ValueAnchorNode(replacementAnchor.asNode()));
                         graph.addBeforeFixed(ifNode, anchor);
                     }
                     for (Node n : survivingSuccessor.usages().snapshot()) {
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConvertDeoptimizeToGuardPhase.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConvertDeoptimizeToGuardPhase.java	Mon Jan 12 20:39:04 2015 +0100
@@ -124,7 +124,7 @@
             IfNode ifNode = (IfNode) deoptBegin.predecessor();
             BeginNode otherBegin = ifNode.trueSuccessor();
             LogicNode conditionNode = ifNode.condition();
-            FixedGuardNode guard = graph.add(FixedGuardNode.create(conditionNode, deoptReason, deoptAction, deoptBegin == ifNode.trueSuccessor()));
+            FixedGuardNode guard = graph.add(new FixedGuardNode(conditionNode, deoptReason, deoptAction, deoptBegin == ifNode.trueSuccessor()));
             FixedWithNextNode pred = (FixedWithNextNode) ifNode.predecessor();
             BeginNode survivingSuccessor;
             if (deoptBegin == ifNode.trueSuccessor()) {
@@ -162,7 +162,7 @@
         FixedNode next = deoptPred.next();
 
         if (!(next instanceof DeoptimizeNode)) {
-            DeoptimizeNode newDeoptNode = graph.add(DeoptimizeNode.create(deoptAction, deoptReason));
+            DeoptimizeNode newDeoptNode = graph.add(new DeoptimizeNode(deoptAction, deoptReason));
             deoptPred.setNext(newDeoptNode);
             assert deoptPred == newDeoptNode.predecessor();
             GraphUtil.killCFG(next);
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeoptimizationGroupingPhase.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeoptimizationGroupingPhase.java	Mon Jan 12 20:39:04 2015 +0100
@@ -54,12 +54,12 @@
                     }
                     MergeNode merge;
                     if (target instanceof AbstractDeoptimizeNode) {
-                        merge = graph.add(MergeNode.create());
-                        EndNode firstEnd = graph.add(EndNode.create());
+                        merge = graph.add(new MergeNode());
+                        EndNode firstEnd = graph.add(new EndNode());
                         ValueNode actionAndReason = ((AbstractDeoptimizeNode) target).getActionAndReason(context.getMetaAccess());
                         ValueNode speculation = ((AbstractDeoptimizeNode) target).getSpeculation(context.getMetaAccess());
-                        reasonActionPhi = graph.addWithoutUnique(ValuePhiNode.create(StampFactory.forKind(actionAndReason.getKind()), merge));
-                        speculationPhi = graph.addWithoutUnique(ValuePhiNode.create(StampFactory.forKind(speculation.getKind()), merge));
+                        reasonActionPhi = graph.addWithoutUnique(new ValuePhiNode(StampFactory.forKind(actionAndReason.getKind()), merge));
+                        speculationPhi = graph.addWithoutUnique(new ValuePhiNode(StampFactory.forKind(speculation.getKind()), merge));
                         merge.addForwardEnd(firstEnd);
                         reasonActionPhi.addInput(actionAndReason);
                         speculationPhi.addInput(speculation);
@@ -67,14 +67,14 @@
 
                         exitLoops((AbstractDeoptimizeNode) target, firstEnd, cfg);
 
-                        merge.setNext(graph.add(DynamicDeoptimizeNode.create(reasonActionPhi, speculationPhi)));
+                        merge.setNext(graph.add(new DynamicDeoptimizeNode(reasonActionPhi, speculationPhi)));
                         obsoletes = new LinkedList<>();
                         obsoletes.add((AbstractDeoptimizeNode) target);
                         target = merge;
                     } else {
                         merge = (MergeNode) target;
                     }
-                    EndNode newEnd = graph.add(EndNode.create());
+                    EndNode newEnd = graph.add(new EndNode());
                     merge.addForwardEnd(newEnd);
                     reasonActionPhi.addInput(deopt.getActionAndReason(context.getMetaAccess()));
                     speculationPhi.addInput(deopt.getSpeculation(context.getMetaAccess()));
@@ -96,7 +96,7 @@
         Block block = cfg.blockFor(deopt);
         Loop<Block> loop = block.getLoop();
         while (loop != null) {
-            end.graph().addBeforeFixed(end, end.graph().add(LoopExitNode.create((LoopBeginNode) loop.getHeader().getBeginNode())));
+            end.graph().addBeforeFixed(end, end.graph().add(new LoopExitNode((LoopBeginNode) loop.getHeader().getBeginNode())));
             loop = loop.getParent();
         }
     }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ExpandLogicPhase.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ExpandLogicPhase.java	Mon Jan 12 20:39:04 2015 +0100
@@ -72,16 +72,16 @@
         }
         ifNode.clearSuccessors();
         Graph graph = ifNode.graph();
-        MergeNode trueTargetMerge = graph.add(MergeNode.create());
+        MergeNode trueTargetMerge = graph.add(new MergeNode());
         trueTargetMerge.setNext(trueTarget);
-        EndNode firstTrueEnd = graph.add(EndNode.create());
-        EndNode secondTrueEnd = graph.add(EndNode.create());
+        EndNode firstTrueEnd = graph.add(new EndNode());
+        EndNode secondTrueEnd = graph.add(new EndNode());
         trueTargetMerge.addForwardEnd(firstTrueEnd);
         trueTargetMerge.addForwardEnd(secondTrueEnd);
         BeginNode firstTrueTarget = BeginNode.begin(firstTrueEnd);
         BeginNode secondTrueTarget = BeginNode.begin(secondTrueEnd);
-        BeginNode secondIf = BeginNode.begin(graph.add(IfNode.create(y, yNegated ? falseTarget : secondTrueTarget, yNegated ? secondTrueTarget : falseTarget, secondIfProbability)));
-        IfNode firstIf = graph.add(IfNode.create(x, xNegated ? secondIf : firstTrueTarget, xNegated ? firstTrueTarget : secondIf, firstIfProbability));
+        BeginNode secondIf = BeginNode.begin(graph.add(new IfNode(y, yNegated ? falseTarget : secondTrueTarget, yNegated ? secondTrueTarget : falseTarget, secondIfProbability)));
+        IfNode firstIf = graph.add(new IfNode(x, xNegated ? secondIf : firstTrueTarget, xNegated ? firstTrueTarget : secondIf, firstIfProbability));
         ifNode.replaceAtPredecessor(firstIf);
         ifNode.safeDelete();
     }
@@ -90,8 +90,8 @@
         ValueNode trueTarget = conditional.trueValue();
         ValueNode falseTarget = conditional.falseValue();
         Graph graph = conditional.graph();
-        ConditionalNode secondConditional = graph.unique(ConditionalNode.create(y, yNegated ? falseTarget : trueTarget, yNegated ? trueTarget : falseTarget));
-        ConditionalNode firstConditional = graph.unique(ConditionalNode.create(x, xNegated ? secondConditional : trueTarget, xNegated ? trueTarget : secondConditional));
+        ConditionalNode secondConditional = graph.unique(new ConditionalNode(y, yNegated ? falseTarget : trueTarget, yNegated ? trueTarget : falseTarget));
+        ConditionalNode firstConditional = graph.unique(new ConditionalNode(x, xNegated ? secondConditional : trueTarget, xNegated ? trueTarget : secondConditional));
         conditional.replaceAndDelete(firstConditional);
     }
 }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/FloatingReadPhase.java	Mon Jan 12 20:39:04 2015 +0100
@@ -186,7 +186,7 @@
                     } else {
                         MemoryPhiNode phi = null;
                         if (existingPhis == null || (phi = existingPhis.remove(key)) == null) {
-                            phi = merge.graph().addWithoutUnique(MemoryPhiNode.create(merge, key));
+                            phi = merge.graph().addWithoutUnique(new MemoryPhiNode(merge, key));
                         }
                         for (int j = 0; j < mergedStatesCount; j++) {
                             phi.addInput(ValueNodeUtil.asNode(merged));
@@ -298,7 +298,7 @@
             assert MemoryCheckpoint.TypeAssertion.correctType(node) : node;
 
             if (createMemoryMapNodes && node instanceof ReturnNode) {
-                ((ReturnNode) node).setMemoryMap(node.graph().unique(MemoryMapNode.create(state.lastMemorySnapshot)));
+                ((ReturnNode) node).setMemoryMap(node.graph().unique(new MemoryMapNode(state.lastMemorySnapshot)));
             }
             return state;
         }
@@ -338,7 +338,7 @@
                 ValueAnchorNode anchor = null;
                 GuardingNode guard = accessNode.getGuard();
                 if (guard != null) {
-                    anchor = graph.add(ValueAnchorNode.create(guard.asNode()));
+                    anchor = graph.add(new ValueAnchorNode(guard.asNode()));
                     graph.addAfterFixed(accessNode, anchor);
                 }
                 graph.replaceFixedWithFloating(accessNode, floatingNode);
@@ -392,7 +392,7 @@
 
             for (LocationIdentity location : modifiedLocations) {
                 if (!updateExistingPhis || !phis.containsKey(location)) {
-                    MemoryPhiNode phi = loop.graph().addWithoutUnique(MemoryPhiNode.create(loop, location));
+                    MemoryPhiNode phi = loop.graph().addWithoutUnique(new MemoryPhiNode(loop, location));
                     phi.addInput(ValueNodeUtil.asNode(initialState.getLastLocationAccess(location)));
                     phis.put(location, phi);
                 }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java	Mon Jan 12 20:39:04 2015 +0100
@@ -161,9 +161,9 @@
 
         private void lowerToIf(GuardNode guard) {
             StructuredGraph graph = guard.graph();
-            BeginNode fastPath = graph.add(BeginNode.create());
+            BeginNode fastPath = graph.add(new BeginNode());
             @SuppressWarnings("deprecation")
-            DeoptimizeNode deopt = graph.add(DeoptimizeNode.create(guard.action(), guard.reason(), useGuardIdAsDebugId ? guard.getId() : 0, guard.getSpeculation(), null));
+            DeoptimizeNode deopt = graph.add(new DeoptimizeNode(guard.action(), guard.reason(), useGuardIdAsDebugId ? guard.getId() : 0, guard.getSpeculation(), null));
             BeginNode deoptBranch = BeginNode.begin(deopt);
             BeginNode trueSuccessor;
             BeginNode falseSuccessor;
@@ -175,7 +175,7 @@
                 trueSuccessor = fastPath;
                 falseSuccessor = deoptBranch;
             }
-            IfNode ifNode = graph.add(IfNode.create(guard.condition(), trueSuccessor, falseSuccessor, trueSuccessor == fastPath ? 1 : 0));
+            IfNode ifNode = graph.add(new IfNode(guard.condition(), trueSuccessor, falseSuccessor, trueSuccessor == fastPath ? 1 : 0));
             guard.replaceAndDelete(fastPath);
             insert(ifNode, fastPath);
         }
@@ -184,7 +184,7 @@
             Loop<Block> loop = block.getLoop();
             StructuredGraph graph = deopt.graph();
             while (loop != null) {
-                LoopExitNode exit = graph.add(LoopExitNode.create((LoopBeginNode) loop.getHeader().getBeginNode()));
+                LoopExitNode exit = graph.add(new LoopExitNode((LoopBeginNode) loop.getHeader().getBeginNode()));
                 graph.addBeforeFixed(deopt, exit);
                 loop = loop.getParent();
             }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoopSafepointInsertionPhase.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoopSafepointInsertionPhase.java	Mon Jan 12 20:39:04 2015 +0100
@@ -37,7 +37,7 @@
         if (GenLoopSafepoints.getValue()) {
             for (LoopEndNode loopEndNode : graph.getNodes(LoopEndNode.class)) {
                 if (loopEndNode.canSafepoint()) {
-                    SafepointNode safepointNode = graph.add(SafepointNode.create());
+                    SafepointNode safepointNode = graph.add(new SafepointNode());
                     graph.addBeforeFixed(loopEndNode, safepointNode);
                 }
             }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java	Mon Jan 12 20:39:04 2015 +0100
@@ -51,11 +51,7 @@
     static class DummyGuardHandle extends ValueNode implements GuardedNode {
         @Input(InputType.Guard) GuardingNode guard;
 
-        public static DummyGuardHandle create(GuardingNode guard) {
-            return new DummyGuardHandle(guard);
-        }
-
-        protected DummyGuardHandle(GuardingNode guard) {
+        public DummyGuardHandle(GuardingNode guard) {
             super(StampFactory.forVoid());
             this.guard = guard;
         }
@@ -146,15 +142,15 @@
             }
             StructuredGraph graph = before.graph();
             if (condition.graph().getGuardsStage().ordinal() >= StructuredGraph.GuardsStage.FIXED_DEOPTS.ordinal()) {
-                FixedGuardNode fixedGuard = graph.add(FixedGuardNode.create(condition, deoptReason, action, negated));
+                FixedGuardNode fixedGuard = graph.add(new FixedGuardNode(condition, deoptReason, action, negated));
                 graph.addBeforeFixed(before, fixedGuard);
-                DummyGuardHandle handle = graph.add(DummyGuardHandle.create(fixedGuard));
+                DummyGuardHandle handle = graph.add(new DummyGuardHandle(fixedGuard));
                 fixedGuard.lower(this);
                 GuardingNode result = handle.getGuard();
                 handle.safeDelete();
                 return result;
             } else {
-                GuardNode newGuard = graph.unique(GuardNode.create(condition, guardAnchor, deoptReason, action, negated, JavaConstant.NULL_POINTER));
+                GuardNode newGuard = graph.unique(new GuardNode(condition, guardAnchor, deoptReason, action, negated, JavaConstant.NULL_POINTER));
                 if (OptEliminateGuards.getValue()) {
                     activeGuards.markAndGrow(newGuard);
                 }
@@ -347,7 +343,7 @@
                         // FixedWithNextNode is followed by some kind of BeginNode.
                         // For example the when a FixedGuard followed by a loop exit is lowered to a
                         // control-split + deopt.
-                        BeginNode begin = node.graph().add(BeginNode.create());
+                        BeginNode begin = node.graph().add(new BeginNode());
                         nextLastFixed.replaceFirstSuccessor(nextNode, begin);
                         begin.setNext(nextNode);
                         nextLastFixed = begin;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/OptimizeGuardAnchorsPhase.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/OptimizeGuardAnchorsPhase.java	Mon Jan 12 20:39:04 2015 +0100
@@ -110,7 +110,7 @@
 
             if (otherGuards.size() == successorCount - 1) {
                 BeginNode anchor = computeOptimalAnchor(cfg.get(), BeginNode.prevBegin(controlSplit));
-                GuardNode newGuard = controlSplit.graph().unique(GuardNode.create(guard.condition(), anchor, guard.reason(), guard.action(), guard.isNegated(), guard.getSpeculation()));
+                GuardNode newGuard = controlSplit.graph().unique(new GuardNode(guard.condition(), anchor, guard.reason(), guard.action(), guard.isNegated(), guard.getSpeculation()));
                 for (GuardNode otherGuard : otherGuards) {
                     otherGuard.replaceAndDelete(newGuard);
                 }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/TailDuplicationPhase.java	Mon Jan 12 20:39:04 2015 +0100
@@ -62,13 +62,10 @@
 
     @NodeInfo(allowedUsageTypes = {InputType.Guard, InputType.Anchor})
     static class DummyAnchorNode extends FixedWithNextNode implements GuardingNode, AnchoringNode {
-        public static DummyAnchorNode create() {
-            return new DummyAnchorNode();
+        public DummyAnchorNode() {
+            super(StampFactory.forVoid());
         }
 
-        protected DummyAnchorNode() {
-            super(StampFactory.forVoid());
-        }
     }
 
     /**
@@ -341,7 +338,7 @@
          * @return The new {@link ValueAnchorNode} that was created.
          */
         private DummyAnchorNode addValueAnchor() {
-            DummyAnchorNode anchor = graph.add(DummyAnchorNode.create());
+            DummyAnchorNode anchor = graph.add(new DummyAnchorNode());
             graph.addAfterFixed(merge, anchor);
             merge.replaceAtUsages(InputType.Guard, anchor);
             merge.replaceAtUsages(InputType.Anchor, anchor);
@@ -451,8 +448,8 @@
          * @return The newly created end node.
          */
         private AbstractEndNode createNewMerge(FixedNode successor, FrameState stateAfterMerge) {
-            MergeNode newBottomMerge = graph.add(MergeNode.create());
-            AbstractEndNode newBottomEnd = graph.add(EndNode.create());
+            MergeNode newBottomMerge = graph.add(new MergeNode());
+            AbstractEndNode newBottomEnd = graph.add(new EndNode());
             newBottomMerge.addForwardEnd(newBottomEnd);
             newBottomMerge.setStateAfter(stateAfterMerge);
             ((FixedWithNextNode) successor.predecessor()).setNext(newBottomEnd);
@@ -526,7 +523,7 @@
                                     ValueNode node = (ValueNode) duplicated;
                                     PhiNode newPhi = bottomPhis.get(node);
                                     if (newPhi == null) {
-                                        newPhi = graph.addWithoutUnique(ValuePhiNode.create(node.stamp().unrestricted(), newBottomMerge));
+                                        newPhi = graph.addWithoutUnique(new ValuePhiNode(node.stamp().unrestricted(), newBottomMerge));
                                         bottomPhis.put(node, newPhi);
                                         newPhi.addInput(node);
                                     }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/UseTrappingNullChecksPhase.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/UseTrappingNullChecksPhase.java	Mon Jan 12 20:39:04 2015 +0100
@@ -162,7 +162,7 @@
         IsNullNode isNullNode = (IsNullNode) condition;
         BeginNode nonTrappingContinuation = ifNode.falseSuccessor();
         BeginNode trappingContinuation = ifNode.trueSuccessor();
-        NullCheckNode trappingNullCheck = deopt.graph().add(NullCheckNode.create(isNullNode.getValue()));
+        NullCheckNode trappingNullCheck = deopt.graph().add(new NullCheckNode(isNullNode.getValue()));
         trappingNullCheck.setStateBefore(deopt.stateBefore());
         deopt.graph().replaceSplit(ifNode, trappingNullCheck, nonTrappingContinuation);
 
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/BaseReduction.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/BaseReduction.java	Mon Jan 12 20:39:04 2015 +0100
@@ -97,7 +97,7 @@
             metricUnconditionalDeoptInserted.increment();
             StructuredGraph graph = fixed.graph();
             // have to insert a FixedNode other than a ControlSinkNode
-            FixedGuardNode buckStopsHere = graph.add(FixedGuardNode.create(falseConstant, deoptReason, DeoptimizationAction.None));
+            FixedGuardNode buckStopsHere = graph.add(new FixedGuardNode(falseConstant, deoptReason, DeoptimizationAction.None));
             if (goesBeforeFixed) {
                 fixed.replaceAtPredecessor(buckStopsHere);
             } else {
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/CheckCastReduction.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/CheckCastReduction.java	Mon Jan 12 20:39:04 2015 +0100
@@ -231,7 +231,7 @@
              * (1 of 3) definitely-non-null
              */
             // addWithoutUnique for the same reason as in CheckCastNode.lower()
-            condition = graph.addWithoutUnique(InstanceOfNode.create(toType, subject, profile));
+            condition = graph.addWithoutUnique(new InstanceOfNode(toType, subject, profile));
             reasoner.added.add(condition);
             resultStamp = FlowUtil.asNonNullStamp(resultStamp);
             // TODO fix in CheckCastNode.lower()
@@ -240,15 +240,15 @@
                 /*
                  * (2 of 3) null-not-seen-in-profiling
                  */
-                IsNullNode isNN = graph.unique(IsNullNode.create(subject));
+                IsNullNode isNN = graph.unique(new IsNullNode(subject));
                 reasoner.added.add(isNN);
-                FixedGuardNode nullCheck = graph.add(FixedGuardNode.create(isNN, UnreachedCode, InvalidateReprofile, true));
+                FixedGuardNode nullCheck = graph.add(new FixedGuardNode(isNN, UnreachedCode, InvalidateReprofile, true));
                 graph.addBeforeFixed(checkCast, nullCheck);
                 // not calling wrapInPiNode() because we don't want to rememberSubstitution()
-                PiNode nonNullGuarded = graph.unique(PiNode.create(subject, FlowUtil.asNonNullStamp(subjectStamp), nullCheck));
+                PiNode nonNullGuarded = graph.unique(new PiNode(subject, FlowUtil.asNonNullStamp(subjectStamp), nullCheck));
                 reasoner.added.add(nonNullGuarded);
                 // addWithoutUnique for the same reason as in CheckCastNode.lower()
-                condition = graph.addWithoutUnique(InstanceOfNode.create(toType, nonNullGuarded, profile));
+                condition = graph.addWithoutUnique(new InstanceOfNode(toType, nonNullGuarded, profile));
                 reasoner.added.add(condition);
                 resultStamp = FlowUtil.asNonNullStamp(resultStamp);
             } else {
@@ -256,9 +256,9 @@
                  * (3 of 3) runtime-null-check-needed
                  */
                 // addWithoutUnique for the same reason as in CheckCastNode.lower()
-                InstanceOfNode typeTest = graph.addWithoutUnique(InstanceOfNode.create(toType, subject, profile));
+                InstanceOfNode typeTest = graph.addWithoutUnique(new InstanceOfNode(toType, subject, profile));
                 reasoner.added.add(typeTest);
-                LogicNode nullTest = graph.unique(IsNullNode.create(subject));
+                LogicNode nullTest = graph.unique(new IsNullNode(subject));
                 reasoner.added.add(nullTest);
                 // TODO (ds) replace with probability of null-seen when available
                 final double shortCircuitProbability = NOT_FREQUENT_PROBABILITY;
@@ -271,7 +271,7 @@
          * Add a cast-guard (checking only what needs to be checked) and a PiNode (to be used in
          * place of the CheckCastNode).
          */
-        FixedGuardNode castGuard = graph.add(FixedGuardNode.create(condition, checkCast.isForStoreCheck() ? ArrayStoreException : ClassCastException, InvalidateReprofile));
+        FixedGuardNode castGuard = graph.add(new FixedGuardNode(condition, checkCast.isForStoreCheck() ? ArrayStoreException : ClassCastException, InvalidateReprofile));
         graph.addBeforeFixed(checkCast, castGuard);
 
         assert FlowUtil.isLegalObjectStamp(resultStamp);
@@ -280,7 +280,7 @@
 
         if (!FlowUtil.lacksUsages(checkCast)) {
             // not calling wrapInPiNode() because we don't want to rememberSubstitution()
-            PiNode checkedObject = graph.unique(PiNode.create(subject, resultStamp, castGuard));
+            PiNode checkedObject = graph.unique(new PiNode(subject, resultStamp, castGuard));
             reasoner.added.add(checkedObject);
             assert !precisionLoss(originalCheckCastObject, checkedObject);
             assert !precisionLoss(subject, checkedObject);
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/EquationalReasoner.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/EquationalReasoner.java	Mon Jan 12 20:39:04 2015 +0100
@@ -662,7 +662,7 @@
         try (Debug.Scope s = Debug.scope("Downcast", payload)) {
             assert payload != anchor : payload.graph().toString();
             metricDowncasting.increment();
-            PiNode result = graph.unique(PiNode.create(payload, newStamp, anchor.asNode()));
+            PiNode result = graph.unique(new PiNode(payload, newStamp, anchor.asNode()));
             // we've possibly got a new node in the graph --- bookkeeping is in order.
             added.add(result);
             if (remember) {
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FixedGuardReduction.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FixedGuardReduction.java	Mon Jan 12 20:39:04 2015 +0100
@@ -31,7 +31,7 @@
  * This class implements control-flow sensitive reductions for
  * {@link com.oracle.graal.nodes.FixedGuardNode}.
  * </p>
- *
+ * 
  * <p>
  * The laundry-list of all flow-sensitive reductions is summarized in
  * {@link com.oracle.graal.phases.common.cfs.FlowSensitiveReduction}
@@ -151,5 +151,4 @@
         graph.removeFixed(old);
         // `old.condition()` if unused will be removed in finished()
     }
-
 }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FlowSensitiveReduction.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FlowSensitiveReduction.java	Mon Jan 12 20:39:04 2015 +0100
@@ -497,9 +497,9 @@
          * state-tracking. TODO the assumption here is that the code emitted for the resulting
          * FixedGuardNode is as efficient as for NullCheckNode.
          */
-        IsNullNode isNN = graph.unique(IsNullNode.create(object));
+        IsNullNode isNN = graph.unique(new IsNullNode(object));
         reasoner.added.add(isNN);
-        FixedGuardNode nullCheck = graph.add(FixedGuardNode.create(isNN, UnreachedCode, InvalidateReprofile, true));
+        FixedGuardNode nullCheck = graph.add(new FixedGuardNode(isNN, UnreachedCode, InvalidateReprofile, true));
         graph.replaceFixedWithFixed(ncn, nullCheck);
 
         state.trackNN(object, nullCheck);
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/GuardingPiReduction.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/GuardingPiReduction.java	Mon Jan 12 20:39:04 2015 +0100
@@ -37,12 +37,12 @@
  * This class implements control-flow sensitive reductions for
  * {@link com.oracle.graal.nodes.GuardingPiNode}.
  * </p>
- *
+ * 
  * <p>
  * The laundry-list of all flow-sensitive reductions is summarized in
  * {@link com.oracle.graal.phases.common.cfs.FlowSensitiveReduction}
  * </p>
- *
+ * 
  * @see #visitGuardingPiNode(com.oracle.graal.nodes.GuardingPiNode)
  */
 public abstract class GuardingPiReduction extends BaseReduction {
@@ -141,7 +141,7 @@
          * FixedGuardNode allows tracking the condition via a GuardingNode, thus potentially
          * triggering simplifications down the road.
          */
-        FixedGuardNode fixedGuard = graph.add(FixedGuardNode.create(envelope.condition(), envelope.getReason(), envelope.getAction(), envelope.isNegated()));
+        FixedGuardNode fixedGuard = graph.add(new FixedGuardNode(envelope.condition(), envelope.getReason(), envelope.getAction(), envelope.isNegated()));
         graph.addBeforeFixed(envelope, fixedGuard);
 
         /*
@@ -152,7 +152,7 @@
 
         if (!FlowUtil.lacksUsages(envelope)) {
             // not calling wrapInPiNode() because we don't want to rememberSubstitution()
-            PiNode replacement = graph.unique(PiNode.create(envelope.object(), envelope.stamp(), fixedGuard));
+            PiNode replacement = graph.unique(new PiNode(envelope.object(), envelope.stamp(), fixedGuard));
             reasoner.added.add(replacement);
             // before removing the GuardingPiNode replace its usages
             envelope.replaceAtUsages(replacement);
@@ -281,7 +281,7 @@
                  * TODO The GuardingPiNode has an outgoing stamp whose narrowing goes beyond what
                  * the condition checks. That's suspicious.
                  */
-                PiNode replacement = graph.unique(PiNode.create(payload, envelope.stamp()));
+                PiNode replacement = graph.unique(new PiNode(payload, envelope.stamp()));
                 reasoner.added.add(replacement);
                 removeGuardingPiNode(envelope, replacement);
                 return true;
@@ -295,7 +295,7 @@
         Witness w = state.typeInfo(payload);
         GuardingNode nonNullAnchor = (w != null && w.isNonNull()) ? w.guard() : null;
         if (nonNullAnchor != null) {
-            PiNode replacement = graph.unique(PiNode.create(payload, envelope.stamp(), nonNullAnchor.asNode()));
+            PiNode replacement = graph.unique(new PiNode(payload, envelope.stamp(), nonNullAnchor.asNode()));
             reasoner.added.add(replacement);
             removeGuardingPiNode(envelope, replacement);
             return true;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java	Mon Jan 12 20:39:04 2015 +0100
@@ -176,7 +176,7 @@
 
     public static void replaceInvokeCallTarget(Invoke invoke, StructuredGraph graph, InvokeKind invokeKind, ResolvedJavaMethod targetMethod) {
         MethodCallTargetNode oldCallTarget = (MethodCallTargetNode) invoke.callTarget();
-        MethodCallTargetNode newCallTarget = graph.add(MethodCallTargetNode.create(invokeKind, targetMethod, oldCallTarget.arguments().toArray(new ValueNode[0]), oldCallTarget.returnType()));
+        MethodCallTargetNode newCallTarget = graph.add(new MethodCallTargetNode(invokeKind, targetMethod, oldCallTarget.arguments().toArray(new ValueNode[0]), oldCallTarget.returnType()));
         invoke.asNode().replaceFirstInput(oldCallTarget, newCallTarget);
     }
 
@@ -186,7 +186,7 @@
 
     private static GuardedValueNode createAnchoredReceiver(StructuredGraph graph, GuardingNode anchor, ValueNode receiver, Stamp stamp) {
         // to avoid that floating reads on receiver fields float above the type check
-        return graph.unique(GuardedValueNode.create(receiver, anchor, stamp));
+        return graph.unique(new GuardedValueNode(receiver, anchor, stamp));
     }
 
     /**
@@ -302,7 +302,7 @@
             // get rid of memory kill
             BeginNode begin = invokeWithException.next();
             if (begin instanceof KillingBeginNode) {
-                BeginNode newBegin = BeginNode.create();
+                BeginNode newBegin = new BeginNode();
                 graph.addAfterFixed(begin, graph.add(newBegin));
                 begin.replaceAtUsages(newBegin);
                 graph.removeFixed(begin);
@@ -310,7 +310,7 @@
         } else {
             if (unwindNode != null) {
                 UnwindNode unwindDuplicate = (UnwindNode) duplicates.get(unwindNode);
-                DeoptimizeNode deoptimizeNode = graph.add(DeoptimizeNode.create(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.NotCompiledExceptionHandler));
+                DeoptimizeNode deoptimizeNode = graph.add(new DeoptimizeNode(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.NotCompiledExceptionHandler));
                 unwindDuplicate.replaceAndDelete(deoptimizeNode);
             }
         }
@@ -341,7 +341,7 @@
                 for (ReturnNode returnNode : returnNodes) {
                     returnDuplicates.add((ReturnNode) duplicates.get(returnNode));
                 }
-                MergeNode merge = graph.add(MergeNode.create());
+                MergeNode merge = graph.add(new MergeNode());
                 merge.setStateAfter(stateAfter);
                 ValueNode returnValue = mergeReturns(merge, returnDuplicates, canonicalizedNodes);
                 invokeNode.replaceAtUsages(returnValue);
@@ -442,12 +442,12 @@
                         MergeNode merge = (MergeNode) fixedStateSplit;
                         while (merge.isAlive()) {
                             AbstractEndNode end = merge.forwardEnds().first();
-                            DeoptimizeNode deoptimizeNode = graph.add(DeoptimizeNode.create(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.NotCompiledExceptionHandler));
+                            DeoptimizeNode deoptimizeNode = graph.add(new DeoptimizeNode(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.NotCompiledExceptionHandler));
                             end.replaceAtPredecessor(deoptimizeNode);
                             GraphUtil.killCFG(end);
                         }
                     } else {
-                        FixedNode deoptimizeNode = graph.add(DeoptimizeNode.create(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.NotCompiledExceptionHandler));
+                        FixedNode deoptimizeNode = graph.add(new DeoptimizeNode(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.NotCompiledExceptionHandler));
                         if (fixedStateSplit instanceof BeginNode) {
                             deoptimizeNode = BeginNode.begin(deoptimizeNode);
                         }
@@ -464,12 +464,12 @@
 
         for (ReturnNode returnNode : returnNodes) {
             // create and wire up a new EndNode
-            EndNode endNode = merge.graph().add(EndNode.create());
+            EndNode endNode = merge.graph().add(new EndNode());
             merge.addForwardEnd(endNode);
 
             if (returnNode.result() != null) {
                 if (returnValuePhi == null) {
-                    returnValuePhi = merge.graph().addWithoutUnique(ValuePhiNode.create(returnNode.result().stamp().unrestricted(), merge));
+                    returnValuePhi = merge.graph().addWithoutUnique(new ValuePhiNode(returnNode.result().stamp().unrestricted(), merge));
                     if (canonicalizedNodes != null) {
                         canonicalizedNodes.add(returnValuePhi);
                     }
@@ -501,9 +501,9 @@
         StructuredGraph graph = callTarget.graph();
         ValueNode firstParam = callTarget.arguments().get(0);
         if (firstParam.getKind() == Kind.Object && !StampTool.isPointerNonNull(firstParam)) {
-            IsNullNode condition = graph.unique(IsNullNode.create(firstParam));
+            IsNullNode condition = graph.unique(new IsNullNode(firstParam));
             Stamp stamp = firstParam.stamp().join(objectNonNull());
-            GuardingPiNode nonNullReceiver = graph.add(GuardingPiNode.create(firstParam, condition, true, NullCheckException, InvalidateReprofile, stamp));
+            GuardingPiNode nonNullReceiver = graph.add(new GuardingPiNode(firstParam, condition, true, NullCheckException, InvalidateReprofile, stamp));
             graph.addBeforeFixed(invoke.asNode(), nonNullReceiver);
             callTarget.replaceFirstInput(firstParam, nonNullReceiver);
             return nonNullReceiver;
@@ -546,8 +546,8 @@
 
     private static FixedWithNextNode createMacroNodeInstance(Class<? extends FixedWithNextNode> macroNodeClass, Invoke invoke) throws GraalInternalError {
         try {
-            Method factory = macroNodeClass.getDeclaredMethod("create", Invoke.class);
-            return (FixedWithNextNode) factory.invoke(null, invoke);
+            Constructor<?> cons = macroNodeClass.getDeclaredConstructor(Invoke.class);
+            return (FixedWithNextNode) cons.newInstance(invoke);
         } catch (ReflectiveOperationException | IllegalArgumentException | SecurityException e) {
             throw new GraalGraphInternalError(e).addContext(invoke.asNode()).addContext("macroSubstitution", macroNodeClass);
         }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/MultiTypeGuardInlineInfo.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/MultiTypeGuardInlineInfo.java	Mon Jan 12 20:39:04 2015 +0100
@@ -173,12 +173,12 @@
 
         ValueNode originalReceiver = ((MethodCallTargetNode) invoke.callTarget()).receiver();
         // setup merge and phi nodes for results and exceptions
-        MergeNode returnMerge = graph.add(MergeNode.create());
+        MergeNode returnMerge = graph.add(new MergeNode());
         returnMerge.setStateAfter(invoke.stateAfter());
 
         PhiNode returnValuePhi = null;
         if (invoke.asNode().getKind() != Kind.Void) {
-            returnValuePhi = graph.addWithoutUnique(ValuePhiNode.create(invoke.asNode().stamp().unrestricted(), returnMerge));
+            returnValuePhi = graph.addWithoutUnique(new ValuePhiNode(invoke.asNode().stamp().unrestricted(), returnMerge));
         }
 
         MergeNode exceptionMerge = null;
@@ -187,11 +187,11 @@
             InvokeWithExceptionNode invokeWithException = (InvokeWithExceptionNode) invoke;
             ExceptionObjectNode exceptionEdge = (ExceptionObjectNode) invokeWithException.exceptionEdge();
 
-            exceptionMerge = graph.add(MergeNode.create());
+            exceptionMerge = graph.add(new MergeNode());
 
             FixedNode exceptionSux = exceptionEdge.next();
             graph.addBeforeFixed(exceptionSux, exceptionMerge);
-            exceptionObjectPhi = graph.addWithoutUnique(ValuePhiNode.create(StampFactory.forKind(Kind.Object), exceptionMerge));
+            exceptionObjectPhi = graph.addWithoutUnique(new ValuePhiNode(StampFactory.forKind(Kind.Object), exceptionMerge));
             exceptionMerge.setStateAfter(exceptionEdge.stateAfter().duplicateModified(invoke.stateAfter().bci, true, Kind.Object, exceptionObjectPhi));
         }
 
@@ -206,7 +206,7 @@
         if (shouldFallbackToInvoke()) {
             unknownTypeSux = createInvocationBlock(graph, invoke, returnMerge, returnValuePhi, exceptionMerge, exceptionObjectPhi, false);
         } else {
-            unknownTypeSux = graph.add(DeoptimizeNode.create(DeoptimizationAction.InvalidateReprofile, DeoptimizationReason.TypeCheckedInliningViolated));
+            unknownTypeSux = graph.add(new DeoptimizeNode(DeoptimizationAction.InvalidateReprofile, DeoptimizationReason.TypeCheckedInliningViolated));
         }
         successors[successors.length - 1] = BeginNode.begin(unknownTypeSux);
 
@@ -330,7 +330,7 @@
     private Collection<Node> inlineSingleMethod(StructuredGraph graph, MetaAccessProvider metaAccess, Assumptions assumptions, StampProvider stampProvider) {
         assert concretes.size() == 1 && inlineableElements.length == 1 && ptypes.size() > 1 && !shouldFallbackToInvoke() && notRecordedTypeProbability == 0;
 
-        BeginNode calleeEntryNode = graph.add(BeginNode.create());
+        BeginNode calleeEntryNode = graph.add(new BeginNode());
 
         BeginNode unknownTypeSux = createUnknownTypeSuccessor(graph);
         BeginNode[] successors = new BeginNode[]{calleeEntryNode, unknownTypeSux};
@@ -344,7 +344,7 @@
     private boolean createDispatchOnTypeBeforeInvoke(StructuredGraph graph, BeginNode[] successors, boolean invokeIsOnlySuccessor, MetaAccessProvider metaAccess, StampProvider stampProvider) {
         assert ptypes.size() >= 1;
         ValueNode nonNullReceiver = InliningUtil.nonNullReceiver(invoke);
-        LoadHubNode hub = graph.unique(LoadHubNode.create(stampProvider, nonNullReceiver));
+        LoadHubNode hub = graph.unique(new LoadHubNode(stampProvider, nonNullReceiver));
 
         if (!invokeIsOnlySuccessor && chooseMethodDispatch()) {
             assert successors.length == concretes.size() + 1;
@@ -375,9 +375,9 @@
             ResolvedJavaType receiverType = invoke.getReceiverType();
             FixedNode lastSucc = successors[concretes.size()];
             for (int i = concretes.size() - 1; i >= 0; --i) {
-                LoadMethodNode method = graph.add(LoadMethodNode.create(stampProvider.createMethodStamp(), concretes.get(i), receiverType, hub));
+                LoadMethodNode method = graph.add(new LoadMethodNode(stampProvider.createMethodStamp(), concretes.get(i), receiverType, hub));
                 CompareNode methodCheck = CompareNode.createCompareNode(graph, Condition.EQ, method, constantMethods[i]);
-                IfNode ifNode = graph.add(IfNode.create(methodCheck, successors[i], lastSucc, probability[i]));
+                IfNode ifNode = graph.add(new IfNode(methodCheck, successors[i], lastSucc, probability[i]));
                 method.setNext(ifNode);
                 lastSucc = method;
             }
@@ -408,7 +408,7 @@
             keyProbabilities[i] /= totalProbability;
         }
 
-        TypeSwitchNode typeSwitch = graph.add(TypeSwitchNode.create(hub, successors, keys, keyProbabilities, keySuccessors));
+        TypeSwitchNode typeSwitch = graph.add(new TypeSwitchNode(hub, successors, keys, keyProbabilities, keySuccessors));
         FixedWithNextNode pred = (FixedWithNextNode) invoke.asNode().predecessor();
         pred.setNext(typeSwitch);
         return false;
@@ -462,10 +462,10 @@
     private static BeginNode createInvocationBlock(StructuredGraph graph, Invoke invoke, MergeNode returnMerge, PhiNode returnValuePhi, MergeNode exceptionMerge, PhiNode exceptionObjectPhi,
                     boolean useForInlining) {
         Invoke duplicatedInvoke = duplicateInvokeForInlining(graph, invoke, exceptionMerge, exceptionObjectPhi, useForInlining);
-        BeginNode calleeEntryNode = graph.add(BeginNode.create());
+        BeginNode calleeEntryNode = graph.add(new BeginNode());
         calleeEntryNode.setNext(duplicatedInvoke.asNode());
 
-        AbstractEndNode endNode = graph.add(EndNode.create());
+        AbstractEndNode endNode = graph.add(new EndNode());
         duplicatedInvoke.setNext(endNode);
         returnMerge.addForwardEnd(endNode);
 
@@ -500,7 +500,7 @@
             // set new state (pop old exception object, push new one)
             newExceptionEdge.setStateAfter(stateAfterException.duplicateModified(Kind.Object, newExceptionEdge));
 
-            AbstractEndNode endNode = graph.add(EndNode.create());
+            AbstractEndNode endNode = graph.add(new EndNode());
             newExceptionEdge.setNext(endNode);
             exceptionMerge.addForwardEnd(endNode);
             exceptionObjectPhi.addInput(newExceptionEdge);
@@ -538,7 +538,7 @@
     }
 
     private void devirtualizeWithTypeSwitch(StructuredGraph graph, InvokeKind kind, ResolvedJavaMethod target, MetaAccessProvider metaAccess, StampProvider stampProvider) {
-        BeginNode invocationEntry = graph.add(BeginNode.create());
+        BeginNode invocationEntry = graph.add(new BeginNode());
         BeginNode unknownTypeSux = createUnknownTypeSuccessor(graph);
         BeginNode[] successors = new BeginNode[]{invocationEntry, unknownTypeSux};
         createDispatchOnTypeBeforeInvoke(graph, successors, true, metaAccess, stampProvider);
@@ -551,7 +551,7 @@
     }
 
     private static BeginNode createUnknownTypeSuccessor(StructuredGraph graph) {
-        return BeginNode.begin(graph.add(DeoptimizeNode.create(DeoptimizationAction.InvalidateReprofile, DeoptimizationReason.TypeCheckedInliningViolated)));
+        return BeginNode.begin(graph.add(new DeoptimizeNode(DeoptimizationAction.InvalidateReprofile, DeoptimizationReason.TypeCheckedInliningViolated)));
     }
 
     @Override
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/TypeGuardInlineInfo.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/TypeGuardInlineInfo.java	Mon Jan 12 20:39:04 2015 +0100
@@ -103,11 +103,11 @@
 
     private void createGuard(StructuredGraph graph, Providers providers) {
         ValueNode nonNullReceiver = InliningUtil.nonNullReceiver(invoke);
-        LoadHubNode receiverHub = graph.unique(LoadHubNode.create(providers.getStampProvider(), nonNullReceiver));
+        LoadHubNode receiverHub = graph.unique(new LoadHubNode(providers.getStampProvider(), nonNullReceiver));
         ConstantNode typeHub = ConstantNode.forConstant(receiverHub.stamp(), type.getObjectHub(), providers.getMetaAccess(), graph);
 
         CompareNode typeCheck = CompareNode.createCompareNode(graph, Condition.EQ, receiverHub, typeHub);
-        FixedGuardNode guard = graph.add(FixedGuardNode.create(typeCheck, DeoptimizationReason.TypeCheckedInliningViolated, DeoptimizationAction.InvalidateReprofile));
+        FixedGuardNode guard = graph.add(new FixedGuardNode(typeCheck, DeoptimizationReason.TypeCheckedInliningViolated, DeoptimizationAction.InvalidateReprofile));
         assert invoke.predecessor() != null;
 
         ValueNode anchoredReceiver = InliningUtil.createAnchoredReceiver(graph, guard, type, nonNullReceiver, true);
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/InferStamps.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/InferStamps.java	Mon Jan 12 20:39:04 2015 +0100
@@ -90,5 +90,4 @@
         }
         return true;
     }
-
 }
--- a/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64ConvertSnippets.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64ConvertSnippets.java	Mon Jan 12 20:39:04 2015 +0100
@@ -182,7 +182,7 @@
 
             Arguments args = new Arguments(key, graph.getGuardsStage(), tool.getLoweringStage());
             args.add("input", convert.getValue());
-            args.add("result", graph.unique(AMD64FloatConvertNode.create(convert.getFloatConvert(), convert.getValue())));
+            args.add("result", graph.unique(new AMD64FloatConvertNode(convert.getFloatConvert(), convert.getValue())));
 
             SnippetTemplate template = template(args);
             Debug.log("Lowering %s in %s: node=%s, template=%s, arguments=%s", convert.getFloatConvert(), graph, convert, template, args);
--- a/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64CountLeadingZerosNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64CountLeadingZerosNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -37,11 +37,7 @@
 @NodeInfo
 public class AMD64CountLeadingZerosNode extends UnaryNode implements LIRLowerable {
 
-    public static AMD64CountLeadingZerosNode create(ValueNode value) {
-        return new AMD64CountLeadingZerosNode(value);
-    }
-
-    protected AMD64CountLeadingZerosNode(ValueNode value) {
+    public AMD64CountLeadingZerosNode(ValueNode value) {
         super(StampFactory.forInteger(Kind.Int, 0, ((PrimitiveStamp) value.stamp()).getBits()), value);
         assert value.getKind() == Kind.Int || value.getKind() == Kind.Long;
     }
--- a/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64CountTrailingZerosNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64CountTrailingZerosNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -37,11 +37,7 @@
 @NodeInfo
 public class AMD64CountTrailingZerosNode extends UnaryNode implements LIRLowerable {
 
-    public static AMD64CountTrailingZerosNode create(ValueNode value) {
-        return new AMD64CountTrailingZerosNode(value);
-    }
-
-    protected AMD64CountTrailingZerosNode(ValueNode value) {
+    public AMD64CountTrailingZerosNode(ValueNode value) {
         super(StampFactory.forInteger(Kind.Int, 0, ((PrimitiveStamp) value.stamp()).getBits()), value);
         assert value.getKind() == Kind.Int || value.getKind() == Kind.Long;
     }
--- a/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64FloatConvertNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64FloatConvertNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -41,11 +41,7 @@
 
     protected final FloatConvert op;
 
-    public static AMD64FloatConvertNode create(FloatConvert op, ValueNode value) {
-        return new AMD64FloatConvertNode(op, value);
-    }
-
-    protected AMD64FloatConvertNode(FloatConvert op, ValueNode value) {
+    public AMD64FloatConvertNode(FloatConvert op, ValueNode value) {
         super(table -> table.getFloatConvert(op), value);
         this.op = op;
     }
--- a/graal/com.oracle.graal.replacements.hsail/src/com/oracle/graal/replacements/hsail/HSAILMathIntrinsicsNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements.hsail/src/com/oracle/graal/replacements/hsail/HSAILMathIntrinsicsNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -69,17 +69,7 @@
         return operation;
     }
 
-    /**
-     * Creates a new HSAILMathIntrinsicNode.
-     *
-     * @param x the argument to the math operation
-     * @param op the math operation
-     */
-    public static HSAILMathIntrinsicsNode create(ValueNode x, HSAILArithmetic op) {
-        return new HSAILMathIntrinsicsNode(x, op);
-    }
-
-    protected HSAILMathIntrinsicsNode(ValueNode x, HSAILArithmetic op) {
+    public HSAILMathIntrinsicsNode(ValueNode x, HSAILArithmetic op) {
         super(StampFactory.forKind(x.getKind()));
         this.param = x;
         this.operation = op;
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/CheckCastTest.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/CheckCastTest.java	Mon Jan 12 20:39:04 2015 +0100
@@ -37,7 +37,7 @@
     protected void replaceProfile(StructuredGraph graph, JavaTypeProfile profile) {
         CheckCastNode ccn = graph.getNodes().filter(CheckCastNode.class).first();
         if (ccn != null) {
-            CheckCastNode ccnNew = graph.add(CheckCastNode.create(ccn.type(), ccn.object(), profile, false));
+            CheckCastNode ccnNew = graph.add(new CheckCastNode(ccn.type(), ccn.object(), profile, false));
             graph.replaceFixedWithFixed(ccn, ccnNew);
         }
     }
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/EdgesTest.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/EdgesTest.java	Mon Jan 12 20:39:04 2015 +0100
@@ -48,13 +48,9 @@
         @Input ConstantNode i1;
         @Input FloatingNode i2;
 
-        public static TestNode create() {
-            return new TestNode();
+        public TestNode() {
         }
 
-        protected TestNode() {
-            // TODO Auto-generated constructor stub
-        }
     }
 
     StructuredGraph graph = new StructuredGraph();
@@ -66,7 +62,7 @@
     Edges inputs;
 
     public EdgesTest() {
-        node = TestNode.create();
+        node = new TestNode();
         i1 = ConstantNode.forInt(1, graph);
         i2 = ConstantNode.forDouble(1.0d, graph);
         i3 = ConstantNode.forInt(4, graph);
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/InstanceOfTest.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/InstanceOfTest.java	Mon Jan 12 20:39:04 2015 +0100
@@ -50,7 +50,7 @@
     protected void replaceProfile(StructuredGraph graph, JavaTypeProfile profile) {
         InstanceOfNode ion = graph.getNodes().filter(InstanceOfNode.class).first();
         if (ion != null) {
-            InstanceOfNode ionNew = graph.unique(InstanceOfNode.create(ion.type(), ion.getValue(), profile));
+            InstanceOfNode ionNew = graph.unique(new InstanceOfNode(ion.type(), ion.getValue(), profile));
             graph.replaceFloating(ion, ionNew);
         }
     }
--- a/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/NewMultiArrayTest.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements.test/src/com/oracle/graal/replacements/test/NewMultiArrayTest.java	Mon Jan 12 20:39:04 2015 +0100
@@ -64,7 +64,7 @@
                 dimensionNodes[i] = ConstantNode.forInt(dimensions[i], graph);
             }
 
-            NewMultiArrayNode repl = graph.add(NewMultiArrayNode.create(arrayType, dimensionNodes));
+            NewMultiArrayNode repl = graph.add(new NewMultiArrayNode(arrayType, dimensionNodes));
             graph.replaceFixedWithFixed(node, repl);
             forceCompile = true;
         }
--- a/graal/com.oracle.graal.replacements.verifier/src/com/oracle/graal/replacements/verifier/NodeIntrinsicVerifier.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements.verifier/src/com/oracle/graal/replacements/verifier/NodeIntrinsicVerifier.java	Mon Jan 12 20:39:04 2015 +0100
@@ -94,7 +94,7 @@
                 env.getMessager().printMessage(Kind.ERROR, String.format("Cannot make @NodeIntrinsic for abstract node class %s.", nodeClass.getSimpleName()), element, annotation);
             } else {
                 TypeMirror[] constructorSignature = constructorSignature(intrinsicMethod);
-                findFactory(nodeClass, constructorSignature, intrinsicMethod, annotation);
+                findConstructor(nodeClass, constructorSignature, intrinsicMethod, annotation);
             }
         } else {
             env.getMessager().printMessage(Kind.ERROR, String.format("The class %s is not a Node subclass.", nodeClass.getSimpleName()), element, annotation);
@@ -122,40 +122,37 @@
         return parameters;
     }
 
-    private void findFactory(TypeElement nodeClass, TypeMirror[] signature, ExecutableElement intrinsicMethod, AnnotationMirror intrinsicAnnotation) {
-        List<ExecutableElement> methods = ElementFilter.methodsIn(nodeClass.getEnclosedElements());
+    private void findConstructor(TypeElement nodeClass, TypeMirror[] signature, ExecutableElement intrinsicMethod, AnnotationMirror intrinsicAnnotation) {
+        List<ExecutableElement> constructors = ElementFilter.constructorsIn(nodeClass.getEnclosedElements());
         List<String> failureReasons = new ArrayList<>();
 
-        nextMethod: for (ExecutableElement method : methods) {
-            if (!method.getSimpleName().contentEquals("create") || !method.getModifiers().contains(Modifier.STATIC)) {
-                continue;
-            }
+        nextConstructor: for (ExecutableElement constructor : constructors) {
             int sIdx = 0;
-            int mIdx = 0;
-            while (mIdx < method.getParameters().size()) {
-                VariableElement parameter = method.getParameters().get(mIdx++);
+            int cIdx = 0;
+            while (cIdx < constructor.getParameters().size()) {
+                VariableElement parameter = constructor.getParameters().get(cIdx++);
                 if (parameter.getAnnotation(InjectedNodeParameter.class) != null) {
                     // skip injected parameters
                     continue;
                 }
 
                 TypeMirror paramType = parameter.asType();
-                if (mIdx == method.getParameters().size() && paramType.getKind() == TypeKind.ARRAY) {
-                    // last argument of method is varargs, match remaining intrinsic arguments
+                if (cIdx == constructor.getParameters().size() && paramType.getKind() == TypeKind.ARRAY) {
+                    // last argument of constructor is varargs, match remaining intrinsic arguments
                     TypeMirror varargsType = ((ArrayType) paramType).getComponentType();
                     while (sIdx < signature.length) {
                         if (!isTypeCompatible(varargsType, signature[sIdx++])) {
-                            failureReasons.add(String.format("Factory method %s failed because the types of argument %d are incompatible: %s != %s", method, sIdx, varargsType, signature[sIdx - 1]));
-                            continue nextMethod;
+                            failureReasons.add(String.format("Constructor %s failed because the types of argument %d are incompatible: %s != %s", constructor, sIdx, varargsType, signature[sIdx - 1]));
+                            continue nextConstructor;
                         }
                     }
                 } else if (sIdx >= signature.length) {
                     // too many arguments in intrinsic method
-                    failureReasons.add(String.format("Too many arguments for %s", method));
-                    continue nextMethod;
+                    failureReasons.add(String.format("Too many arguments for %s", constructor));
+                    continue nextConstructor;
                 } else if (!isTypeCompatible(paramType, signature[sIdx++])) {
-                    failureReasons.add(String.format("Factory method %s failed because the types of argument %d are incompatible: %s != %s", method, sIdx, paramType, signature[sIdx - 1]));
-                    continue nextMethod;
+                    failureReasons.add(String.format("Constructor %s failed because the types of argument %d are incompatible: %s != %s", constructor, sIdx, paramType, signature[sIdx - 1]));
+                    continue nextConstructor;
                 }
             }
 
@@ -165,12 +162,12 @@
             }
 
             // too many arguments in constructor
-            failureReasons.add(String.format("Not enough arguments for %s", method));
+            failureReasons.add(String.format("Not enough arguments for %s", constructor));
         }
 
         // not found
         if (failureReasons.isEmpty()) {
-            env.getMessager().printMessage(Kind.ERROR, "Could not find matching factory method for node intrinsic.", intrinsicMethod, intrinsicAnnotation);
+            env.getMessager().printMessage(Kind.ERROR, "Could not find matching constructor for node intrinsic.", intrinsicMethod, intrinsicAnnotation);
         } else {
             for (String reason : failureReasons) {
                 env.getMessager().printMessage(Kind.ERROR, reason, intrinsicMethod, intrinsicAnnotation);
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/CollapseFrameForSingleSideEffectPhase.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/CollapseFrameForSingleSideEffectPhase.java	Mon Jan 12 20:39:04 2015 +0100
@@ -228,7 +228,7 @@
             assert bci == AFTER_BCI || bci == AFTER_EXCEPTION_BCI || bci == INVALID_FRAMESTATE_BCI;
             FrameState currentStateAfter = node.stateAfter();
             if (currentStateAfter != null || !replaceOnly) {
-                node.setStateAfter(graph.add(FrameState.create(bci)));
+                node.setStateAfter(graph.add(new FrameState(bci)));
                 if (currentStateAfter != null && currentStateAfter.usages().isEmpty()) {
                     GraphUtil.killWithUnusedFloatingInputs(currentStateAfter);
                 }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java	Mon Jan 12 20:39:04 2015 +0100
@@ -121,7 +121,7 @@
         ConstantLocationNode location = createFieldLocation(graph, field, false);
         assert location != null : "Field that is loaded must not be eliminated";
 
-        ReadNode memoryRead = graph.add(ReadNode.create(object, location, loadStamp, fieldLoadBarrierType(field)));
+        ReadNode memoryRead = graph.add(new ReadNode(object, location, loadStamp, fieldLoadBarrierType(field)));
         ValueNode readValue = implicitLoadConvert(graph, field.getKind(), memoryRead);
         loadField.replaceAtUsages(readValue);
         graph.replaceFixed(loadField, memoryRead);
@@ -129,9 +129,9 @@
         memoryRead.setGuard(createNullCheck(object, memoryRead, tool));
 
         if (loadField.isVolatile()) {
-            MembarNode preMembar = graph.add(MembarNode.create(JMM_PRE_VOLATILE_READ));
+            MembarNode preMembar = graph.add(new MembarNode(JMM_PRE_VOLATILE_READ));
             graph.addBeforeFixed(memoryRead, preMembar);
-            MembarNode postMembar = graph.add(MembarNode.create(JMM_POST_VOLATILE_READ));
+            MembarNode postMembar = graph.add(new MembarNode(JMM_POST_VOLATILE_READ));
             graph.addAfterFixed(memoryRead, postMembar);
         }
     }
@@ -149,15 +149,15 @@
             graph.removeFixed(storeField);
             return;
         }
-        WriteNode memoryWrite = graph.add(WriteNode.create(object, value, location, fieldStoreBarrierType(storeField.field())));
+        WriteNode memoryWrite = graph.add(new WriteNode(object, value, location, fieldStoreBarrierType(storeField.field())));
         memoryWrite.setStateAfter(storeField.stateAfter());
         graph.replaceFixedWithFixed(storeField, memoryWrite);
         memoryWrite.setGuard(createNullCheck(object, memoryWrite, tool));
 
         if (storeField.isVolatile()) {
-            MembarNode preMembar = graph.add(MembarNode.create(JMM_PRE_VOLATILE_WRITE));
+            MembarNode preMembar = graph.add(new MembarNode(JMM_PRE_VOLATILE_WRITE));
             graph.addBeforeFixed(memoryWrite, preMembar);
-            MembarNode postMembar = graph.add(MembarNode.create(JMM_POST_VOLATILE_WRITE));
+            MembarNode postMembar = graph.add(new MembarNode(JMM_POST_VOLATILE_WRITE));
             graph.addAfterFixed(memoryWrite, postMembar);
         }
     }
@@ -168,7 +168,7 @@
         LocationNode location = createArrayLocation(graph, elementKind, loadIndexed.index(), false);
         Stamp loadStamp = loadStamp(loadIndexed.stamp(), elementKind);
 
-        ReadNode memoryRead = graph.add(ReadNode.create(loadIndexed.array(), location, loadStamp, BarrierType.NONE));
+        ReadNode memoryRead = graph.add(new ReadNode(loadIndexed.array(), location, loadStamp, BarrierType.NONE));
         ValueNode readValue = implicitLoadConvert(graph, elementKind, memoryRead);
 
         memoryRead.setGuard(createBoundsCheck(loadIndexed, tool));
@@ -192,20 +192,20 @@
             if (arrayType != null && StampTool.isExactType(array)) {
                 ResolvedJavaType elementType = arrayType.getComponentType();
                 if (!elementType.isJavaLangObject()) {
-                    checkCastNode = graph.add(CheckCastNode.create(elementType, value, null, true));
+                    checkCastNode = graph.add(new CheckCastNode(elementType, value, null, true));
                     graph.addBeforeFixed(storeIndexed, checkCastNode);
                     value = checkCastNode;
                 }
             } else {
                 ValueNode arrayClass = createReadHub(graph, array, boundsCheck);
                 ValueNode componentHub = createReadArrayComponentHub(graph, arrayClass, storeIndexed);
-                checkCastNode = graph.add(CheckCastDynamicNode.create(componentHub, value, true));
+                checkCastNode = graph.add(new CheckCastDynamicNode(componentHub, value, true));
                 graph.addBeforeFixed(storeIndexed, checkCastNode);
                 value = checkCastNode;
             }
         }
 
-        WriteNode memoryWrite = graph.add(WriteNode.create(array, implicitStoreConvert(graph, elementKind, value), location, arrayStoreBarrierType(storeIndexed.elementKind())));
+        WriteNode memoryWrite = graph.add(new WriteNode(array, implicitStoreConvert(graph, elementKind, value), location, arrayStoreBarrierType(storeIndexed.elementKind())));
         memoryWrite.setGuard(boundsCheck);
         memoryWrite.setStateAfter(storeIndexed.stateAfter());
         graph.replaceFixedWithFixed(storeIndexed, memoryWrite);
@@ -219,9 +219,9 @@
     protected void lowerArrayLengthNode(ArrayLengthNode arrayLengthNode, LoweringTool tool) {
         StructuredGraph graph = arrayLengthNode.graph();
         ValueNode array = arrayLengthNode.array();
-        ConstantLocationNode location = ConstantLocationNode.create(ARRAY_LENGTH_LOCATION, arrayLengthOffset(), graph);
+        ConstantLocationNode location = graph.unique(new ConstantLocationNode(ARRAY_LENGTH_LOCATION, arrayLengthOffset()));
 
-        ReadNode arrayLengthRead = graph.add(ReadNode.create(array, location, StampFactory.positiveInt(), BarrierType.NONE));
+        ReadNode arrayLengthRead = graph.add(new ReadNode(array, location, StampFactory.positiveInt(), BarrierType.NONE));
         arrayLengthRead.setGuard(createNullCheck(array, arrayLengthNode, tool));
         graph.replaceFixedWithFixed(arrayLengthNode, arrayLengthRead);
     }
@@ -243,7 +243,7 @@
         ValueNode expectedValue = implicitStoreConvert(graph, valueKind, cas.expected());
         ValueNode newValue = implicitStoreConvert(graph, valueKind, cas.newValue());
 
-        LoweredCompareAndSwapNode atomicNode = graph.add(LoweredCompareAndSwapNode.create(cas.object(), location, expectedValue, newValue, compareAndSwapBarrierType(cas)));
+        LoweredCompareAndSwapNode atomicNode = graph.add(new LoweredCompareAndSwapNode(cas.object(), location, expectedValue, newValue, compareAndSwapBarrierType(cas)));
         atomicNode.setStateAfter(cas.stateAfter());
         graph.replaceFixedWithFixed(cas, atomicNode);
     }
@@ -251,11 +251,11 @@
     protected void lowerAtomicReadAndWriteNode(AtomicReadAndWriteNode n) {
         StructuredGraph graph = n.graph();
         Kind valueKind = n.getValueKind();
-        LocationNode location = IndexedLocationNode.create(n.getLocationIdentity(), 0, n.offset(), graph, 1);
+        LocationNode location = graph.unique(new IndexedLocationNode(n.getLocationIdentity(), 0, n.offset(), 1));
 
         ValueNode newValue = implicitStoreConvert(graph, valueKind, n.newValue());
 
-        LoweredAtomicReadAndWriteNode memoryRead = graph.add(LoweredAtomicReadAndWriteNode.create(n.object(), location, newValue, atomicReadAndWriteBarrierType(n)));
+        LoweredAtomicReadAndWriteNode memoryRead = graph.add(new LoweredAtomicReadAndWriteNode(n.object(), location, newValue, atomicReadAndWriteBarrierType(n)));
         memoryRead.setStateAfter(n.stateAfter());
 
         ValueNode readValue = implicitLoadConvert(graph, valueKind, memoryRead);
@@ -266,7 +266,7 @@
     protected void lowerUnsafeLoadNode(UnsafeLoadNode load, @SuppressWarnings("unused") LoweringTool tool) {
         StructuredGraph graph = load.graph();
         if (load.getGuardingCondition() != null) {
-            ConditionAnchorNode valueAnchorNode = graph.add(ConditionAnchorNode.create(load.getGuardingCondition()));
+            ConditionAnchorNode valueAnchorNode = graph.add(new ConditionAnchorNode(load.getGuardingCondition()));
             ReadNode memoryRead = createUnsafeRead(graph, load, valueAnchorNode);
             graph.replaceFixedWithFixed(load, valueAnchorNode);
             graph.addAfterFixed(valueAnchorNode, memoryRead);
@@ -293,7 +293,7 @@
             object = base[0];
         }
         Stamp loadStamp = loadStamp(load.stamp(), readKind, compressible);
-        ReadNode memoryRead = graph.add(ReadNode.create(object, location, loadStamp, guard, BarrierType.NONE));
+        ReadNode memoryRead = graph.add(new ReadNode(object, location, loadStamp, guard, BarrierType.NONE));
         ValueNode readValue = implicitLoadConvert(graph, readKind, memoryRead, compressible);
         load.replaceAtUsages(readValue);
         return memoryRead;
@@ -313,7 +313,7 @@
         boolean compressible = store.value().getKind() == Kind.Object;
         Kind valueKind = store.accessKind();
         ValueNode value = implicitStoreConvert(graph, valueKind, store.value(), compressible);
-        WriteNode write = graph.add(WriteNode.create(object, value, location, unsafeStoreBarrierType(store)));
+        WriteNode write = graph.add(new WriteNode(object, value, location, unsafeStoreBarrierType(store)));
         write.setStateAfter(store.stateAfter());
         graph.replaceFixedWithFixed(store, write);
     }
@@ -323,7 +323,7 @@
         Kind valueKind = read.getReadKind();
         Stamp loadStamp = loadStamp(read.stamp(), valueKind, read.isCompressible());
 
-        ReadNode memoryRead = graph.add(ReadNode.create(read.object(), read.location(), loadStamp, read.getBarrierType()));
+        ReadNode memoryRead = graph.add(new ReadNode(read.object(), read.location(), loadStamp, read.getBarrierType()));
         ValueNode readValue = implicitLoadConvert(graph, valueKind, memoryRead, read.isCompressible());
         memoryRead.setGuard(read.getGuard());
         read.replaceAtUsages(readValue);
@@ -335,7 +335,7 @@
         Kind valueKind = write.getWriteKind();
         ValueNode value = implicitStoreConvert(graph, valueKind, write.value(), write.isCompressible());
 
-        WriteNode memoryWrite = graph.add(WriteNode.create(write.object(), value, write.location(), write.getBarrierType(), write.isInitialization()));
+        WriteNode memoryWrite = graph.add(new WriteNode(write.object(), value, write.location(), write.getBarrierType(), write.isInitialization()));
         memoryWrite.setStateAfter(write.stateAfter());
         graph.replaceFixedWithFixed(write, memoryWrite);
         memoryWrite.setGuard(write.getGuard());
@@ -382,15 +382,15 @@
                             ResolvedJavaField field = ((VirtualInstanceNode) virtual).field(i);
                             long offset = fieldOffset(field);
                             if (offset >= 0) {
-                                location = ConstantLocationNode.create(initLocationIdentity(), offset, graph);
+                                location = graph.unique(new ConstantLocationNode(initLocationIdentity(), offset));
                                 barrierType = fieldInitializationBarrier(entryKind);
                             }
                         } else {
-                            location = ConstantLocationNode.create(initLocationIdentity(), arrayBaseOffset(entryKind) + i * arrayScalingFactor(entryKind), graph);
+                            location = graph.unique(new ConstantLocationNode(initLocationIdentity(), arrayBaseOffset(entryKind) + i * arrayScalingFactor(entryKind)));
                             barrierType = arrayInitializationBarrier(entryKind);
                         }
                         if (location != null) {
-                            WriteNode write = WriteNode.create(newObject, implicitStoreConvert(graph, entryKind, value), location, barrierType);
+                            WriteNode write = new WriteNode(newObject, implicitStoreConvert(graph, entryKind, value), location, barrierType);
                             graph.addAfterFixed(newObject, graph.add(write));
                         }
                     }
@@ -422,7 +422,7 @@
                                 barrierType = BarrierType.PRECISE;
                             }
                             if (location != null) {
-                                WriteNode write = WriteNode.create(newObject, implicitStoreConvert(graph, Kind.Object, allocValue), location, barrierType);
+                                WriteNode write = new WriteNode(newObject, implicitStoreConvert(graph, Kind.Object, allocValue), location, barrierType);
                                 graph.addBeforeFixed(commit, graph.add(write));
                             }
                         }
@@ -441,23 +441,23 @@
     }
 
     public NewInstanceNode createNewInstanceFromVirtual(VirtualObjectNode virtual) {
-        return NewInstanceNode.create(virtual.type(), true);
+        return new NewInstanceNode(virtual.type(), true);
     }
 
     protected NewArrayNode createNewArrayFromVirtual(VirtualObjectNode virtual, ValueNode length) {
-        return NewArrayNode.create(((VirtualArrayNode) virtual).componentType(), length, true);
+        return new NewArrayNode(((VirtualArrayNode) virtual).componentType(), length, true);
     }
 
     public static void finishAllocatedObjects(LoweringTool tool, CommitAllocationNode commit, ValueNode[] allocations) {
         StructuredGraph graph = commit.graph();
         for (int objIndex = 0; objIndex < commit.getVirtualObjects().size(); objIndex++) {
-            FixedValueAnchorNode anchor = graph.add(FixedValueAnchorNode.create(allocations[objIndex]));
+            FixedValueAnchorNode anchor = graph.add(new FixedValueAnchorNode(allocations[objIndex]));
             allocations[objIndex] = anchor;
             graph.addBeforeFixed(commit, anchor);
         }
         for (int objIndex = 0; objIndex < commit.getVirtualObjects().size(); objIndex++) {
             for (MonitorIdNode monitorId : commit.getLocks(objIndex)) {
-                MonitorEnterNode enter = graph.add(MonitorEnterNode.create(allocations[objIndex], monitorId));
+                MonitorEnterNode enter = graph.add(new MonitorEnterNode(allocations[objIndex], monitorId));
                 graph.addBeforeFixed(commit, enter);
                 enter.lower(tool);
             }
@@ -558,10 +558,10 @@
         switch (kind) {
             case Byte:
             case Short:
-                return graph.unique(SignExtendNode.create(value, 32));
+                return graph.unique(new SignExtendNode(value, 32));
             case Boolean:
             case Char:
-                return graph.unique(ZeroExtendNode.create(value, 32));
+                return graph.unique(new ZeroExtendNode(value, 32));
         }
         return value;
     }
@@ -574,10 +574,10 @@
         switch (kind) {
             case Boolean:
             case Byte:
-                return graph.unique(NarrowNode.create(value, 8));
+                return graph.unique(new NarrowNode(value, 8));
             case Char:
             case Short:
-                return graph.unique(NarrowNode.create(value, 16));
+                return graph.unique(new NarrowNode(value, 16));
         }
         return value;
     }
@@ -590,7 +590,7 @@
         int offset = fieldOffset(field);
         if (offset >= 0) {
             LocationIdentity loc = initialization ? initLocationIdentity() : field;
-            return ConstantLocationNode.create(loc, offset, graph);
+            return graph.unique(new ConstantLocationNode(loc, offset));
         } else {
             return null;
         }
@@ -619,7 +619,7 @@
         ValueNode offset = offsetNode;
         if (offset.isConstant()) {
             long offsetValue = offset.asJavaConstant().asLong();
-            return ConstantLocationNode.create(locationIdentity, offsetValue, offset.graph());
+            return offset.graph().unique(new ConstantLocationNode(locationIdentity, offsetValue));
         }
 
         long displacement = 0;
@@ -678,14 +678,14 @@
         }
         if (signExtend) {
             // If we were using sign extended values before restore the sign extension.
-            offset = offset.graph().addOrUnique(SignExtendNode.create(offset, 64));
+            offset = offset.graph().addOrUnique(new SignExtendNode(offset, 64));
         }
-        return IndexedLocationNode.create(locationIdentity, displacement, offset, offset.graph(), indexScaling);
+        return offset.graph().unique(new IndexedLocationNode(locationIdentity, displacement, offset, indexScaling));
     }
 
     public IndexedLocationNode createArrayLocation(Graph graph, Kind elementKind, ValueNode index, boolean initialization) {
         LocationIdentity loc = initialization ? initLocationIdentity() : NamedLocationIdentity.getArrayLocation(elementKind);
-        return IndexedLocationNode.create(loc, arrayBaseOffset(elementKind), index, graph, arrayScalingFactor(elementKind));
+        return graph.unique(new IndexedLocationNode(loc, arrayBaseOffset(elementKind), index, arrayScalingFactor(elementKind)));
     }
 
     protected GuardingNode createBoundsCheck(AccessIndexedNode n, LoweringTool tool) {
@@ -694,7 +694,7 @@
         ValueNode arrayLength = readArrayLength(array, tool.getConstantReflection());
         if (arrayLength == null) {
             Stamp stamp = StampFactory.positiveInt();
-            ReadNode readArrayLength = graph.add(ReadNode.create(array, ConstantLocationNode.create(ARRAY_LENGTH_LOCATION, arrayLengthOffset(), graph), stamp, BarrierType.NONE));
+            ReadNode readArrayLength = graph.add(new ReadNode(array, graph.unique(new ConstantLocationNode(ARRAY_LENGTH_LOCATION, arrayLengthOffset())), stamp, BarrierType.NONE));
             graph.addBeforeFixed(n, readArrayLength);
             readArrayLength.setGuard(createNullCheck(array, readArrayLength, tool));
             arrayLength = readArrayLength;
@@ -711,14 +711,14 @@
             }
         }
 
-        return tool.createGuard(n, graph.unique(IntegerBelowNode.create(n.index(), arrayLength)), BoundsCheckException, InvalidateReprofile);
+        return tool.createGuard(n, graph.unique(new IntegerBelowNode(n.index(), arrayLength)), BoundsCheckException, InvalidateReprofile);
     }
 
     protected GuardingNode createNullCheck(ValueNode object, FixedNode before, LoweringTool tool) {
         if (StampTool.isPointerNonNull(object)) {
             return null;
         }
-        return tool.createGuard(before, before.graph().unique(IsNullNode.create(object)), DeoptimizationReason.NullCheckException, DeoptimizationAction.InvalidateReprofile, true);
+        return tool.createGuard(before, before.graph().unique(new IsNullNode(object)), DeoptimizationReason.NullCheckException, DeoptimizationAction.InvalidateReprofile, true);
     }
 
     @Override
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraphKit.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/GraphKit.java	Mon Jan 12 20:39:04 2015 +0100
@@ -131,7 +131,7 @@
         JavaType returnType = signature.getReturnType(null);
         assert checkArgs(method, args);
         MethodCallTargetNode callTarget = graph.add(createMethodCallTarget(invokeKind, method, args, returnType, bci));
-        InvokeNode invoke = append(InvokeNode.create(callTarget, bci));
+        InvokeNode invoke = append(new InvokeNode(callTarget, bci));
 
         if (frameStateBuilder != null) {
             if (invoke.getKind() != Kind.Void) {
@@ -146,7 +146,7 @@
     }
 
     protected MethodCallTargetNode createMethodCallTarget(InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] args, JavaType returnType, @SuppressWarnings("unused") int bci) {
-        return MethodCallTargetNode.create(invokeKind, targetMethod, args, returnType);
+        return new MethodCallTargetNode(invokeKind, targetMethod, args, returnType);
     }
 
     /**
@@ -246,9 +246,9 @@
      * @param trueProbability The estimated probability the the condition is true
      */
     public void startIf(LogicNode condition, double trueProbability) {
-        BeginNode thenSuccessor = graph.add(BeginNode.create());
-        BeginNode elseSuccessor = graph.add(BeginNode.create());
-        append(IfNode.create(condition, thenSuccessor, elseSuccessor, trueProbability));
+        BeginNode thenSuccessor = graph.add(new BeginNode());
+        BeginNode elseSuccessor = graph.add(new BeginNode());
+        append(new IfNode(condition, thenSuccessor, elseSuccessor, trueProbability));
         lastFixedNode = null;
 
         IfStructure s = new IfStructure();
@@ -298,12 +298,12 @@
 
         if (thenPart != null && elsePart != null) {
             /* Both parts are alive, we need a real merge. */
-            EndNode thenEnd = graph.add(EndNode.create());
+            EndNode thenEnd = graph.add(new EndNode());
             graph.addAfterFixed(thenPart, thenEnd);
-            EndNode elseEnd = graph.add(EndNode.create());
+            EndNode elseEnd = graph.add(new EndNode());
             graph.addAfterFixed(elsePart, elseEnd);
 
-            MergeNode merge = graph.add(MergeNode.create());
+            MergeNode merge = graph.add(new MergeNode());
             merge.addForwardEnd(thenEnd);
             merge.addForwardEnd(elseEnd);
 
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/InstanceOfSnippetsTemplates.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/InstanceOfSnippetsTemplates.java	Mon Jan 12 20:39:04 2015 +0100
@@ -160,7 +160,7 @@
                 // Can simply use the phi result if the same materialized values are expected.
                 return result;
             } else {
-                return graph.unique(ConditionalNode.create(asCondition(trueValue), t, f));
+                return graph.unique(new ConditionalNode(asCondition(trueValue), t, f));
             }
         }
     }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPhase.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPhase.java	Mon Jan 12 20:39:04 2015 +0100
@@ -85,15 +85,15 @@
 
             ResolvedJavaType[] parameterTypes = resolveJavaTypes(target.toParameterTypes(), declaringClass);
 
-            // Prepare the arguments for the reflective factory method call on the node class.
-            Object[] nodeFactoryArguments = prepareArguments(methodCallTargetNode, parameterTypes, target, false);
-            if (nodeFactoryArguments == null) {
+            // Prepare the arguments for the reflective constructor call on the node class.
+            Object[] nodeConstructorArguments = prepareArguments(methodCallTargetNode, parameterTypes, target, false);
+            if (nodeConstructorArguments == null) {
                 return false;
             }
 
             // Create the new node instance.
             ResolvedJavaType c = getNodeClass(target, intrinsic);
-            Node newInstance = createNodeInstance(graph, c, parameterTypes, methodCallTargetNode.invoke().asNode().stamp(), intrinsic.setStampFromReturnType(), nodeFactoryArguments);
+            Node newInstance = createNodeInstance(graph, c, parameterTypes, methodCallTargetNode.invoke().asNode().stamp(), intrinsic.setStampFromReturnType(), nodeConstructorArguments);
 
             // Replace the invoke with the new node.
             newInstance = graph.addOrUnique(newInstance);
@@ -150,7 +150,7 @@
 
     /**
      * Converts the arguments of an invoke node to object values suitable for use as the arguments
-     * to a reflective invocation of a Java method.
+     * to a reflective invocation of a Java constructor or method.
      *
      * @param folding specifies if the invocation is for handling a {@link Fold} annotation
      * @return the arguments for the reflective invocation or null if an argument of {@code invoke}
@@ -220,38 +220,35 @@
     }
 
     protected Node createNodeInstance(StructuredGraph graph, ResolvedJavaType nodeClass, ResolvedJavaType[] parameterTypes, Stamp invokeStamp, boolean setStampFromReturnType,
-                    Object[] nodeFactoryArguments) {
-        ResolvedJavaMethod factory = null;
+                    Object[] nodeConstructorArguments) {
+        ResolvedJavaMethod constructor = null;
         Object[] arguments = null;
 
-        for (ResolvedJavaMethod m : nodeClass.getDeclaredMethods()) {
-            if (m.getName().equals("create") && !m.isSynthetic()) {
-                Object[] match = match(graph, invokeStamp, m, parameterTypes, nodeFactoryArguments);
+        for (ResolvedJavaMethod c : nodeClass.getDeclaredConstructors()) {
+            Object[] match = match(graph, invokeStamp, c, parameterTypes, nodeConstructorArguments);
 
-                if (match != null) {
-                    if (factory == null) {
-                        factory = m;
-                        arguments = match;
-                    } else {
-                        throw new GraalInternalError("Found multiple factory methods in %s compatible with signature %s: %s, %s", nodeClass.toJavaName(), sigString(parameterTypes),
-                                        factory.format("%n(%p)%r"), m.format("%n(%p)%r"));
-                    }
+            if (match != null) {
+                if (constructor == null) {
+                    constructor = c;
+                    arguments = match;
+                } else {
+                    throw new GraalInternalError("Found multiple constructors in %s compatible with signature %s: %s, %s", nodeClass.toJavaName(), sigString(parameterTypes), constructor, c);
                 }
             }
         }
-        if (factory == null) {
-            throw new GraalInternalError("Could not find factory method in %s compatible with signature %s", nodeClass.toJavaName(), sigString(parameterTypes));
+        if (constructor == null) {
+            throw new GraalInternalError("Could not find constructor in %s compatible with signature %s", nodeClass.toJavaName(), sigString(parameterTypes));
         }
 
         try {
-            ValueNode intrinsicNode = (ValueNode) snippetReflection.invoke(factory, null, arguments);
+            ValueNode intrinsicNode = (ValueNode) snippetReflection.invoke(constructor, null, arguments);
 
             if (setStampFromReturnType) {
                 intrinsicNode.setStamp(invokeStamp);
             }
             return intrinsicNode;
         } catch (Exception e) {
-            throw new RuntimeException(factory + Arrays.toString(nodeFactoryArguments), e);
+            throw new RuntimeException(constructor + Arrays.toString(nodeConstructorArguments), e);
         }
     }
 
@@ -277,14 +274,14 @@
         return true;
     }
 
-    private Object[] match(StructuredGraph graph, Stamp invokeStamp, ResolvedJavaMethod m, ResolvedJavaType[] parameterTypes, Object[] nodeFactoryArguments) {
+    private Object[] match(StructuredGraph graph, Stamp invokeStamp, ResolvedJavaMethod c, ResolvedJavaType[] parameterTypes, Object[] nodeConstructorArguments) {
         Object[] arguments = null;
         Object[] injected = null;
 
-        ResolvedJavaType[] signature = resolveJavaTypes(m.getSignature().toParameterTypes(null), m.getDeclaringClass());
+        ResolvedJavaType[] signature = resolveJavaTypes(c.getSignature().toParameterTypes(null), c.getDeclaringClass());
         MetaAccessProvider metaAccess = providers.getMetaAccess();
         for (int i = 0; i < signature.length; i++) {
-            if (m.getParameterAnnotation(InjectedNodeParameter.class, i) != null) {
+            if (c.getParameterAnnotation(InjectedNodeParameter.class, i) != null) {
                 injected = injected == null ? new Object[1] : Arrays.copyOf(injected, injected.length + 1);
                 Object injectedParameter = snippetReflection.getInjectedNodeIntrinsicParameter(signature[i]);
                 if (injectedParameter != null) {
@@ -302,24 +299,24 @@
                 } else if (signature[i].isAssignableFrom(metaAccess.lookupJavaType(StampProvider.class))) {
                     injected[injected.length - 1] = providers.getStampProvider();
                 } else {
-                    throw new GraalInternalError("Cannot handle injected argument of type %s in %s", signature[i].toJavaName(), m.format("%H.%n(%p)"));
+                    throw new GraalInternalError("Cannot handle injected argument of type %s in %s", signature[i].toJavaName(), c.format("%H.%n(%p)"));
                 }
             } else {
                 if (i > 0) {
                     // Chop injected arguments from signature
                     signature = Arrays.copyOfRange(signature, i, signature.length);
                 }
-                assert checkNoMoreInjected(m, i);
+                assert checkNoMoreInjected(c, i);
                 break;
             }
         }
 
         if (Arrays.equals(parameterTypes, signature)) {
             // Exact match
-            arguments = nodeFactoryArguments;
+            arguments = nodeConstructorArguments;
 
         } else if (signature.length > 0 && signature[signature.length - 1].isArray()) {
-            // Last parameter is an array, so check if we have a vararg match
+            // Last constructor parameter is an array, so check if we have a vararg match
             int fixedArgs = signature.length - 1;
             if (parameterTypes.length < fixedArgs) {
                 return null;
@@ -332,20 +329,20 @@
 
             ResolvedJavaType componentType = signature[fixedArgs].getComponentType();
             assert componentType != null;
-            for (int i = fixedArgs; i < nodeFactoryArguments.length; i++) {
+            for (int i = fixedArgs; i < nodeConstructorArguments.length; i++) {
                 if (!parameterTypes[i].equals(componentType)) {
                     return null;
                 }
             }
-            arguments = Arrays.copyOf(nodeFactoryArguments, fixedArgs + 1);
-            arguments[fixedArgs] = snippetReflection.newArray(componentType, nodeFactoryArguments.length - fixedArgs);
+            arguments = Arrays.copyOf(nodeConstructorArguments, fixedArgs + 1);
+            arguments[fixedArgs] = snippetReflection.newArray(componentType, nodeConstructorArguments.length - fixedArgs);
 
             Object varargs = arguments[fixedArgs];
-            for (int i = fixedArgs; i < nodeFactoryArguments.length; i++) {
+            for (int i = fixedArgs; i < nodeConstructorArguments.length; i++) {
                 if (componentType.isPrimitive()) {
-                    Array.set(varargs, i - fixedArgs, nodeFactoryArguments[i]);
+                    Array.set(varargs, i - fixedArgs, nodeConstructorArguments[i]);
                 } else {
-                    ((Object[]) varargs)[i - fixedArgs] = nodeFactoryArguments[i];
+                    ((Object[]) varargs)[i - fixedArgs] = nodeConstructorArguments[i];
                 }
             }
         } else {
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/ReplacementsImpl.java	Mon Jan 12 20:39:04 2015 +0100
@@ -588,7 +588,7 @@
                 MetaAccessProvider metaAccess = replacements.providers.getMetaAccess();
 
                 if (MethodsElidedInSnippets != null && methodToParse.getSignature().getReturnKind() == Kind.Void && MethodFilter.matches(MethodsElidedInSnippets, methodToParse)) {
-                    graph.addAfterFixed(graph.start(), graph.add(ReturnNode.create(null)));
+                    graph.addAfterFixed(graph.start(), graph.add(new ReturnNode(null)));
                 } else {
                     createGraphBuilder(metaAccess, GraphBuilderConfiguration.getSnippetDefault(), OptimisticOptimizations.NONE).apply(graph);
                 }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java	Mon Jan 12 20:39:04 2015 +0100
@@ -395,11 +395,7 @@
 
         protected final Varargs varargs;
 
-        public static VarargsPlaceholderNode create(Varargs varargs, MetaAccessProvider metaAccess) {
-            return new VarargsPlaceholderNode(varargs, metaAccess);
-        }
-
-        protected VarargsPlaceholderNode(Varargs varargs, MetaAccessProvider metaAccess) {
+        public VarargsPlaceholderNode(Varargs varargs, MetaAccessProvider metaAccess) {
             super(StampFactory.exactNonNull(metaAccess.lookupJavaType(varargs.componentType).getArrayClass()));
             this.varargs = varargs;
         }
@@ -597,7 +593,7 @@
                 nodeReplacements.put(snippetGraph.getParameter(i), constantNode);
             } else if (args.info.isVarargsParameter(i)) {
                 Varargs varargs = (Varargs) args.values[i];
-                VarargsPlaceholderNode placeholder = snippetCopy.unique(VarargsPlaceholderNode.create(varargs, providers.getMetaAccess()));
+                VarargsPlaceholderNode placeholder = snippetCopy.unique(new VarargsPlaceholderNode(varargs, providers.getMetaAccess()));
                 nodeReplacements.put(snippetGraph.getParameter(i), placeholder);
                 placeholders[i] = placeholder;
             }
@@ -625,7 +621,7 @@
                     assert parameterCount < 10000;
                     int idx = (i + 1) * 10000 + j;
                     assert idx >= parameterCount : "collision in parameter numbering";
-                    ParameterNode local = snippetCopy.unique(ParameterNode.create(idx, stamp));
+                    ParameterNode local = snippetCopy.unique(new ParameterNode(idx, stamp));
                     params[j] = local;
                 }
                 parameters[i] = params;
@@ -636,7 +632,7 @@
                     if (usage instanceof LoadIndexedNode) {
                         LoadIndexedNode loadIndexed = (LoadIndexedNode) usage;
                         Debug.dump(snippetCopy, "Before replacing %s", loadIndexed);
-                        LoadSnippetVarargParameterNode loadSnippetParameter = snippetCopy.add(LoadSnippetVarargParameterNode.create(params, loadIndexed.index(), loadIndexed.stamp()));
+                        LoadSnippetVarargParameterNode loadSnippetParameter = snippetCopy.add(new LoadSnippetVarargParameterNode(params, loadIndexed.index(), loadIndexed.stamp()));
                         snippetCopy.replaceFixedWithFixed(loadIndexed, loadSnippetParameter);
                         Debug.dump(snippetCopy, "After replacing %s", loadIndexed);
                     } else if (usage instanceof StoreIndexedNode) {
@@ -722,7 +718,7 @@
 
         new FloatingReadPhase(false, true, false).apply(snippetCopy);
 
-        MemoryAnchorNode memoryAnchor = snippetCopy.add(MemoryAnchorNode.create());
+        MemoryAnchorNode memoryAnchor = snippetCopy.add(new MemoryAnchorNode());
         snippetCopy.start().replaceAtUsages(InputType.Memory, memoryAnchor);
 
         this.snippet = snippetCopy;
@@ -741,12 +737,12 @@
         } else if (returnNodes.size() == 1) {
             this.returnNode = returnNodes.get(0);
         } else {
-            MergeNode merge = snippet.add(MergeNode.create());
+            MergeNode merge = snippet.add(new MergeNode());
             List<MemoryMapNode> memMaps = returnNodes.stream().map(n -> n.getMemoryMap()).collect(Collectors.toList());
             ValueNode returnValue = InliningUtil.mergeReturns(merge, returnNodes, null);
-            this.returnNode = snippet.add(ReturnNode.create(returnValue));
+            this.returnNode = snippet.add(new ReturnNode(returnValue));
             MemoryMapImpl mmap = FloatingReadPhase.mergeMemoryMaps(merge, memMaps, false);
-            MemoryMapNode memoryMap = snippet.unique(MemoryMapNode.create(mmap.getMap()));
+            MemoryMapNode memoryMap = snippet.unique(new MemoryMapNode(mmap.getMap()));
             this.returnNode.setMemoryMap(memoryMap);
             for (MemoryMapNode mm : memMaps) {
                 if (mm != memoryMap && mm.isAlive()) {
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ArrayEqualsNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -50,18 +50,12 @@
     /** Length of both arrays. */
     @Input ValueNode length;
 
-    public static ArrayEqualsNode create(ValueNode array1, ValueNode array2, ValueNode length) {
-        return new ArrayEqualsNode(array1, array2, length);
-    }
-
-    protected ArrayEqualsNode(ValueNode array1, ValueNode array2, ValueNode length) {
+    public ArrayEqualsNode(ValueNode array1, ValueNode array2, ValueNode length) {
         super(StampFactory.forKind(Kind.Boolean));
-
         assert array1.stamp().equals(array2.stamp());
         ObjectStamp array1Stamp = (ObjectStamp) array1.stamp();
         ResolvedJavaType componentType = array1Stamp.type().getComponentType();
         this.kind = componentType.getKind();
-
         this.array1 = array1;
         this.array2 = array2;
         this.length = length;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/AssertionNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/AssertionNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -43,11 +43,7 @@
     protected final boolean compileTimeAssertion;
     protected final String message;
 
-    public static AssertionNode create(boolean compileTimeAssertion, ValueNode value, String message) {
-        return new AssertionNode(compileTimeAssertion, value, message);
-    }
-
-    protected AssertionNode(boolean compileTimeAssertion, ValueNode value, String message) {
+    public AssertionNode(boolean compileTimeAssertion, ValueNode value, String message) {
         super(StampFactory.forVoid());
         this.value = value;
         this.compileTimeAssertion = compileTimeAssertion;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BasicArrayCopyNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BasicArrayCopyNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -33,11 +33,7 @@
 @NodeInfo
 public class BasicArrayCopyNode extends MacroStateSplitNode implements Virtualizable {
 
-    public static BasicArrayCopyNode create(Invoke invoke) {
-        return new BasicArrayCopyNode(invoke);
-    }
-
-    protected BasicArrayCopyNode(Invoke invoke) {
+    public BasicArrayCopyNode(Invoke invoke) {
         super(invoke);
     }
 
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BasicObjectCloneNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BasicObjectCloneNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -37,11 +37,7 @@
 @NodeInfo
 public class BasicObjectCloneNode extends MacroStateSplitNode implements VirtualizableAllocation, ArrayLengthProvider {
 
-    public static BasicObjectCloneNode create(Invoke invoke) {
-        return new BasicObjectCloneNode(invoke);
-    }
-
-    protected BasicObjectCloneNode(Invoke invoke) {
+    public BasicObjectCloneNode(Invoke invoke) {
         super(invoke);
     }
 
@@ -117,7 +113,7 @@
                 ValueNode[] state = new ValueNode[fields.length];
                 final LoadFieldNode[] loads = new LoadFieldNode[fields.length];
                 for (int i = 0; i < fields.length; i++) {
-                    state[i] = loads[i] = LoadFieldNode.create(obj, fields[i]);
+                    state[i] = loads[i] = new LoadFieldNode(obj, fields[i]);
                     tool.addNode(loads[i]);
                 }
                 tool.createVirtualObject(newVirtual, state, Collections.<MonitorIdNode> emptyList());
@@ -127,7 +123,7 @@
     }
 
     protected VirtualInstanceNode createVirtualInstanceNode(ResolvedJavaType type, boolean hasIdentity) {
-        return VirtualInstanceNode.create(type, hasIdentity);
+        return new VirtualInstanceNode(type, hasIdentity);
     }
 
     @Override
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitCountNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitCountNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -34,11 +34,7 @@
 @NodeInfo
 public class BitCountNode extends UnaryNode implements LIRLowerable {
 
-    public static BitCountNode create(ValueNode value) {
-        return new BitCountNode(value);
-    }
-
-    protected BitCountNode(ValueNode value) {
+    public BitCountNode(ValueNode value) {
         super(StampFactory.forInteger(Kind.Int, 0, ((PrimitiveStamp) value.stamp()).getBits()), value);
         assert value.getKind() == Kind.Int || value.getKind() == Kind.Long;
     }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitScanForwardNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitScanForwardNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
 @NodeInfo
 public class BitScanForwardNode extends UnaryNode implements LIRLowerable {
 
-    public static BitScanForwardNode create(ValueNode value) {
-        return new BitScanForwardNode(value);
-    }
-
-    protected BitScanForwardNode(ValueNode value) {
+    public BitScanForwardNode(ValueNode value) {
         super(StampFactory.forInteger(Kind.Int, 0, ((PrimitiveStamp) value.stamp()).getBits()), value);
         assert value.getKind() == Kind.Int || value.getKind() == Kind.Long;
     }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitScanReverseNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitScanReverseNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
 @NodeInfo
 public class BitScanReverseNode extends UnaryNode implements LIRLowerable {
 
-    public static BitScanReverseNode create(ValueNode value) {
-        return new BitScanReverseNode(value);
-    }
-
-    protected BitScanReverseNode(ValueNode value) {
+    public BitScanReverseNode(ValueNode value) {
         super(StampFactory.forInteger(Kind.Int, 0, ((PrimitiveStamp) value.stamp()).getBits()), value);
         assert value.getKind() == Kind.Int || value.getKind() == Kind.Long;
     }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DeferredPiNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DeferredPiNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -48,11 +48,7 @@
         return object;
     }
 
-    public static DeferredPiNode create(ValueNode type, ValueNode object) {
-        return new DeferredPiNode(type, object);
-    }
-
-    protected DeferredPiNode(ValueNode type, ValueNode object) {
+    public DeferredPiNode(ValueNode type, ValueNode object) {
         super(StampFactory.object());
         this.type = type;
         this.object = object;
@@ -63,7 +59,7 @@
         if (type.isConstant()) {
             ResolvedJavaType javaType = tool.getConstantReflection().asJavaType(type.asConstant());
             ObjectStamp objectStamp = (ObjectStamp) stamp();
-            return PiNode.create(object, javaType, objectStamp.isExactType(), objectStamp.nonNull());
+            return new PiNode(object, javaType, objectStamp.isExactType(), objectStamp.nonNull());
         }
         return this;
     }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectObjectStoreNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectObjectStoreNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -44,11 +44,7 @@
     protected final LocationIdentity locationIdentity;
     protected final Kind storeKind;
 
-    public static DirectObjectStoreNode create(ValueNode object, int displacement, ValueNode offset, ValueNode value, LocationIdentity locationIdentity, Kind storeKind) {
-        return new DirectObjectStoreNode(object, displacement, offset, value, locationIdentity, storeKind);
-    }
-
-    protected DirectObjectStoreNode(ValueNode object, int displacement, ValueNode offset, ValueNode value, LocationIdentity locationIdentity, Kind storeKind) {
+    public DirectObjectStoreNode(ValueNode object, int displacement, ValueNode offset, ValueNode value, LocationIdentity locationIdentity, Kind storeKind) {
         super(StampFactory.forVoid());
         this.object = object;
         this.value = value;
@@ -68,8 +64,8 @@
 
     @Override
     public void lower(LoweringTool tool) {
-        IndexedLocationNode location = IndexedLocationNode.create(locationIdentity, displacement, offset, graph(), 1);
-        JavaWriteNode write = graph().add(JavaWriteNode.create(storeKind, object, value, location, BarrierType.NONE, storeKind == Kind.Object, false));
+        IndexedLocationNode location = graph().unique(new IndexedLocationNode(locationIdentity, displacement, offset, 1));
+        JavaWriteNode write = graph().add(new JavaWriteNode(storeKind, object, value, location, BarrierType.NONE, storeKind == Kind.Object, false));
         graph().replaceFixedWithFixed(this, write);
 
         tool.getLowerer().lower(write, tool);
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectReadNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectReadNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -41,11 +41,7 @@
     @Input protected ValueNode address;
     protected final Kind readKind;
 
-    public static DirectReadNode create(ValueNode address, Kind readKind) {
-        return new DirectReadNode(address, readKind);
-    }
-
-    protected DirectReadNode(ValueNode address, Kind readKind) {
+    public DirectReadNode(ValueNode address, Kind readKind) {
         super(StampFactory.forKind(readKind.getStackKind()));
         this.address = address;
         this.readKind = readKind;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectStoreNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/DirectStoreNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -42,11 +42,7 @@
     @Input protected ValueNode value;
     protected final Kind kind;
 
-    public static DirectStoreNode create(ValueNode address, ValueNode value, Kind kind) {
-        return new DirectStoreNode(address, value, kind);
-    }
-
-    protected DirectStoreNode(ValueNode address, ValueNode value, Kind kind) {
+    public DirectStoreNode(ValueNode address, ValueNode value, Kind kind) {
         super(StampFactory.forVoid());
         this.address = address;
         this.value = value;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ExplodeLoopNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ExplodeLoopNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -39,11 +39,7 @@
 @NodeInfo
 public class ExplodeLoopNode extends FixedWithNextNode {
 
-    public static ExplodeLoopNode create() {
-        return new ExplodeLoopNode();
-    }
-
-    protected ExplodeLoopNode() {
+    public ExplodeLoopNode() {
         super(StampFactory.forVoid());
     }
 
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/LoadSnippetVarargParameterNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/LoadSnippetVarargParameterNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -39,11 +39,7 @@
 
     @Input NodeInputList<ParameterNode> parameters;
 
-    public static LoadSnippetVarargParameterNode create(ParameterNode[] locals, ValueNode index, Stamp stamp) {
-        return new LoadSnippetVarargParameterNode(locals, index, stamp);
-    }
-
-    protected LoadSnippetVarargParameterNode(ParameterNode[] locals, ValueNode index, Stamp stamp) {
+    public LoadSnippetVarargParameterNode(ParameterNode[] locals, ValueNode index, Stamp stamp) {
         super(stamp);
         this.index = index;
         this.parameters = new NodeInputList<>(this, locals);
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -66,11 +66,7 @@
     protected final JavaType returnType;
     protected final InvokeKind invokeKind;
 
-    public static MacroNode create(Invoke invoke) {
-        return new MacroNode(invoke);
-    }
-
-    protected MacroNode(Invoke invoke) {
+    public MacroNode(Invoke invoke) {
         super(StampFactory.forKind(((MethodCallTargetNode) invoke.callTarget()).targetMethod().getSignature().getReturnKind()));
         MethodCallTargetNode methodCallTarget = (MethodCallTargetNode) invoke.callTarget();
         this.arguments = new NodeInputList<>(this, methodCallTarget.arguments());
@@ -188,8 +184,8 @@
     }
 
     protected InvokeNode createInvoke() {
-        MethodCallTargetNode callTarget = graph().add(MethodCallTargetNode.create(invokeKind, targetMethod, arguments.toArray(new ValueNode[arguments.size()]), returnType));
-        InvokeNode invoke = graph().add(InvokeNode.create(callTarget, bci));
+        MethodCallTargetNode callTarget = graph().add(new MethodCallTargetNode(invokeKind, targetMethod, arguments.toArray(new ValueNode[arguments.size()]), returnType));
+        InvokeNode invoke = graph().add(new InvokeNode(callTarget, bci));
         if (stateAfter() != null) {
             invoke.setStateAfter(stateAfter().duplicate());
             if (getKind() != Kind.Void) {
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroStateSplitNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MacroStateSplitNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -39,11 +39,7 @@
 
     @OptionalInput(InputType.State) protected FrameState stateAfter;
 
-    public static MacroStateSplitNode create(Invoke invoke) {
-        return new MacroStateSplitNode(invoke);
-    }
-
-    protected MacroStateSplitNode(Invoke invoke) {
+    public MacroStateSplitNode(Invoke invoke) {
         super(invoke);
         this.stateAfter = invoke.stateAfter();
     }
@@ -75,7 +71,7 @@
             }
             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()));
+            InvokeNode newInvoke = snippetGraph.add(new InvokeNode(invoke.callTarget(), getBci()));
             newInvoke.setStateAfter(invoke.stateAfter());
             snippetGraph.replaceFixedWithFixed((InvokeNode) invoke.asNode(), newInvoke);
         }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MathIntrinsicNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MathIntrinsicNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -49,11 +49,7 @@
         return operation;
     }
 
-    public static MathIntrinsicNode create(ValueNode value, Operation op) {
-        return new MathIntrinsicNode(value, op);
-    }
-
-    protected MathIntrinsicNode(ValueNode value, Operation op) {
+    public MathIntrinsicNode(ValueNode value, Operation op) {
         super(StampFactory.forKind(Kind.Double), value);
         assert value.stamp() instanceof FloatStamp && PrimitiveStamp.getBits(value.stamp()) == 64;
         this.operation = op;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MemoryAnchorNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MemoryAnchorNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -33,11 +33,7 @@
 @NodeInfo(allowedUsageTypes = {InputType.Memory})
 public class MemoryAnchorNode extends FixedWithNextNode implements LIRLowerable, MemoryNode, Canonicalizable {
 
-    public static MemoryAnchorNode create() {
-        return new MemoryAnchorNode();
-    }
-
-    protected MemoryAnchorNode() {
+    public MemoryAnchorNode() {
         super(StampFactory.forVoid());
     }
 
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReadRegisterNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReadRegisterNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -53,11 +53,7 @@
      */
     protected final boolean incoming;
 
-    public static ReadRegisterNode create(Register register, Kind kind, boolean directUse, boolean incoming) {
-        return new ReadRegisterNode(register, kind, directUse, incoming);
-    }
-
-    protected ReadRegisterNode(Register register, Kind kind, boolean directUse, boolean incoming) {
+    public ReadRegisterNode(Register register, Kind kind, boolean directUse, boolean incoming) {
         super(StampFactory.forKind(kind));
         assert register != null;
         this.register = register;
@@ -65,15 +61,7 @@
         this.incoming = incoming;
     }
 
-    /**
-     * Constructor to be used by node intrinsics where the stamp is inferred from the intrinsic
-     * definition.
-     */
-    public static ReadRegisterNode create(Register register, boolean directUse, boolean incoming) {
-        return new ReadRegisterNode(register, directUse, incoming);
-    }
-
-    protected ReadRegisterNode(Register register, boolean directUse, boolean incoming) {
+    public ReadRegisterNode(Register register, boolean directUse, boolean incoming) {
         super(StampFactory.forNodeIntrinsic());
         assert register != null;
         this.register = register;
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReverseBytesNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/ReverseBytesNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -34,11 +34,7 @@
 @NodeInfo
 public class ReverseBytesNode extends UnaryNode implements LIRLowerable {
 
-    public static ReverseBytesNode create(ValueNode value) {
-        return new ReverseBytesNode(value);
-    }
-
-    protected ReverseBytesNode(ValueNode value) {
+    public ReverseBytesNode(ValueNode value) {
         super(StampFactory.forKind(value.getKind()), value);
         assert getKind() == Kind.Int || getKind() == Kind.Long;
     }
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/WriteRegisterNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/WriteRegisterNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -45,11 +45,7 @@
      */
     @Input ValueNode value;
 
-    public static WriteRegisterNode create(Register register, ValueNode value) {
-        return new WriteRegisterNode(register, value);
-    }
-
-    protected WriteRegisterNode(Register register, ValueNode value) {
+    public WriteRegisterNode(Register register, ValueNode value) {
         super(StampFactory.forVoid());
         this.register = register;
         this.value = value;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java	Mon Jan 12 20:39:04 2015 +0100
@@ -329,8 +329,8 @@
                     ValueNode length = GraphUtil.arrayLength(arg);
                     if (length != null && length.isConstant()) {
                         param.usages().snapshotTo(modifiedNodes);
-                        ParameterNode newParam = graphCopy.addWithoutUnique(ParameterNode.create(param.index(), param.stamp()));
-                        param.replaceAndDelete(graphCopy.addWithoutUnique(PiArrayNode.create(newParam, ConstantNode.forInt(length.asJavaConstant().asInt(), graphCopy), param.stamp())));
+                        ParameterNode newParam = graphCopy.addWithoutUnique(new ParameterNode(param.index(), param.stamp()));
+                        param.replaceAndDelete(graphCopy.addWithoutUnique(new PiArrayNode(newParam, ConstantNode.forInt(length.asJavaConstant().asInt(), graphCopy), param.stamp())));
                     }
                 }
             }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCacheImpl.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCacheImpl.java	Mon Jan 12 20:39:04 2015 +0100
@@ -319,7 +319,7 @@
             boolean removeAllocation = runtimeExceptionClass.isAssignableFrom(declaringClass) || errorClass.isAssignableFrom(declaringClass);
             boolean isControlFlowException = controlFlowExceptionClass.isAssignableFrom(exceptionType);
             if (removeAllocation && !isControlFlowException) {
-                DeoptimizeNode deoptNode = methodCallTargetNode.graph().add(DeoptimizeNode.create(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.UnreachedCode));
+                DeoptimizeNode deoptNode = methodCallTargetNode.graph().add(new DeoptimizeNode(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.UnreachedCode));
                 FixedNode invokeNode = methodCallTargetNode.invoke().asNode();
                 invokeNode.replaceAtPredecessor(deoptNode);
                 GraphUtil.killCFG(invokeNode);
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/AssumptionNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/AssumptionNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -37,11 +37,7 @@
 @NodeInfo
 public class AssumptionNode extends MacroNode implements com.oracle.graal.graph.IterableNodeType, Simplifiable {
 
-    public static AssumptionNode create(Invoke invoke) {
-        return new AssumptionNode(invoke);
-    }
-
-    protected AssumptionNode(Invoke invoke) {
+    public AssumptionNode(Invoke invoke) {
         super(invoke);
         assert super.arguments.size() == 1;
     }
@@ -84,7 +80,7 @@
                     graph.replaceFixedWithFloating(this, ConstantNode.forBoolean(false, graph()));
                 } else {
                     tool.deleteBranch(this.next());
-                    this.replaceAndDelete(graph.add(DeoptimizeNode.create(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.None)));
+                    this.replaceAndDelete(graph.add(new DeoptimizeNode(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.None)));
                 }
             }
         }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/BailoutNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/BailoutNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -33,11 +33,7 @@
 @NodeInfo
 public class BailoutNode extends MacroNode implements Canonicalizable {
 
-    public static BailoutNode create(Invoke invoke) {
-        return new BailoutNode(invoke);
-    }
-
-    protected BailoutNode(Invoke invoke) {
+    public BailoutNode(Invoke invoke) {
         super(invoke);
         assert arguments.size() == 1;
     }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/IsCompilationConstantNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/IsCompilationConstantNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -33,11 +33,7 @@
 @NodeInfo
 public class IsCompilationConstantNode extends MacroStateSplitNode implements Canonicalizable {
 
-    public static IsCompilationConstantNode create(Invoke invoke) {
-        return new IsCompilationConstantNode(invoke);
-    }
-
-    protected IsCompilationConstantNode(Invoke invoke) {
+    public IsCompilationConstantNode(Invoke invoke) {
         super(invoke);
         assert arguments.size() == 1;
     }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerAddExactNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerAddExactNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
 @NodeInfo
 public class IntegerAddExactNode extends AddNode implements IntegerExactArithmeticNode {
 
-    public static IntegerAddExactNode create(ValueNode x, ValueNode y) {
-        return new IntegerAddExactNode(x, y);
-    }
-
-    protected IntegerAddExactNode(ValueNode x, ValueNode y) {
+    public IntegerAddExactNode(ValueNode x, ValueNode y) {
         super(x, y);
         assert x.stamp().isCompatible(y.stamp()) && x.stamp() instanceof IntegerStamp;
     }
@@ -56,7 +52,7 @@
     @Override
     public ValueNode canonical(CanonicalizerTool tool, ValueNode forX, ValueNode forY) {
         if (forX.isConstant() && !forY.isConstant()) {
-            return IntegerAddExactNode.create(forY, forX);
+            return new IntegerAddExactNode(forY, forX);
         }
         if (forX.isConstant()) {
             return canonicalXconstant(forX, forY);
@@ -88,7 +84,7 @@
 
     @Override
     public IntegerExactArithmeticSplitNode createSplit(BeginNode next, BeginNode deopt) {
-        return graph().add(IntegerAddExactSplitNode.create(stamp(), getX(), getY(), next, deopt));
+        return graph().add(new IntegerAddExactSplitNode(stamp(), getX(), getY(), next, deopt));
     }
 
     @Override
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerAddExactSplitNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerAddExactSplitNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -31,11 +31,7 @@
 @NodeInfo
 public class IntegerAddExactSplitNode extends IntegerExactArithmeticSplitNode {
 
-    public static IntegerAddExactSplitNode create(Stamp stamp, ValueNode x, ValueNode y, BeginNode next, BeginNode overflowSuccessor) {
-        return new IntegerAddExactSplitNode(stamp, x, y, next, overflowSuccessor);
-    }
-
-    protected IntegerAddExactSplitNode(Stamp stamp, ValueNode x, ValueNode y, BeginNode next, BeginNode overflowSuccessor) {
+    public IntegerAddExactSplitNode(Stamp stamp, ValueNode x, ValueNode y, BeginNode next, BeginNode overflowSuccessor) {
         super(stamp, x, y, next, overflowSuccessor);
     }
 
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerExactArithmeticSplitNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerExactArithmeticSplitNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -80,8 +80,8 @@
             FixedWithNextNode previous = tool.lastFixedNode();
             FixedNode next = previous.next();
             previous.setNext(null);
-            DeoptimizeNode deopt = floatingNode.graph().add(DeoptimizeNode.create(DeoptimizationAction.InvalidateReprofile, DeoptimizationReason.ArithmeticException));
-            BeginNode normalBegin = floatingNode.graph().add(BeginNode.create());
+            DeoptimizeNode deopt = floatingNode.graph().add(new DeoptimizeNode(DeoptimizationAction.InvalidateReprofile, DeoptimizationReason.ArithmeticException));
+            BeginNode normalBegin = floatingNode.graph().add(new BeginNode());
             normalBegin.setNext(next);
             IntegerExactArithmeticSplitNode split = node.createSplit(normalBegin, BeginNode.begin(deopt));
             previous.setNext(split);
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerMulExactNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerMulExactNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -38,11 +38,7 @@
 @NodeInfo
 public class IntegerMulExactNode extends MulNode implements IntegerExactArithmeticNode {
 
-    public static IntegerMulExactNode create(ValueNode x, ValueNode y) {
-        return new IntegerMulExactNode(x, y);
-    }
-
-    protected IntegerMulExactNode(ValueNode x, ValueNode y) {
+    public IntegerMulExactNode(ValueNode x, ValueNode y) {
         super(x, y);
         assert x.stamp().isCompatible(y.stamp()) && x.stamp() instanceof IntegerStamp;
     }
@@ -50,7 +46,7 @@
     @Override
     public ValueNode canonical(CanonicalizerTool tool, ValueNode forX, ValueNode forY) {
         if (forX.isConstant() && !forY.isConstant()) {
-            return IntegerMulExactNode.create(forY, forX);
+            return new IntegerMulExactNode(forY, forX);
         }
         if (forX.isConstant()) {
             return canonicalXconstant(forX, forY);
@@ -85,7 +81,7 @@
 
     @Override
     public IntegerExactArithmeticSplitNode createSplit(BeginNode next, BeginNode deopt) {
-        return graph().add(IntegerMulExactSplitNode.create(stamp(), getX(), getY(), next, deopt));
+        return graph().add(new IntegerMulExactSplitNode(stamp(), getX(), getY(), next, deopt));
     }
 
     @Override
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerMulExactSplitNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerMulExactSplitNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -31,11 +31,7 @@
 @NodeInfo
 public class IntegerMulExactSplitNode extends IntegerExactArithmeticSplitNode {
 
-    public static IntegerMulExactSplitNode create(Stamp stamp, ValueNode x, ValueNode y, BeginNode next, BeginNode overflowSuccessor) {
-        return new IntegerMulExactSplitNode(stamp, x, y, next, overflowSuccessor);
-    }
-
-    protected IntegerMulExactSplitNode(Stamp stamp, ValueNode x, ValueNode y, BeginNode next, BeginNode overflowSuccessor) {
+    public IntegerMulExactSplitNode(Stamp stamp, ValueNode x, ValueNode y, BeginNode next, BeginNode overflowSuccessor) {
         super(stamp, x, y, next, overflowSuccessor);
     }
 
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerMulHighNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerMulHighNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -37,19 +37,11 @@
 @NodeInfo(shortName = "*H")
 public class IntegerMulHighNode extends BinaryNode implements ArithmeticLIRLowerable {
 
-    public static IntegerMulHighNode create(ValueNode x, ValueNode y) {
-        return new IntegerMulHighNode(x, y);
-    }
-
-    protected IntegerMulHighNode(ValueNode x, ValueNode y) {
+    public IntegerMulHighNode(ValueNode x, ValueNode y) {
         this((IntegerStamp) x.stamp().unrestricted(), x, y);
     }
 
-    public static IntegerMulHighNode create(IntegerStamp stamp, ValueNode x, ValueNode y) {
-        return new IntegerMulHighNode(stamp, x, y);
-    }
-
-    protected IntegerMulHighNode(IntegerStamp stamp, ValueNode x, ValueNode y) {
+    public IntegerMulHighNode(IntegerStamp stamp, ValueNode x, ValueNode y) {
         super(stamp, x, y);
     }
 
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerSubExactNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerSubExactNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -39,11 +39,7 @@
 @NodeInfo
 public class IntegerSubExactNode extends SubNode implements IntegerExactArithmeticNode {
 
-    public static IntegerSubExactNode create(ValueNode x, ValueNode y) {
-        return new IntegerSubExactNode(x, y);
-    }
-
-    protected IntegerSubExactNode(ValueNode x, ValueNode y) {
+    public IntegerSubExactNode(ValueNode x, ValueNode y) {
         super(x, y);
         assert x.stamp().isCompatible(y.stamp()) && x.stamp() instanceof IntegerStamp;
     }
@@ -89,7 +85,7 @@
 
     @Override
     public IntegerExactArithmeticSplitNode createSplit(BeginNode next, BeginNode deopt) {
-        return graph().add(IntegerSubExactSplitNode.create(stamp(), getX(), getY(), next, deopt));
+        return graph().add(new IntegerSubExactSplitNode(stamp(), getX(), getY(), next, deopt));
     }
 
     @Override
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerSubExactSplitNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/IntegerSubExactSplitNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -31,11 +31,7 @@
 @NodeInfo
 public class IntegerSubExactSplitNode extends IntegerExactArithmeticSplitNode {
 
-    public static IntegerSubExactSplitNode create(Stamp stamp, ValueNode x, ValueNode y, BeginNode next, BeginNode overflowSuccessor) {
-        return new IntegerSubExactSplitNode(stamp, x, y, next, overflowSuccessor);
-    }
-
-    protected IntegerSubExactSplitNode(Stamp stamp, ValueNode x, ValueNode y, BeginNode next, BeginNode overflowSuccessor) {
+    public IntegerSubExactSplitNode(Stamp stamp, ValueNode x, ValueNode y, BeginNode next, BeginNode overflowSuccessor) {
         super(stamp, x, y, next, overflowSuccessor);
     }
 
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/UnsignedMulHighNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/arithmetic/UnsignedMulHighNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -37,19 +37,11 @@
 @NodeInfo(shortName = "|*H|")
 public class UnsignedMulHighNode extends BinaryNode implements ArithmeticLIRLowerable {
 
-    public static UnsignedMulHighNode create(ValueNode x, ValueNode y) {
-        return new UnsignedMulHighNode(x, y);
-    }
-
-    protected UnsignedMulHighNode(ValueNode x, ValueNode y) {
+    public UnsignedMulHighNode(ValueNode x, ValueNode y) {
         this((IntegerStamp) x.stamp().unrestricted(), x, y);
     }
 
-    public static UnsignedMulHighNode create(IntegerStamp stamp, ValueNode x, ValueNode y) {
-        return new UnsignedMulHighNode(stamp, x, y);
-    }
-
-    protected UnsignedMulHighNode(IntegerStamp stamp, ValueNode x, ValueNode y) {
+    public UnsignedMulHighNode(IntegerStamp stamp, ValueNode x, ValueNode y) {
         super(stamp, x, y);
     }
 
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/asserts/CompilationConstantNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/asserts/CompilationConstantNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -30,15 +30,12 @@
 @NodeInfo
 public class CompilationConstantNode extends NeverPartOfCompilationNode implements Canonicalizable {
 
-    public static CompilationConstantNode create(Invoke invoke) {
-        return new CompilationConstantNode(invoke);
-    }
-
-    protected CompilationConstantNode(Invoke invoke) {
+    public CompilationConstantNode(Invoke invoke) {
         super(invoke, "The value could not be reduced to a compile time constant.");
         assert arguments.size() == 1;
     }
 
+
     @Override
     public Node canonical(CanonicalizerTool tool) {
         if (arguments.get(0).isConstant()) {
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/asserts/NeverInlineMacroNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/asserts/NeverInlineMacroNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -30,13 +30,10 @@
 @NodeInfo
 public class NeverInlineMacroNode extends MacroStateSplitNode implements com.oracle.graal.graph.IterableNodeType {
 
-    public static NeverInlineMacroNode create(Invoke invoke) {
-        return new NeverInlineMacroNode(invoke);
+    public NeverInlineMacroNode(Invoke invoke) {
+        super(invoke);
     }
 
-    protected NeverInlineMacroNode(Invoke invoke) {
-        super(invoke);
-    }
 
     @Override
     public void lower(LoweringTool tool) {
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/asserts/NeverPartOfCompilationNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/asserts/NeverPartOfCompilationNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,23 +32,17 @@
 
     protected final String message;
 
-    public static NeverPartOfCompilationNode create(Invoke invoke) {
-        return new NeverPartOfCompilationNode(invoke);
-    }
-
-    protected NeverPartOfCompilationNode(Invoke invoke) {
+    public NeverPartOfCompilationNode(Invoke invoke) {
         this(invoke, "This code path should never be part of a compilation.");
     }
 
-    public static NeverPartOfCompilationNode create(Invoke invoke, String message) {
-        return new NeverPartOfCompilationNode(invoke, message);
-    }
 
-    protected NeverPartOfCompilationNode(Invoke invoke, String message) {
+    public NeverPartOfCompilationNode(Invoke invoke, String message) {
         super(invoke);
         this.message = message;
     }
 
+
     public final String getMessage() {
         return message + " " + arguments.toString();
     }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/ForceMaterializeNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/ForceMaterializeNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -32,15 +32,12 @@
 
     @Input ValueNode object;
 
-    public static ForceMaterializeNode create(ValueNode object) {
-        return new ForceMaterializeNode(object);
-    }
-
-    protected ForceMaterializeNode(ValueNode object) {
+    public ForceMaterializeNode(ValueNode object) {
         super(StampFactory.forVoid());
         this.object = object;
     }
 
+
     public void generate(NodeLIRBuilderTool generator) {
         // nothing to do
     }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/MaterializeFrameNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/MaterializeFrameNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -35,15 +35,12 @@
 
     @Input ValueNode frame;
 
-    public static MaterializeFrameNode create(ValueNode frame) {
-        return new MaterializeFrameNode(frame);
-    }
-
-    protected MaterializeFrameNode(ValueNode frame) {
+    public MaterializeFrameNode(ValueNode frame) {
         super(frame.stamp());
         this.frame = frame;
     }
 
+
     public ValueNode getFrame() {
         return frame;
     }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/NewFrameNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/frame/NewFrameNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -51,23 +51,17 @@
     @Input ValueNode descriptor;
     @Input ValueNode arguments;
 
-    public static NewFrameNode create(Stamp stamp, ValueNode descriptor, ValueNode arguments) {
-        return new NewFrameNode(stamp, descriptor, arguments);
-    }
-
-    protected NewFrameNode(Stamp stamp, ValueNode descriptor, ValueNode arguments) {
+    public NewFrameNode(Stamp stamp, ValueNode descriptor, ValueNode arguments) {
         super(stamp);
         this.descriptor = descriptor;
         this.arguments = arguments;
     }
 
-    public static NewFrameNode create(ResolvedJavaType frameType, ValueNode descriptor, ValueNode arguments) {
-        return new NewFrameNode(frameType, descriptor, arguments);
+
+    public NewFrameNode(ResolvedJavaType frameType, ValueNode descriptor, ValueNode arguments) {
+        this(StampFactory.exactNonNull(frameType), descriptor, arguments);
     }
 
-    protected NewFrameNode(ResolvedJavaType frameType, ValueNode descriptor, ValueNode arguments) {
-        this(StampFactory.exactNonNull(frameType), descriptor, arguments);
-    }
 
     public ValueNode getDescriptor() {
         return descriptor;
@@ -108,13 +102,10 @@
 
         protected boolean allowMaterialization;
 
-        public static VirtualOnlyInstanceNode create(ResolvedJavaType type, ResolvedJavaField[] fields) {
-            return new VirtualOnlyInstanceNode(type, fields);
+        public VirtualOnlyInstanceNode(ResolvedJavaType type, ResolvedJavaField[] fields) {
+            super(type, fields, true);
         }
 
-        protected VirtualOnlyInstanceNode(ResolvedJavaType type, ResolvedJavaField[] fields) {
-            super(type, fields, true);
-        }
 
         @Override
         public ValueNode getMaterializedRepresentation(FixedNode fixed, ValueNode[] entries, LockState locks) {
@@ -133,7 +124,7 @@
         if (fixed instanceof MaterializeFrameNode || fixed instanceof AbstractEndNode || fixed instanceof ForceMaterializeNode) {
             // We need to conservatively assume that a materialization of a virtual frame can also
             // happen at a merge point.
-            return AllocatedObjectNode.create(virtualNode);
+            return new AllocatedObjectNode(virtualNode);
         }
         String escapeReason;
         if (fixed instanceof StoreFieldNode) {
@@ -166,10 +157,10 @@
         ResolvedJavaField primitiveLocalsField = findField(frameFields, "primitiveLocals");
         ResolvedJavaField tagsField = findField(frameFields, "tags");
 
-        VirtualObjectNode virtualFrame = VirtualOnlyInstanceNode.create(frameType, frameFields);
-        VirtualObjectNode virtualFrameObjectArray = VirtualArrayNode.create((ResolvedJavaType) localsField.getType().getComponentType(), frameSize);
-        VirtualObjectNode virtualFramePrimitiveArray = VirtualArrayNode.create((ResolvedJavaType) primitiveLocalsField.getType().getComponentType(), frameSize);
-        VirtualObjectNode virtualFrameTagArray = VirtualArrayNode.create((ResolvedJavaType) tagsField.getType().getComponentType(), frameSize);
+        VirtualObjectNode virtualFrame = new VirtualOnlyInstanceNode(frameType, frameFields);
+        VirtualObjectNode virtualFrameObjectArray = new VirtualArrayNode((ResolvedJavaType) localsField.getType().getComponentType(), frameSize);
+        VirtualObjectNode virtualFramePrimitiveArray = new VirtualArrayNode((ResolvedJavaType) primitiveLocalsField.getType().getComponentType(), frameSize);
+        VirtualObjectNode virtualFrameTagArray = new VirtualArrayNode((ResolvedJavaType) tagsField.getType().getComponentType(), frameSize);
 
         ValueNode[] objectArrayEntryState = new ValueNode[frameSize];
         ValueNode[] primitiveArrayEntryState = new ValueNode[frameSize];
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadFinalNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadFinalNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -48,11 +48,7 @@
     @Input ValueNode location;
     protected final Kind accessKind;
 
-    public static CustomizedUnsafeLoadFinalNode create(ValueNode object, ValueNode offset, ValueNode condition, ValueNode location, Kind accessKind) {
-        return new CustomizedUnsafeLoadFinalNode(object, offset, condition, location, accessKind);
-    }
-
-    protected CustomizedUnsafeLoadFinalNode(ValueNode object, ValueNode offset, ValueNode condition, ValueNode location, Kind accessKind) {
+    public CustomizedUnsafeLoadFinalNode(ValueNode object, ValueNode offset, ValueNode condition, ValueNode location, Kind accessKind) {
         super(StampFactory.forKind(accessKind.getStackKind()));
         this.object = object;
         this.offset = offset;
@@ -100,7 +96,7 @@
         } else {
             locationIdentity = ObjectLocationIdentity.create(location.asJavaConstant());
         }
-        UnsafeLoadNode result = graph().add(UnsafeLoadNode.create(object, offset, accessKind, locationIdentity, compare));
+        UnsafeLoadNode result = graph().add(new UnsafeLoadNode(object, offset, accessKind, locationIdentity, compare));
         graph().replaceFixedWithFixed(this, result);
         result.lower(tool);
     }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadMacroNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeLoadMacroNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -47,11 +47,7 @@
     private static final int CONDITION_ARGUMENT_INDEX = 2;
     private static final int LOCATION_ARGUMENT_INDEX = 3;
 
-    public static CustomizedUnsafeLoadMacroNode create(Invoke invoke) {
-        return new CustomizedUnsafeLoadMacroNode(invoke);
-    }
-
-    protected CustomizedUnsafeLoadMacroNode(Invoke invoke) {
+    public CustomizedUnsafeLoadMacroNode(Invoke invoke) {
         super(invoke, "The location argument could not be resolved to a constant.");
         assert arguments.size() == ARGUMENT_COUNT;
     }
@@ -71,7 +67,7 @@
             }
             CompareNode compare = CompareNode.createCompareNode(Condition.EQ, conditionArgument, ConstantNode.forBoolean(true));
             Kind returnKind = this.getTargetMethod().getSignature().getReturnKind();
-            return UnsafeLoadNode.create(objectArgument, offsetArgument, returnKind, locationIdentity, compare);
+            return new UnsafeLoadNode(objectArgument, offsetArgument, returnKind, locationIdentity, compare);
         }
         return this;
     }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeStoreMacroNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/CustomizedUnsafeStoreMacroNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -43,11 +43,7 @@
     private static final int VALUE_ARGUMENT_INDEX = 2;
     private static final int LOCATION_ARGUMENT_INDEX = 3;
 
-    public static CustomizedUnsafeStoreMacroNode create(Invoke invoke) {
-        return new CustomizedUnsafeStoreMacroNode(invoke);
-    }
-
-    protected CustomizedUnsafeStoreMacroNode(Invoke invoke) {
+    public CustomizedUnsafeStoreMacroNode(Invoke invoke) {
         super(invoke, "The location argument could not be resolved to a constant.");
         assert arguments.size() == ARGUMENT_COUNT;
     }
@@ -66,7 +62,7 @@
                 locationIdentity = ObjectLocationIdentity.create(locationArgument.asJavaConstant());
             }
 
-            return UnsafeStoreNode.create(objectArgument, offsetArgument, valueArgument, this.getTargetMethod().getSignature().getParameterKind(VALUE_ARGUMENT_INDEX), locationIdentity, stateAfter());
+            return new UnsafeStoreNode(objectArgument, offsetArgument, valueArgument, this.getTargetMethod().getSignature().getParameterKind(VALUE_ARGUMENT_INDEX), locationIdentity, stateAfter());
         }
         return this;
     }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/UnsafeTypeCastMacroNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/nodes/typesystem/UnsafeTypeCastMacroNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -45,11 +45,7 @@
     private static final int NONNULL_ARGUMENT_INDEX = 3;
     private static final int ARGUMENT_COUNT = 4;
 
-    public static UnsafeTypeCastMacroNode create(Invoke invoke) {
-        return new UnsafeTypeCastMacroNode(invoke);
-    }
-
-    protected UnsafeTypeCastMacroNode(Invoke invoke) {
+    public UnsafeTypeCastMacroNode(Invoke invoke) {
         super(invoke, "The class of the unsafe cast could not be reduced to a compile time constant.");
         assert arguments.size() == ARGUMENT_COUNT;
     }
@@ -69,8 +65,8 @@
             } else {
                 Stamp piStamp = StampFactory.declaredTrusted(lookupJavaType, nonNullArgument.asJavaConstant().asInt() != 0);
                 ConditionAnchorNode valueAnchorNode = graph().add(
-                                ConditionAnchorNode.create(CompareNode.createCompareNode(graph(), Condition.EQ, conditionArgument, ConstantNode.forBoolean(true, graph()))));
-                PiNode piCast = graph().unique(PiNode.create(objectArgument, piStamp, valueAnchorNode));
+                                new ConditionAnchorNode(CompareNode.createCompareNode(graph(), Condition.EQ, conditionArgument, ConstantNode.forBoolean(true, graph()))));
+                PiNode piCast = graph().unique(new PiNode(objectArgument, piStamp, valueAnchorNode));
                 replaceAtUsages(piCast);
                 graph().replaceFixedWithFixed(this, valueAnchorNode);
             }
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/nodes/MaterializedObjectState.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/nodes/MaterializedObjectState.java	Mon Jan 12 20:39:04 2015 +0100
@@ -39,18 +39,14 @@
         return materializedValue;
     }
 
-    public static MaterializedObjectState create(VirtualObjectNode object, ValueNode materializedValue) {
-        return new MaterializedObjectState(object, materializedValue);
-    }
-
-    protected MaterializedObjectState(VirtualObjectNode object, ValueNode materializedValue) {
+    public MaterializedObjectState(VirtualObjectNode object, ValueNode materializedValue) {
         super(object);
         this.materializedValue = materializedValue;
     }
 
     @Override
     public MaterializedObjectState duplicateWithVirtualState() {
-        return graph().addWithoutUnique(MaterializedObjectState.create(object(), materializedValue));
+        return graph().addWithoutUnique(new MaterializedObjectState(object(), materializedValue));
     }
 
     @Override
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/nodes/VirtualObjectState.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/nodes/VirtualObjectState.java	Mon Jan 12 20:39:04 2015 +0100
@@ -41,21 +41,13 @@
         return values;
     }
 
-    public static VirtualObjectState create(VirtualObjectNode object, ValueNode[] values) {
-        return new VirtualObjectState(object, values);
-    }
-
-    protected VirtualObjectState(VirtualObjectNode object, ValueNode[] values) {
+    public VirtualObjectState(VirtualObjectNode object, ValueNode[] values) {
         super(object);
         assert object.entryCount() == values.length;
         this.values = new NodeInputList<>(this, values);
     }
 
-    public static VirtualObjectState create(VirtualObjectNode object, List<ValueNode> values) {
-        return new VirtualObjectState(object, values);
-    }
-
-    protected VirtualObjectState(VirtualObjectNode object, List<ValueNode> values) {
+    public VirtualObjectState(VirtualObjectNode object, List<ValueNode> values) {
         super(object);
         assert object.entryCount() == values.size();
         this.values = new NodeInputList<>(this, values);
@@ -63,7 +55,7 @@
 
     @Override
     public VirtualObjectState duplicateWithVirtualState() {
-        return graph().addWithoutUnique(VirtualObjectState.create(object(), values));
+        return graph().addWithoutUnique(new VirtualObjectState(object(), values));
     }
 
     @Override
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PEReadEliminationClosure.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PEReadEliminationClosure.java	Mon Jan 12 20:39:04 2015 +0100
@@ -125,7 +125,7 @@
                 if (initialState.getReadCache().get(entry.getKey()) != entry.getValue()) {
                     ValueNode value = exitState.getReadCache(entry.getKey().object, entry.getKey().identity, this);
                     if (!(value instanceof ProxyNode) || ((ProxyNode) value).proxyPoint() != exitNode) {
-                        ProxyNode proxy = ValueProxyNode.create(value, exitNode);
+                        ProxyNode proxy = new ValueProxyNode(value, exitNode);
                         effects.addFloatingNode(proxy, "readCacheProxy");
                         entry.setValue(proxy);
                     }
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeBlockState.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeBlockState.java	Mon Jan 12 20:39:04 2015 +0100
@@ -89,7 +89,7 @@
                 if (fixed.predecessor() instanceof CommitAllocationNode) {
                     commit = (CommitAllocationNode) fixed.predecessor();
                 } else {
-                    commit = graph.add(CommitAllocationNode.create());
+                    commit = graph.add(new CommitAllocationNode());
                     graph.addBeforeFixed(fixed, commit);
                 }
                 for (AllocatedObjectNode obj : objects) {
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/PartialEscapeClosure.java	Mon Jan 12 20:39:04 2015 +0100
@@ -188,9 +188,9 @@
                             }
                         }
                     }
-                    v = VirtualObjectState.create(obj.virtual, fieldState);
+                    v = new VirtualObjectState(obj.virtual, fieldState);
                 } else {
-                    v = MaterializedObjectState.create(obj.virtual, obj.getMaterializedValue());
+                    v = new MaterializedObjectState(obj.virtual, obj.getMaterializedValue());
                 }
                 effects.addVirtualMapping(frameState, v);
             }
@@ -237,7 +237,7 @@
                         ValueNode value = obj.getEntry(i);
                         if (!(value instanceof VirtualObjectNode || value.isConstant())) {
                             if (exitNode.loopBegin().isPhiAtMerge(value) || initialObj == null || !initialObj.isVirtual() || initialObj.getEntry(i) != value) {
-                                ProxyNode proxy = ValueProxyNode.create(value, exitNode);
+                                ProxyNode proxy = new ValueProxyNode(value, exitNode);
                                 obj.setEntry(i, proxy);
                                 effects.addFloatingNode(proxy, "virtualProxy");
                             }
@@ -247,7 +247,7 @@
                     if (initialObj == null || initialObj.isVirtual()) {
                         ProxyNode proxy = proxies.get(obj.virtual);
                         if (proxy == null) {
-                            proxy = ValueProxyNode.create(obj.getMaterializedValue(), exitNode);
+                            proxy = new ValueProxyNode(obj.getMaterializedValue(), exitNode);
                             effects.addFloatingNode(proxy, "proxy");
                         } else {
                             effects.replaceFirstInput(proxy, proxy.value(), obj.getMaterializedValue());
@@ -282,7 +282,7 @@
         protected <T> PhiNode getCachedPhi(T virtual, Stamp stamp) {
             ValuePhiNode result = materializedPhis.get(virtual);
             if (result == null) {
-                result = ValuePhiNode.create(stamp, merge);
+                result = new ValuePhiNode(stamp, merge);
                 materializedPhis.put(virtual, result);
             }
             return result;
@@ -457,11 +457,11 @@
                     for (int i = 1; i < objStates.length; i++) {
                         ValueNode[] fields = objStates[i].getEntries();
                         if (phis[valueIndex] == null && values[valueIndex] != fields[valueIndex]) {
-                            phis[valueIndex] = ValuePhiNode.create(values[valueIndex].stamp().unrestricted(), merge);
+                            phis[valueIndex] = new ValuePhiNode(values[valueIndex].stamp().unrestricted(), merge);
                         }
                     }
                     if (phis[valueIndex] != null && !phis[valueIndex].stamp().isCompatible(values[valueIndex].stamp())) {
-                        phis[valueIndex] = ValuePhiNode.create(values[valueIndex].stamp().unrestricted(), merge);
+                        phis[valueIndex] = new ValuePhiNode(values[valueIndex].stamp().unrestricted(), merge);
                     }
                     if (twoSlotKinds != null && twoSlotKinds[valueIndex] != null) {
                         // skip an entry after a long/double value that occupies two int slots
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationClosure.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/ReadEliminationClosure.java	Mon Jan 12 20:39:04 2015 +0100
@@ -90,7 +90,7 @@
                 ValueNode cachedValue = state.getCacheEntry(identifier);
                 if (cachedValue != null && read.stamp().isCompatible(cachedValue.stamp())) {
                     if (read.getGuard() != null && !(read.getGuard() instanceof FixedNode)) {
-                        effects.addFixedNodeBefore(ValueAnchorNode.create((ValueNode) read.getGuard()), read);
+                        effects.addFixedNodeBefore(new ValueAnchorNode((ValueNode) read.getGuard()), read);
                     }
                     effects.replaceAtUsages(read, cachedValue);
                     addScalarAlias(read, cachedValue);
@@ -174,7 +174,7 @@
         if (exitNode.graph().hasValueProxies()) {
             for (Map.Entry<CacheEntry<?>, ValueNode> entry : exitState.getReadCache().entrySet()) {
                 if (initialState.getReadCache().get(entry.getKey()) != entry.getValue()) {
-                    ProxyNode proxy = ValueProxyNode.create(exitState.getCacheEntry(entry.getKey()), exitNode);
+                    ProxyNode proxy = new ValueProxyNode(exitState.getCacheEntry(entry.getKey()), exitNode);
                     effects.addFloatingNode(proxy, "readCacheProxy");
                     entry.setValue(proxy);
                 }
@@ -203,7 +203,7 @@
         protected <T> PhiNode getCachedPhi(T virtual, Stamp stamp) {
             ValuePhiNode result = materializedPhis.get(virtual);
             if (result == null) {
-                result = ValuePhiNode.create(stamp, merge);
+                result = new ValuePhiNode(stamp, merge);
                 materializedPhis.put(virtual, result);
             }
             return result;
--- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/SnippetLocationNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/SnippetLocationNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -53,25 +53,11 @@
     @Input ValueNode index;
     @Input ValueNode indexScaling;
 
-    public static SnippetLocationNode create(@InjectedNodeParameter SnippetReflectionProvider snippetReflection, ValueNode identity, ValueNode displacement, ValueNode index, ValueNode indexScaling,
-                    Graph graph) {
-        return graph.unique(SnippetLocationNode.create(snippetReflection, identity, displacement, index, indexScaling));
-    }
-
-    public static SnippetLocationNode create(@InjectedNodeParameter SnippetReflectionProvider snippetReflection, ValueNode locationIdentity, ValueNode displacement) {
-        return new SnippetLocationNode(snippetReflection, locationIdentity, displacement);
-    }
-
-    protected SnippetLocationNode(@InjectedNodeParameter SnippetReflectionProvider snippetReflection, ValueNode locationIdentity, ValueNode displacement) {
+    public SnippetLocationNode(@InjectedNodeParameter SnippetReflectionProvider snippetReflection, ValueNode locationIdentity, ValueNode displacement) {
         this(snippetReflection, locationIdentity, displacement, null, null);
     }
 
-    public static SnippetLocationNode create(@InjectedNodeParameter SnippetReflectionProvider snippetReflection, ValueNode locationIdentity, ValueNode displacement, ValueNode index,
-                    ValueNode indexScaling) {
-        return new SnippetLocationNode(snippetReflection, locationIdentity, displacement, index, indexScaling);
-    }
-
-    protected SnippetLocationNode(SnippetReflectionProvider snippetReflection, ValueNode locationIdentity, ValueNode displacement, ValueNode index, ValueNode indexScaling) {
+    public SnippetLocationNode(@InjectedNodeParameter SnippetReflectionProvider snippetReflection, ValueNode locationIdentity, ValueNode displacement, ValueNode index, ValueNode indexScaling) {
         super(StampFactory.object());
         this.snippetReflection = snippetReflection;
         this.locationIdentity = locationIdentity;
@@ -98,11 +84,11 @@
             int constIndexScaling = indexScaling == null ? 0 : indexScaling.asJavaConstant().asInt();
 
             if (index == null || constIndexScaling == 0) {
-                return ConstantLocationNode.create(constLocation, constDisplacement, graph());
+                return graph().unique(new ConstantLocationNode(constLocation, constDisplacement));
             } else if (index.isConstant()) {
-                return ConstantLocationNode.create(constLocation, index.asJavaConstant().asLong() * constIndexScaling + constDisplacement, graph());
+                return graph().unique(new ConstantLocationNode(constLocation, index.asJavaConstant().asLong() * constIndexScaling + constDisplacement));
             } else {
-                return IndexedLocationNode.create(constLocation, constDisplacement, index, graph(), constIndexScaling);
+                return graph().unique(new IndexedLocationNode(constLocation, constDisplacement, index, constIndexScaling));
             }
         }
         return this;
--- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/WordCastNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/WordCastNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -42,19 +42,15 @@
 
     public static WordCastNode wordToObject(ValueNode input, Kind wordKind) {
         assert input.getKind() == wordKind;
-        return WordCastNode.create(StampFactory.object(), input);
+        return new WordCastNode(StampFactory.object(), input);
     }
 
     public static WordCastNode objectToWord(ValueNode input, Kind wordKind) {
         assert input.stamp() instanceof ObjectStamp;
-        return WordCastNode.create(StampFactory.forKind(wordKind), input);
+        return new WordCastNode(StampFactory.forKind(wordKind), input);
     }
 
-    public static WordCastNode create(Stamp stamp, ValueNode input) {
-        return new WordCastNode(stamp, input);
-    }
-
-    protected WordCastNode(Stamp stamp, ValueNode input) {
+    public WordCastNode(Stamp stamp, ValueNode input) {
         super(stamp);
         this.input = input;
     }
--- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java	Mon Jan 12 20:39:04 2015 +0100
@@ -159,9 +159,9 @@
              * depends on elementKind. Therefore, just create a new node and replace the old one.
              */
             if (node instanceof LoadIndexedNode) {
-                graph.replaceFixedWithFixed(node, graph.add(LoadIndexedNode.create(node.array(), node.index(), wordKind)));
+                graph.replaceFixedWithFixed(node, graph.add(new LoadIndexedNode(node.array(), node.index(), wordKind)));
             } else if (node instanceof StoreIndexedNode) {
-                graph.replaceFixedWithFixed(node, graph.add(StoreIndexedNode.create(node.array(), node.index(), wordKind, ((StoreIndexedNode) node).value())));
+                graph.replaceFixedWithFixed(node, graph.add(new StoreIndexedNode(node.array(), node.index(), wordKind, ((StoreIndexedNode) node).value())));
             } else {
                 throw GraalInternalError.shouldNotReachHere();
             }
@@ -220,7 +220,7 @@
 
             case NOT:
                 assert arguments.size() == 1;
-                replace(invoke, graph.unique(XorNode.create(arguments.get(0), ConstantNode.forIntegerKind(wordKind, -1, graph))));
+                replace(invoke, graph.unique(new XorNode(arguments.get(0), ConstantNode.forIntegerKind(wordKind, -1, graph))));
                 break;
 
             case READ_POINTER:
@@ -289,7 +289,7 @@
 
             case FROM_ARRAY:
                 assert arguments.size() == 2;
-                replace(invoke, graph.unique(ComputeAddressNode.create(arguments.get(0), arguments.get(1), StampFactory.forKind(wordKind))));
+                replace(invoke, graph.unique(new ComputeAddressNode(arguments.get(0), arguments.get(1), StampFactory.forKind(wordKind))));
                 break;
 
             case TO_OBJECT:
@@ -323,14 +323,14 @@
 
         if (toKind == Kind.Int) {
             assert value.getKind() == Kind.Long;
-            return graph.unique(NarrowNode.create(value, 32));
+            return graph.unique(new NarrowNode(value, 32));
         } else {
             assert toKind == Kind.Long;
             assert value.getKind().getStackKind() == Kind.Int;
             if (unsigned) {
-                return graph.unique(ZeroExtendNode.create(value, 64));
+                return graph.unique(new ZeroExtendNode(value, 64));
             } else {
-                return graph.unique(SignExtendNode.create(value, 64));
+                return graph.unique(new SignExtendNode(value, 64));
             }
         }
     }
@@ -342,8 +342,8 @@
      */
     private static ValueNode createBinaryNodeInstance(Class<? extends ValueNode> nodeClass, ValueNode left, ValueNode right) {
         try {
-            Method factory = nodeClass.getDeclaredMethod("create", ValueNode.class, ValueNode.class);
-            return (ValueNode) factory.invoke(null, left, right);
+            Constructor<?> cons = nodeClass.getDeclaredConstructor(ValueNode.class, ValueNode.class);
+            return (ValueNode) cons.newInstance(left, right);
         } catch (Throwable ex) {
             throw new GraalInternalError(ex).addContext(nodeClass.getName());
         }
@@ -360,11 +360,11 @@
 
         CompareNode comparison;
         if (condition == Condition.EQ || condition == Condition.NE) {
-            comparison = IntegerEqualsNode.create(a, b);
+            comparison = new IntegerEqualsNode(a, b);
         } else if (condition.isUnsigned()) {
-            comparison = IntegerBelowNode.create(a, b);
+            comparison = new IntegerBelowNode(a, b);
         } else {
-            comparison = IntegerLessThanNode.create(a, b);
+            comparison = new IntegerLessThanNode(a, b);
         }
 
         ConstantNode trueValue = ConstantNode.forInt(1, graph);
@@ -375,7 +375,7 @@
             trueValue = falseValue;
             falseValue = temp;
         }
-        ConditionalNode materialize = graph.unique(ConditionalNode.create(graph.unique(comparison), trueValue, falseValue));
+        ConditionalNode materialize = graph.unique(new ConditionalNode(graph.unique(comparison), trueValue, falseValue));
         return materialize;
     }
 
@@ -383,11 +383,11 @@
         if (locationIdentity.isConstant()) {
             return makeLocation(graph, offset, snippetReflection.asObject(LocationIdentity.class, locationIdentity.asJavaConstant()));
         }
-        return SnippetLocationNode.create(snippetReflection, locationIdentity, ConstantNode.forLong(0, graph), fromSigned(graph, offset), ConstantNode.forInt(1, graph), graph);
+        return graph.unique(new SnippetLocationNode(snippetReflection, locationIdentity, ConstantNode.forLong(0, graph), fromSigned(graph, offset), ConstantNode.forInt(1, graph)));
     }
 
     protected LocationNode makeLocation(StructuredGraph graph, ValueNode offset, LocationIdentity locationIdentity) {
-        return IndexedLocationNode.create(locationIdentity, 0, fromSigned(graph, offset), graph, 1);
+        return graph.unique(new IndexedLocationNode(locationIdentity, 0, fromSigned(graph, offset), 1));
     }
 
     protected ValueNode readOp(StructuredGraph graph, Kind readKind, ValueNode base, Invoke invoke, LocationNode location, Opcode op) {
@@ -399,7 +399,7 @@
     }
 
     protected ValueNode readOp(StructuredGraph graph, Kind readKind, ValueNode base, Invoke invoke, LocationNode location, BarrierType barrierType, boolean compressible) {
-        JavaReadNode read = graph.add(JavaReadNode.create(readKind, base, location, barrierType, compressible));
+        JavaReadNode read = graph.add(new JavaReadNode(readKind, base, location, barrierType, compressible));
         graph.addBeforeFixed(invoke.asNode(), read);
         /*
          * The read must not float outside its block otherwise it may float above an explicit zero
@@ -414,7 +414,7 @@
         final BarrierType barrier = (op == Opcode.WRITE_BARRIERED ? BarrierType.PRECISE : BarrierType.NONE);
         final boolean compressible = (op == Opcode.WRITE_OBJECT || op == Opcode.WRITE_BARRIERED);
         final boolean initialize = (op == Opcode.INITIALIZE);
-        JavaWriteNode write = graph.add(JavaWriteNode.create(writeKind, base, value, location, barrier, compressible, initialize));
+        JavaWriteNode write = graph.add(new JavaWriteNode(writeKind, base, value, location, barrier, compressible, initialize));
         write.setStateAfter(invoke.stateAfter());
         graph.addBeforeFixed(invoke.asNode(), write);
         return write;
--- a/graal/com.oracle.nfi/src/com/oracle/nfi/api/NativeFunctionPointer.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.nfi/src/com/oracle/nfi/api/NativeFunctionPointer.java	Mon Jan 12 20:39:04 2015 +0100
@@ -33,7 +33,7 @@
 
     /**
      * Returns the name of the function.
-     *
+     * 
      * @return name of the function
      */
     String getName();
--- a/graal/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/TypeSystem.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.truffle.api.dsl/src/com/oracle/truffle/api/dsl/TypeSystem.java	Mon Jan 12 20:39:04 2015 +0100
@@ -37,7 +37,7 @@
  * concrete type is found first when searching the list sequentially for the type of a given generic
  * value.
  * </p>
- *
+ * 
  * <p>
  * Each {@link #value()} is represented as a java type. A type can specify two annotations:
  * {@link TypeCheck} and {@link TypeCast}. The {@link TypeCheck} checks whether a given generic
@@ -51,14 +51,14 @@
  * accept also {@link Integer} values, implicitly converting them to {@link Double} . This example
  * points out how we express implicit type conversions.
  * </p>
- *
+ * 
  * <p>
  * <b>Example:</b> The {@link TypeSystem} contains the types {@link Boolean}, {@link Integer}, and
  * {@link Double}. The type {@link Object} is always used implicitly as the generic type represent
  * all values.
- *
+ * 
  * <pre>
- *
+ * 
  * {@literal @}TypeSystem(types = {boolean.class, int.class, double.class})
  * public abstract class ExampleTypeSystem {
  * 
@@ -73,8 +73,8 @@
  *     }
  * }
  * </pre>
- *
- *
+ * 
+ * 
  * @see TypeCast
  * @see TypeCheck
  */
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/RootNode.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/RootNode.java	Mon Jan 12 20:39:04 2015 +0100
@@ -72,7 +72,7 @@
      * language specific implementations may want to return <code>true</code> here to indicate that
      * gathering call site specific profiling information might make sense for this {@link RootNode}
      * .
-     *
+     * 
      * @return <code>true</code> if cloning is allowed else <code>false</code>.
      */
     public boolean isCloningAllowed() {
@@ -91,7 +91,7 @@
 
     /**
      * Executes this function using the specified frame and returns the result value.
-     *
+     * 
      * @param frame the frame of the currently executing guest language method
      * @return the value of the execution
      */
@@ -114,14 +114,14 @@
      * the correct <code>ExecutionContext</code> to be determined for a <code>RootNode</code> (and
      * so also for a {@link RootCallTarget} and a {@link FrameInstance} obtained from the call
      * stack) without prior knowledge of the language it has come from.
-     *
+     * 
      * Used for instance to determine the language of a <code>RootNode<code>:
      * 
      * <pre>
      * <code>
      * rootNode.getExecutionContext().getLanguageShortName();
      * </code> </pre>
-     *
+     * 
      * Returns <code>null</code> by default.
      */
     public ExecutionContext getExecutionContext() {
@@ -151,7 +151,7 @@
      * <p>
      * Implementations should ensure that instrumentation is never applied more than once to an AST,
      * as this is not guaranteed to be error-free.
-     *
+     * 
      * @see Probe#registerASTProber(com.oracle.truffle.api.instrument.ASTProber)
      */
     public void applyInstrumentation() {
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/ConditionProfile.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/ConditionProfile.java	Mon Jan 12 20:39:04 2015 +0100
@@ -30,9 +30,9 @@
 /**
  * Abstract utility class to speculate on conditions. Condition profiles are intended to be used as
  * part of if conditions.
- *
+ * 
  * Example usage:
- *
+ * 
  * <pre>
  * private final ConditionProfile zero = ConditionProfile.createBinaryProfile();
  * 
@@ -42,12 +42,12 @@
  * } else {
  *   return value;
  * }
- *
+ * 
  * </pre>
- *
+ * 
  * All instances of {@code ConditionProfile} (and subclasses) must be held in {@code final} fields
  * for compiler optimizations to take effect.
- *
+ * 
  * @see #createCountingProfile()
  * @see #createBinaryProfile()
  */
@@ -62,7 +62,7 @@
      * true and false. This information is reported to the underlying optimization system using
      * {@link CompilerDirectives#injectBranchProbability(double, boolean)}. Condition profiles are
      * intended to be used as part of if conditions.
-     *
+     * 
      * @see ConditionProfile
      * @see #createBinaryProfile()
      */
@@ -73,7 +73,7 @@
     /**
      * Returns a {@link ConditionProfile} that speculates on conditions to be never true or to be
      * never false. Condition profiles are intended to be used as part of if conditions.
-     *
+     * 
      * @see ConditionProfile
      * @see ConditionProfile#createCountingProfile()
      */
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/ValueProfile.java	Mon Jan 12 19:05:36 2015 +0100
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/utilities/ValueProfile.java	Mon Jan 12 20:39:04 2015 +0100
@@ -26,18 +26,18 @@
 
 /**
  * Utility class to speculate on certain properties of values.
- *
+ * 
  * Example usage:
- *
+ * 
  * <pre>
  * private final ValueProfile classProfile = ValueProfile.createClassProfile();
  * 
  * return classProfile.profile(value);
  * </pre>
- *
+ * 
  * All instances of {@code ValueProfile} (and subclasses) must be held in {@code final} fields for
  * compiler optimizations to take effect.
- *
+ * 
  * @see #createPrimitiveProfile()
  * @see #createIdentityProfile()
  * @see #createClassProfile()