# HG changeset patch # User Gilles Duboscq # Date 1376693646 -7200 # Node ID 39e83065426eda7cc04a04ea8d298683f1d65322 # Parent e99a5d7c3debd4f5e303013d818742cafa79b20d Add anchors for loadHubs in verifyObject and monitor enter. Remove checkNull from monitor snippets diff -r e99a5d7c3deb -r 39e83065426e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java Fri Aug 16 22:42:06 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java Sat Aug 17 00:54:06 2013 +0200 @@ -495,7 +495,7 @@ @SuppressWarnings("unused") @NodeIntrinsic(value = LoadHubNode.class, setStampFromReturnType = true) - static Word loadHubIntrinsic(Object object, @ConstantNodeParameter Kind word, GuardingNode anchor) { + public static Word loadHubIntrinsic(Object object, @ConstantNodeParameter Kind word, GuardingNode anchor) { return Word.unsigned(unsafeReadKlassPointer(object)); } diff -r e99a5d7c3deb -r 39e83065426e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java Fri Aug 16 22:42:06 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MonitorSnippets.java Sat Aug 17 00:54:06 2013 +0200 @@ -77,12 +77,13 @@ public static final boolean CHECK_BALANCED_MONITORS = Boolean.getBoolean("graal.monitors.checkBalanced"); @Snippet - public static void monitorenter(Object object, @ConstantParameter int lockDepth, @ConstantParameter boolean checkNull, @ConstantParameter boolean trace) { + public static void monitorenter(Object object, @ConstantParameter int lockDepth, @ConstantParameter boolean trace) { verifyOop(object); - if (checkNull && object == null) { + if (object == null) { DeoptimizeNode.deopt(DeoptimizationAction.InvalidateReprofile, DeoptimizationReason.NullCheckException); } + BeginNode anchorNode = BeginNode.anchor(StampFactory.forNodeIntrinsic()); // Load the mark word - this includes a null-check on object final Word mark = loadWordFromObject(object, markOffset()); @@ -108,7 +109,7 @@ } else { // The bias pattern is present in the object's mark word. Need to check // whether the bias owner and the epoch are both still current. - Word hub = loadHub(object); + Word hub = loadHubIntrinsic(object, getWordKind(), anchorNode); final Word prototypeMarkWord = hub.readWord(prototypeMarkWordOffset(), PROTOTYPE_MARK_WORD_LOCATION); final Word thread = thread(); final Word tmp = prototypeMarkWord.or(thread).xor(mark).and(~ageMaskInPlace()); @@ -253,10 +254,10 @@ * Calls straight out to the monitorenter stub. */ @Snippet - public static void monitorenterStub(Object object, @ConstantParameter int lockDepth, @ConstantParameter boolean checkNull, @ConstantParameter boolean trace) { + public static void monitorenterStub(Object object, @ConstantParameter int lockDepth, @ConstantParameter boolean trace) { verifyOop(object); incCounter(); - if (checkNull && object == null) { + if (object == null) { DeoptimizeNode.deopt(DeoptimizationAction.InvalidateReprofile, DeoptimizationReason.NullCheckException); } // BeginLockScope nodes do not read from object so a use of object @@ -410,7 +411,6 @@ } args.add("object", monitorenterNode.object()); args.addConst("lockDepth", monitorenterNode.getLockDepth()); - args.addConst("checkNull", !ObjectStamp.isObjectNonNull(monitorenterNode.object().stamp())); boolean tracingEnabledForMethod = stateAfter != null && (isTracingEnabledForMethod(stateAfter.method()) || isTracingEnabledForMethod(graph.method())); args.addConst("trace", isTracingEnabledForType(monitorenterNode.object()) || tracingEnabledForMethod); diff -r e99a5d7c3deb -r 39e83065426e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/StubUtil.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/StubUtil.java Fri Aug 16 22:42:06 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/stubs/StubUtil.java Sat Aug 17 00:54:06 2013 +0200 @@ -36,6 +36,8 @@ import com.oracle.graal.graph.Node.ConstantNodeParameter; import com.oracle.graal.graph.Node.NodeIntrinsic; import com.oracle.graal.hotspot.nodes.*; +import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.type.*; import com.oracle.graal.replacements.*; import com.oracle.graal.replacements.Snippet.Fold; import com.oracle.graal.word.*; @@ -217,12 +219,13 @@ Pointer oop = Word.fromObject(object); if (object != null) { + BeginNode anchorNode = BeginNode.anchor(StampFactory.forNodeIntrinsic()); // make sure object is 'reasonable' if (!oop.and(unsigned(verifyOopMask())).equal(unsigned(verifyOopBits()))) { fatal("oop not in heap: %p", oop.rawValue()); } - Word klass = loadHub(object); + Word klass = loadHubIntrinsic(object, getWordKind(), anchorNode); if (klass.equal(Word.zero())) { fatal("klass for oop %p is null", oop.rawValue()); }