# HG changeset patch # User Christos Kotselidis # Date 1375455640 -7200 # Node ID 8ede7cd7318e2883f5f27e74b746adb9e1428293 # Parent 46c6ee6f1832e6d2cfebf4281f7d935ed9371c31# Parent 4c648c43150c0523c8e822843bf39bed9c2fc925 Merge diff -r 4c648c43150c -r 8ede7cd7318e graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierAdditionTest.java --- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierAdditionTest.java Fri Aug 02 16:21:02 2013 +0200 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/WriteBarrierAdditionTest.java Fri Aug 02 17:00:40 2013 +0200 @@ -207,6 +207,27 @@ test2("testUnsafeLoad", wr, new Long(16), new Integer(16)); } + static Object[] src = new Object[1]; + static Object[] dst = new Object[1]; + + static { + for (int i = 0; i < src.length; i++) { + src[i] = new Object(); + } + for (int i = 0; i < dst.length; i++) { + dst[i] = new Object(); + } + } + + public static void testArrayCopy(Object a, Object b, Object c) throws Exception { + System.arraycopy(a, 0, b, 0, (int) c); + } + + @Test + public void test11() throws Exception { + test2("testArrayCopy", src, dst, dst.length); + } + public static Object testUnsafeLoad(Object a, Object b, Object c) throws Exception { final int offset = (c == null ? 0 : ((Integer) c).intValue()); final long displacement = (b == null ? 0 : ((Long) b).longValue()); diff -r 4c648c43150c -r 8ede7cd7318e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Fri Aug 02 16:21:02 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Fri Aug 02 17:00:40 2013 +0200 @@ -634,18 +634,20 @@ graph.replaceFixedWithFixed(storeIndexed, memoryWrite); } else if (n instanceof UnsafeLoadNode) { - UnsafeLoadNode load = (UnsafeLoadNode) n; - assert load.kind() != Kind.Illegal; - boolean compressible = (!load.object().isNullConstant() && load.accessKind() == Kind.Object); - if (addReadBarrier(load, tool)) { - unsafeLoadSnippets.lower(load, tool); - } else { - IndexedLocationNode location = IndexedLocationNode.create(ANY_LOCATION, load.accessKind(), load.displacement(), load.offset(), graph, 1); - ReadNode memoryRead = graph.add(new ReadNode(load.object(), location, load.stamp(), BarrierType.NONE, compressible)); - // An unsafe read must not float outside its block otherwise - // it may float above an explicit null check on its object. - memoryRead.setGuard(AbstractBeginNode.prevBegin(load)); - graph.replaceFixedWithFixed(load, memoryRead); + if (tool.getLoweringType() != LoweringType.BEFORE_GUARDS) { + UnsafeLoadNode load = (UnsafeLoadNode) n; + assert load.kind() != Kind.Illegal; + boolean compressible = (!load.object().isNullConstant() && load.accessKind() == Kind.Object); + if (addReadBarrier(load, tool)) { + unsafeLoadSnippets.lower(load, tool); + } else { + IndexedLocationNode location = IndexedLocationNode.create(ANY_LOCATION, load.accessKind(), load.displacement(), load.offset(), graph, 1); + ReadNode memoryRead = graph.add(new ReadNode(load.object(), location, load.stamp(), BarrierType.NONE, compressible)); + // An unsafe read must not float outside its block otherwise + // it may float above an explicit null check on its object. + memoryRead.setGuard(AbstractBeginNode.prevBegin(load)); + graph.replaceFixedWithFixed(load, memoryRead); + } } } else if (n instanceof UnsafeStoreNode) { UnsafeStoreNode store = (UnsafeStoreNode) n; @@ -885,7 +887,7 @@ private static BarrierType getFieldStoreBarrierType(StoreFieldNode storeField) { BarrierType barrierType = BarrierType.NONE; - if (storeField.field().getKind() == Kind.Object && !storeField.value().objectStamp().alwaysNull()) { + if (storeField.field().getKind() == Kind.Object) { barrierType = BarrierType.IMPRECISE; } return barrierType; @@ -893,7 +895,7 @@ private static BarrierType getArrayStoreBarrierType(StoreIndexedNode store) { BarrierType barrierType = BarrierType.NONE; - if (store.elementKind() == Kind.Object && !store.value().objectStamp().alwaysNull()) { + if (store.elementKind() == Kind.Object) { barrierType = BarrierType.PRECISE; } return barrierType; @@ -901,12 +903,12 @@ private static BarrierType getUnsafeStoreBarrierType(UnsafeStoreNode store) { BarrierType barrierType = BarrierType.NONE; - if (store.value().kind() == Kind.Object && !store.value().objectStamp().alwaysNull()) { + if (store.value().kind() == Kind.Object) { ResolvedJavaType type = store.object().objectStamp().type(); - if (type != null && type.isArray()) { + if (type != null && !type.isArray()) { + barrierType = BarrierType.IMPRECISE; + } else { barrierType = BarrierType.PRECISE; - } else { - barrierType = BarrierType.IMPRECISE; } } return barrierType; @@ -914,12 +916,12 @@ private static BarrierType getCompareAndSwapBarrier(CompareAndSwapNode cas) { BarrierType barrierType = BarrierType.NONE; - if (cas.expected().kind() == Kind.Object && !cas.newValue().objectStamp().alwaysNull()) { + if (cas.expected().kind() == Kind.Object) { ResolvedJavaType type = cas.object().objectStamp().type(); - if (type != null && type.isArray()) { + if (type != null && !type.isArray()) { + barrierType = BarrierType.IMPRECISE; + } else { barrierType = BarrierType.PRECISE; - } else { - barrierType = BarrierType.IMPRECISE; } } return barrierType; diff -r 4c648c43150c -r 8ede7cd7318e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.java Fri Aug 02 16:21:02 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/WriteBarrierAdditionPhase.java Fri Aug 02 17:00:40 2013 +0200 @@ -56,7 +56,7 @@ private static void addReadNodeBarriers(ReadNode node, StructuredGraph graph) { if (node.getBarrierType() == BarrierType.PRECISE) { assert useG1GC(); - G1ReferentFieldReadBarrier barrier = graph.add(new G1ReferentFieldReadBarrier(node.object(), node, node.location(), false, 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."; @@ -75,7 +75,7 @@ } graph.addAfterFixed(node, graph.add(new G1PostWriteBarrier(node.object(), node.value(), node.location(), true))); } else { - graph.addAfterFixed(node, graph.add(new SerialWriteBarrier(node.object(), node.location(), true))); + graph.addAfterFixed(node, graph.add(new SerialWriteBarrier(node.object(), node.value(), node.location(), true))); } } else if (barrierType == BarrierType.IMPRECISE) { if (useG1GC()) { @@ -85,7 +85,7 @@ graph.addBeforeFixed(node, preBarrier); graph.addAfterFixed(node, graph.add(new G1PostWriteBarrier(node.object(), node.value(), node.location(), false))); } else { - graph.addAfterFixed(node, graph.add(new SerialWriteBarrier(node.object(), node.location(), false))); + graph.addAfterFixed(node, graph.add(new SerialWriteBarrier(node.object(), node.value(), node.location(), false))); } } else { assert barrierType == BarrierType.NONE; @@ -100,14 +100,14 @@ graph.addBeforeFixed(node, graph.add(new G1PreWriteBarrier(node.object(), node.getExpectedValue(), node.getLocation(), false, false))); graph.addAfterFixed(node, graph.add(new G1PostWriteBarrier(node.object(), node.getNewValue(), node.getLocation(), true))); } else { - graph.addAfterFixed(node, graph.add(new SerialWriteBarrier(node.object(), node.getLocation(), true))); + graph.addAfterFixed(node, graph.add(new SerialWriteBarrier(node.object(), node.getNewValue(), node.getLocation(), true))); } } else if (barrierType == BarrierType.IMPRECISE) { if (useG1GC()) { graph.addBeforeFixed(node, graph.add(new G1PreWriteBarrier(node.object(), node.getExpectedValue(), node.getLocation(), false, false))); graph.addAfterFixed(node, graph.add(new G1PostWriteBarrier(node.object(), node.getNewValue(), node.getLocation(), false))); } else { - graph.addAfterFixed(node, graph.add(new SerialWriteBarrier(node.object(), node.getLocation(), false))); + graph.addAfterFixed(node, graph.add(new SerialWriteBarrier(node.object(), node.getNewValue(), node.getLocation(), false))); } } else { assert barrierType == BarrierType.NONE; diff -r 4c648c43150c -r 8ede7cd7318e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/UnsafeLoadSnippets.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/UnsafeLoadSnippets.java Fri Aug 02 16:21:02 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/UnsafeLoadSnippets.java Fri Aug 02 17:00:40 2013 +0200 @@ -26,6 +26,7 @@ import static com.oracle.graal.replacements.SnippetTemplate.*; import com.oracle.graal.api.code.*; +import com.oracle.graal.hotspot.nodes.*; import com.oracle.graal.nodes.HeapAccess.BarrierType; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; @@ -39,11 +40,12 @@ @Snippet public static Object lowerUnsafeLoad(Object object, long offset, int disp) { + Object fixedObject = FixedValueAnchorNode.getObject(object); long displacement = disp + offset; if (object instanceof java.lang.ref.Reference && referentOffset() == displacement) { - return Word.fromObject(object).readObject((int) displacement, BarrierType.PRECISE, true); + return Word.fromObject(fixedObject).readObject((int) displacement, BarrierType.PRECISE, true); } else { - return Word.fromObject(object).readObject((int) displacement, BarrierType.NONE, true); + return Word.fromObject(fixedObject).readObject((int) displacement, BarrierType.NONE, true); } } diff -r 4c648c43150c -r 8ede7cd7318e graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/WriteBarrierSnippets.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/WriteBarrierSnippets.java Fri Aug 02 16:21:02 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/WriteBarrierSnippets.java Fri Aug 02 17:00:40 2013 +0200 @@ -52,14 +52,18 @@ private static final SnippetCounter serialArrayWriteBarrierCounter = new SnippetCounter(countersWriteBarriers, "serialArrayWriteBarrier", "Number of Serial Array Write Barriers"); @Snippet - public static void serialArrayWriteBarrier(Object obj, Object location, @ConstantParameter boolean usePrecise) { - Object object = FixedValueAnchorNode.getObject(obj); + public static void serialWriteBarrier(Object object, Object location, @ConstantParameter boolean usePrecise, @ConstantParameter boolean alwaysNull) { + // No barriers are added if we are always storing a null. + if (alwaysNull) { + return; + } + Object fixedObject = FixedValueAnchorNode.getObject(object); Pointer oop; if (usePrecise) { - oop = Word.fromArray(object, location); + oop = Word.fromArray(fixedObject, location); serialArrayWriteBarrierCounter.inc(); } else { - oop = Word.fromObject(object); + oop = Word.fromObject(fixedObject); serialFieldWriteBarrierCounter.inc(); } Word base = (Word) oop.unsignedShiftRight(cardTableShift()); @@ -75,6 +79,9 @@ @Snippet public static void serialArrayRangeWriteBarrier(Object object, int startIndex, int length) { + if (length == 0) { + return; + } Object dest = FixedValueAnchorNode.getObject(object); int cardShift = cardTableShift(); long cardStart = cardTableStart(); @@ -143,7 +150,11 @@ } @Snippet - public static void g1PostWriteBarrier(Object object, Object value, Object location, @ConstantParameter boolean usePrecise, @ConstantParameter boolean trace) { + public static void g1PostWriteBarrier(Object object, Object value, Object location, @ConstantParameter boolean usePrecise, @ConstantParameter boolean alwaysNull, @ConstantParameter boolean trace) { + // No barriers are added if we are always storing a null. + if (alwaysNull) { + return; + } Word thread = thread(); Object fixedObject = FixedValueAnchorNode.getObject(object); Object fixedValue = FixedValueAnchorNode.getObject(value); @@ -292,7 +303,7 @@ public static class Templates extends AbstractTemplates { - private final SnippetInfo serialArrayWriteBarrier = snippet(WriteBarrierSnippets.class, "serialArrayWriteBarrier"); + private final SnippetInfo serialWriteBarrier = snippet(WriteBarrierSnippets.class, "serialWriteBarrier"); private final SnippetInfo serialArrayRangeWriteBarrier = snippet(WriteBarrierSnippets.class, "serialArrayRangeWriteBarrier"); private final SnippetInfo g1PreWriteBarrier = snippet(WriteBarrierSnippets.class, "g1PreWriteBarrier"); @@ -305,12 +316,13 @@ super(runtime, replacements, target); } - public void lower(SerialWriteBarrier arrayWriteBarrier, @SuppressWarnings("unused") LoweringTool tool) { - Arguments args = new Arguments(serialArrayWriteBarrier); - args.add("obj", arrayWriteBarrier.getObject()); - args.add("location", arrayWriteBarrier.getLocation()); - args.addConst("usePrecise", arrayWriteBarrier.usePrecise()); - template(args).instantiate(runtime, arrayWriteBarrier, DEFAULT_REPLACER, args); + public void lower(SerialWriteBarrier writeBarrier, @SuppressWarnings("unused") LoweringTool tool) { + Arguments args = new Arguments(serialWriteBarrier); + args.add("object", writeBarrier.getObject()); + args.add("location", writeBarrier.getLocation()); + args.addConst("usePrecise", writeBarrier.usePrecise()); + args.addConst("alwaysNull", writeBarrier.getValue().objectStamp().alwaysNull()); + template(args).instantiate(runtime, writeBarrier, DEFAULT_REPLACER, args); } public void lower(SerialArrayRangeWriteBarrier arrayRangeWriteBarrier, @SuppressWarnings("unused") LoweringTool tool) { @@ -338,7 +350,7 @@ args.add("expectedObject", readBarrier.getExpectedObject()); args.add("location", readBarrier.getLocation()); args.addConst("doLoad", readBarrier.doLoad()); - args.addConst("nullCheck", readBarrier.getNullCheck()); + args.addConst("nullCheck", false); args.addConst("trace", traceBarrier()); template(args).instantiate(runtime, readBarrier, DEFAULT_REPLACER, args); } @@ -349,6 +361,7 @@ args.add("value", writeBarrierPost.getValue()); args.add("location", writeBarrierPost.getLocation()); args.addConst("usePrecise", writeBarrierPost.usePrecise()); + args.addConst("alwaysNull", writeBarrierPost.getValue().objectStamp().alwaysNull()); args.addConst("trace", traceBarrier()); template(args).instantiate(runtime, writeBarrierPost, DEFAULT_REPLACER, args); } diff -r 4c648c43150c -r 8ede7cd7318e graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/G1ReferentFieldReadBarrier.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/G1ReferentFieldReadBarrier.java Fri Aug 02 16:21:02 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/G1ReferentFieldReadBarrier.java Fri Aug 02 17:00:40 2013 +0200 @@ -22,7 +22,6 @@ */ package com.oracle.graal.nodes; -import com.oracle.graal.api.meta.*; import com.oracle.graal.nodes.extended.*; /** @@ -31,14 +30,11 @@ * {@code UnsafeLoadNode}). The return value of the read is passed to the snippet implementing the * read barrier and consequently is added to the SATB queue if the concurrent marker is enabled. */ -public class G1ReferentFieldReadBarrier extends WriteBarrier implements DeoptimizingNode { +public class G1ReferentFieldReadBarrier extends WriteBarrier { @Input private ValueNode expectedObject; private final boolean doLoad; - @Input private FrameState deoptimizationState; - private final boolean nullCheck; - public ValueNode getExpectedObject() { return expectedObject; } @@ -47,35 +43,9 @@ return doLoad; } - public boolean getNullCheck() { - return nullCheck; - } - - public G1ReferentFieldReadBarrier(ValueNode object, ValueNode expectedObject, LocationNode location, boolean doLoad, boolean nullCheck) { + public G1ReferentFieldReadBarrier(ValueNode object, ValueNode expectedObject, LocationNode location, boolean doLoad) { super(object, location, true); this.doLoad = doLoad; - this.nullCheck = nullCheck; this.expectedObject = expectedObject; } - - @Override - public boolean canDeoptimize() { - return nullCheck; - } - - @Override - public FrameState getDeoptimizationState() { - return deoptimizationState; - } - - @Override - public void setDeoptimizationState(FrameState state) { - updateUsages(deoptimizationState, state); - deoptimizationState = state; - } - - @Override - public DeoptimizationReason getDeoptimizationReason() { - return DeoptimizationReason.NullCheckException; - } } diff -r 4c648c43150c -r 8ede7cd7318e graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SerialWriteBarrier.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SerialWriteBarrier.java Fri Aug 02 16:21:02 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/SerialWriteBarrier.java Fri Aug 02 17:00:40 2013 +0200 @@ -26,7 +26,14 @@ public class SerialWriteBarrier extends WriteBarrier { - public SerialWriteBarrier(ValueNode object, LocationNode location, boolean precise) { + @Input private ValueNode value; + + public ValueNode getValue() { + return value; + } + + public SerialWriteBarrier(ValueNode object, ValueNode value, LocationNode location, boolean precise) { super(object, location, precise); + this.value = value; } } diff -r 4c648c43150c -r 8ede7cd7318e src/share/vm/code/codeCache.cpp --- a/src/share/vm/code/codeCache.cpp Fri Aug 02 16:21:02 2013 +0200 +++ b/src/share/vm/code/codeCache.cpp Fri Aug 02 17:00:40 2013 +0200 @@ -304,15 +304,6 @@ } } -#ifdef GRAAL -void CodeCache::alive_nmethods_do_graal_methods(OopClosure* closure) { - assert_locked_or_safepoint(CodeCache_lock); - FOR_ALL_ALIVE_NMETHODS(nm) { - nm->mark_graal_reference(closure); - } -} -#endif - int CodeCache::alignment_unit() { return (int)_heap->alignment_unit(); } diff -r 4c648c43150c -r 8ede7cd7318e src/share/vm/code/codeCache.hpp --- a/src/share/vm/code/codeCache.hpp Fri Aug 02 16:21:02 2013 +0200 +++ b/src/share/vm/code/codeCache.hpp Fri Aug 02 17:00:40 2013 +0200 @@ -85,12 +85,7 @@ static void blobs_do(CodeBlobClosure* f); // iterates over all CodeBlobs static void nmethods_do(void f(nmethod* nm)); // iterates over all nmethods static void alive_nmethods_do(void f(nmethod* nm)); // iterates over all alive nmethods -#ifdef GRAAL - //Special method iterating and marking all HotSpotNMethods which are weakly referenced by nmethods. - //This has to be done since the HotSpotNMethods are only referenced from within the nmethods and the GC - //believes they are dead since they are not marked. - static void alive_nmethods_do_graal_methods(OopClosure* closure); -#endif + // Lookup static CodeBlob* find_blob(void* start); static nmethod* find_nmethod(void* start); diff -r 4c648c43150c -r 8ede7cd7318e src/share/vm/code/nmethod.cpp --- a/src/share/vm/code/nmethod.cpp Fri Aug 02 16:21:02 2013 +0200 +++ b/src/share/vm/code/nmethod.cpp Fri Aug 02 17:00:40 2013 +0200 @@ -1861,14 +1861,6 @@ #endif } -#ifdef GRAAL -void nmethod::mark_graal_reference(OopClosure* f) { - if (_graal_installed_code != NULL) { - f->do_oop((oop*) &_graal_installed_code); - } -} -#endif - // Iterate over metadata calling this function. Used by RedefineClasses void nmethod::metadata_do(void f(Metadata*)) { address low_boundary = verified_entry_point(); diff -r 4c648c43150c -r 8ede7cd7318e src/share/vm/code/nmethod.hpp --- a/src/share/vm/code/nmethod.hpp Fri Aug 02 16:21:02 2013 +0200 +++ b/src/share/vm/code/nmethod.hpp Fri Aug 02 17:00:40 2013 +0200 @@ -747,10 +747,6 @@ nm->metadata_do(Metadata::mark_on_stack); } void metadata_do(void f(Metadata*)); - -#ifdef GRAAL - void mark_graal_reference(OopClosure* f); -#endif }; // Locks an nmethod so its code will not get removed and it will not diff -r 4c648c43150c -r 8ede7cd7318e src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp --- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Fri Aug 02 16:21:02 2013 +0200 +++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Fri Aug 02 17:00:40 2013 +0200 @@ -5127,12 +5127,20 @@ // Walk the code cache w/o buffering, because StarTask cannot handle // unaligned oop locations. - G1FilteredCodeBlobToOopClosure eager_scan_code_roots(this, scan_non_heap_roots); + G1FilteredCodeBlobToOopClosure eager_scan_cs_code_roots(this, scan_non_heap_roots); + + // Scan all code roots from stack + CodeBlobToOopClosure eager_scan_all_code_roots(scan_non_heap_roots, true); + CodeBlobToOopClosure* blobs = &eager_scan_cs_code_roots; + if (UseNewCode && g1_policy()->during_initial_mark_pause()) { + // during initial-mark we need to take care to follow all code roots + blobs = &eager_scan_all_code_roots; + } process_strong_roots(false, // no scoping; this is parallel code is_scavenging, so, &buf_scan_non_heap_roots, - &eager_scan_code_roots, + blobs, scan_klasses ); diff -r 4c648c43150c -r 8ede7cd7318e src/share/vm/memory/referenceProcessor.cpp --- a/src/share/vm/memory/referenceProcessor.cpp Fri Aug 02 16:21:02 2013 +0200 +++ b/src/share/vm/memory/referenceProcessor.cpp Fri Aug 02 17:00:40 2013 +0200 @@ -34,10 +34,6 @@ #include "oops/oop.inline.hpp" #include "runtime/java.hpp" #include "runtime/jniHandles.hpp" -#ifdef GRAAL -#include "code/codeCache.hpp" -#include "code/nmethod.hpp" -#endif ReferencePolicy* ReferenceProcessor::_always_clear_soft_ref_policy = NULL; ReferencePolicy* ReferenceProcessor::_default_soft_ref_policy = NULL; @@ -267,9 +263,6 @@ task_executor->set_single_threaded_mode(); } process_phaseJNI(is_alive, keep_alive, complete_gc); -#ifdef GRAAL - process_phaseGraalNMethods(keep_alive, complete_gc); -#endif } return ReferenceProcessorStats(soft_count, weak_count, final_count, phantom_count); @@ -312,15 +305,6 @@ complete_gc->do_void(); } -#ifdef GRAAL -void ReferenceProcessor::process_phaseGraalNMethods(OopClosure* keep_alive, - VoidClosure* complete_gc) { - CodeCache::alive_nmethods_do_graal_methods(keep_alive); - complete_gc->do_void(); -} - -#endif - template bool enqueue_discovered_ref_helper(ReferenceProcessor* ref, AbstractRefProcTaskExecutor* task_executor) { diff -r 4c648c43150c -r 8ede7cd7318e src/share/vm/memory/referenceProcessor.hpp --- a/src/share/vm/memory/referenceProcessor.hpp Fri Aug 02 16:21:02 2013 +0200 +++ b/src/share/vm/memory/referenceProcessor.hpp Fri Aug 02 17:00:40 2013 +0200 @@ -301,10 +301,6 @@ void process_phaseJNI(BoolObjectClosure* is_alive, OopClosure* keep_alive, VoidClosure* complete_gc); -#ifdef GRAAL - void process_phaseGraalNMethods(OopClosure* keep_alive, - VoidClosure* complete_gc); -#endif // Work methods used by the method process_discovered_reflist // Phase1: keep alive all those referents that are otherwise