# HG changeset patch # User Lukas Stadler # Date 1312449007 -7200 # Node ID 1e5500ecd6bd034258f06b74b7c1c2d3c9ee2241 # Parent 561f5b2940b1a2402f614657e75643acd528d484 added framestate to unsafe intrinsics - fixes ordering bug diff -r 561f5b2940b1 -r 1e5500ecd6bd graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/InliningPhase.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/InliningPhase.java Wed Aug 03 16:54:02 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/InliningPhase.java Thu Aug 04 11:10:07 2011 +0200 @@ -555,7 +555,6 @@ } if (pred instanceof Placeholder) { - System.out.println("preds: " + ((Placeholder) pred).next().predecessor()); FixedNode next = ((Placeholder) pred).next(); ((Placeholder) pred).setNext(null); pred.replaceAndDelete(next); diff -r 561f5b2940b1 -r 1e5500ecd6bd graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java --- a/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java Wed Aug 03 16:54:02 2011 +0200 +++ b/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java Thu Aug 04 11:10:07 2011 +0200 @@ -553,6 +553,7 @@ } else if (holderName.equals("Lsun/misc/Unsafe;")) { if (fullName.equals("getObject(Ljava/lang/Object;J)Ljava/lang/Object;")) { CompilerGraph graph = new CompilerGraph(this); + Local unsafe = new Local(CiKind.Object, 0, graph); Local object = new Local(CiKind.Object, 1, graph); Local offset = new Local(CiKind.Long, 2, graph); UnsafeLoad load = new UnsafeLoad(object, offset, CiKind.Object, graph); @@ -563,10 +564,17 @@ intrinsicGraphs.put(method, graph); } else if (fullName.equals("putObject(Ljava/lang/Object;JLjava/lang/Object;)V")) { CompilerGraph graph = new CompilerGraph(this); + Local unsafe = new Local(CiKind.Object, 0, graph); Local object = new Local(CiKind.Object, 1, graph); Local offset = new Local(CiKind.Long, 2, graph); Local value = new Local(CiKind.Object, 3, graph); UnsafeStore store = new UnsafeStore(object, offset, value, CiKind.Object, graph); + FrameState frameState = new FrameState(method, 0, parameters.size(), 0, 0, false, graph); + store.setStateAfter(frameState); + frameState.setValueAt(0, unsafe); + frameState.setValueAt(1, object); + frameState.setValueAt(2, offset); + frameState.setValueAt(3, value); Return ret = new Return(null, graph); store.setNext(ret); graph.start().setNext(store);