# HG changeset patch # User Doug Simon # Date 1333523984 -7200 # Node ID 20993edddd73b62d756a5752b363000765d07e02 # Parent 67f52d18d01f32f709000db5b4e5930da910bb9c write barrier for UnsafeStoreNode must be inserted after associated write node has replaced original store node in the graph diff -r 67f52d18d01f -r 20993edddd73 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotRuntime.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotRuntime.java Tue Apr 03 23:10:04 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotRuntime.java Wed Apr 04 09:19:44 2012 +0200 @@ -333,12 +333,12 @@ IndexedLocationNode location = IndexedLocationNode.create(LocationNode.ANY_LOCATION, store.storeKind(), store.displacement(), store.offset(), graph); location.setIndexScalingEnabled(false); WriteNode write = graph.add(new WriteNode(store.object(), store.value(), location)); - if (store.storeKind() == CiKind.Object && !store.value().isNullConstant()) { - FieldWriteBarrier barrier = graph.add(new FieldWriteBarrier(store.object())); + write.setStateAfter(store.stateAfter()); + graph.replaceFixedWithFixed(store, write); + if (write.value().kind() == CiKind.Object && !write.value().isNullConstant()) { + FieldWriteBarrier barrier = graph.add(new FieldWriteBarrier(write.object())); graph.addBeforeFixed(write, barrier); } - write.setStateAfter(store.stateAfter()); - graph.replaceFixedWithFixed(store, write); } else if (n instanceof ReadHubNode) { ReadHubNode objectClassNode = (ReadHubNode) n; LocationNode location = LocationNode.create(LocationNode.FINAL_LOCATION, CiKind.Object, config.hubOffset, graph);