diff -r 35b4050fe8fc src/hotspot/share/jvmci/jvmci_globals.cpp --- a/src/hotspot/share/jvmci/jvmci_globals.cpp Wed Jul 11 16:08:59 2018 +0200 +++ b/src/hotspot/share/jvmci/jvmci_globals.cpp Wed Jul 11 17:18:03 2018 +0200 @@ -115,11 +115,11 @@ return true; } void JVMCIGlobals::check_jvmci_supported_gc() { if (EnableJVMCI) { // Check if selected GC is supported by JVMCI and Java compiler - if (!(UseSerialGC || UseParallelGC || UseParallelOldGC || UseG1GC)) { + if (!(UseSerialGC || UseParallelGC || UseParallelOldGC || UseG1GC || UseEpsilonGC)) { vm_exit_during_initialization("JVMCI Compiler does not support selected GC", GCConfig::hs_err_name()); FLAG_SET_DEFAULT(EnableJVMCI, false); FLAG_SET_DEFAULT(UseJVMCICompiler, false); } } diff -r 35b4050fe8fc src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/GraalHotSpotVMConfig.java --- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/GraalHotSpotVMConfig.java Wed Jul 11 16:08:59 2018 +0200 +++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/GraalHotSpotVMConfig.java Wed Jul 11 17:18:03 2018 +0200 @@ -145,10 +145,11 @@ public boolean inlineNotifyAll() { return inlineNotify && notifyAllAddress != 0; } public final boolean useG1GC = getFlag("UseG1GC", Boolean.class); + public final boolean useEpsilonGC = getFlag("UseEpsilonGC", Boolean.class); public final boolean useCMSGC = getFlag("UseConcMarkSweepGC", Boolean.class); public final int allocatePrefetchStyle = getFlag("AllocatePrefetchStyle", Integer.class); public final int allocatePrefetchInstr = getFlag("AllocatePrefetchInstr", Integer.class); public final int allocatePrefetchLines = getFlag("AllocatePrefetchLines", Integer.class); diff -r 35b4050fe8fc src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotGraalRuntime.java --- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotGraalRuntime.java Wed Jul 11 16:08:59 2018 +0200 +++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotGraalRuntime.java Wed Jul 11 17:18:03 2018 +0200 @@ -31,10 +31,11 @@ import static org.graalvm.compiler.debug.DebugContext.DEFAULT_LOG_STREAM; import static org.graalvm.compiler.hotspot.HotSpotGraalRuntime.HotSpotGC.CMS; import static org.graalvm.compiler.hotspot.HotSpotGraalRuntime.HotSpotGC.G1; import static org.graalvm.compiler.hotspot.HotSpotGraalRuntime.HotSpotGC.Parallel; import static org.graalvm.compiler.hotspot.HotSpotGraalRuntime.HotSpotGC.Serial; +import static org.graalvm.compiler.hotspot.HotSpotGraalRuntime.HotSpotGC.Epsilon; import java.util.ArrayList; import java.util.EnumMap; import java.util.List; import java.util.Map; @@ -164,11 +165,11 @@ } /** * Set of GCs supported by Graal. */ - private static final HotSpotGC[] SUPPORTED_GCS = {Serial, Parallel, CMS, G1}; + private static final HotSpotGC[] SUPPORTED_GCS = {Serial, Parallel, CMS, G1, Epsilon}; /** * @param nameQualifier a qualifier to be added to this runtime's {@linkplain #getName() name} * @param compilerConfigurationFactory factory for the compiler configuration * {@link CompilerConfigurationFactory#selectFactory(String, OptionValues)} diff -r 35b4050fe8fc src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/phases/WriteBarrierAdditionPhase.java --- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/phases/WriteBarrierAdditionPhase.java Wed Jul 11 16:08:59 2018 +0200 +++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/phases/WriteBarrierAdditionPhase.java Wed Jul 11 17:18:03 2018 +0200 @@ -126,10 +126,12 @@ // The pre barrier does nothing if the value being read is null, so it can // be explicitly skipped when this is an initializing store. addG1PreWriteBarrier(node, node.getAddress(), null, true, node.getNullCheck(), graph); } addG1PostWriteBarrier(node, node.getAddress(), node.value(), precise, graph); + } else if (config.useEpsilonGC) { + // do nothing } else { addSerialPostWriteBarrier(node, node.getAddress(), node.value(), precise, graph); } break; default: @@ -147,10 +149,12 @@ case PRECISE: boolean precise = barrierType == BarrierType.PRECISE; if (config.useG1GC) { addG1PreWriteBarrier(node, node.getAddress(), null, true, node.getNullCheck(), graph); addG1PostWriteBarrier(node, node.getAddress(), node.getNewValue(), precise, graph); + } else if (config.useEpsilonGC) { + // do nothing } else { addSerialPostWriteBarrier(node, node.getAddress(), node.getNewValue(), precise, graph); } break; default: @@ -168,10 +172,12 @@ case PRECISE: boolean precise = barrierType == BarrierType.PRECISE; if (config.useG1GC) { addG1PreWriteBarrier(node, node.getAddress(), node.getExpectedValue(), false, false, graph); addG1PostWriteBarrier(node, node.getAddress(), node.getNewValue(), precise, graph); + } else if (config.useEpsilonGC) { + // do nothing } else { addSerialPostWriteBarrier(node, node.getAddress(), node.getNewValue(), precise, graph); } break; default: @@ -187,10 +193,12 @@ G1ArrayRangePreWriteBarrier g1ArrayRangePreWriteBarrier = graph.add(new G1ArrayRangePreWriteBarrier(write.getAddress(), write.getLength(), write.getElementStride())); graph.addBeforeFixed(write.asNode(), g1ArrayRangePreWriteBarrier); } G1ArrayRangePostWriteBarrier g1ArrayRangePostWriteBarrier = graph.add(new G1ArrayRangePostWriteBarrier(write.getAddress(), write.getLength(), write.getElementStride())); graph.addAfterFixed(write.asNode(), g1ArrayRangePostWriteBarrier); + } else if (config.useEpsilonGC) { + // do nothing } else { SerialArrayRangeWriteBarrier serialArrayRangeWriteBarrier = graph.add(new SerialArrayRangeWriteBarrier(write.getAddress(), write.getLength(), write.getElementStride())); graph.addAfterFixed(write.asNode(), serialArrayRangeWriteBarrier); } } diff -r 35b4050fe8fc src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/HotSpotReplacementsUtil.java --- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/HotSpotReplacementsUtil.java Wed Jul 11 16:08:59 2018 +0200 +++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/HotSpotReplacementsUtil.java Wed Jul 11 17:18:03 2018 +0200 @@ -710,10 +710,15 @@ public static boolean useG1GC(@InjectedParameter GraalHotSpotVMConfig config) { return config.useG1GC; } @Fold + public static boolean useEpsilonGC(@InjectedParameter GraalHotSpotVMConfig config) { + return config.useEpsilonGC; + } + + @Fold public static boolean useCMSIncrementalMode(@InjectedParameter GraalHotSpotVMConfig config) { return config.cmsIncrementalMode; } @Fold diff -r 35b4050fe8fc src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/stubs/NewInstanceStub.java --- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/stubs/NewInstanceStub.java Wed Jul 11 16:08:59 2018 +0200 +++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/stubs/NewInstanceStub.java Wed Jul 11 17:18:03 2018 +0200 @@ -57,10 +57,11 @@ import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.tlabSlowAllocationsOffset; import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.tlabStats; import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.useCMSIncrementalMode; import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.useFastTLABRefill; import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.useG1GC; +import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.useEpsilonGC; import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.useTLAB; import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.wordSize; import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.writeTlabTop; import static org.graalvm.compiler.hotspot.stubs.StubUtil.handlePendingException; import static org.graalvm.compiler.hotspot.stubs.StubUtil.newDescriptor; @@ -184,11 +185,11 @@ * the operation was unsuccessful */ static Word refillAllocate(Word thread, KlassPointer intArrayHub, int sizeInBytes, boolean log) { // If G1 is enabled, the "eden" allocation space is not the same always // and therefore we have to go to slowpath to allocate a new TLAB. - if (useG1GC(INJECTED_VMCONFIG)) { + if (useG1GC(INJECTED_VMCONFIG) || useEpsilonGC(INJECTED_VMCONFIG)) { return WordFactory.zero(); } if (!useTLAB(INJECTED_VMCONFIG)) { return edenAllocate(WordFactory.unsigned(sizeInBytes), log); }