hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotGraalRuntime.java
--- a/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotGraalRuntime.java Mon Dec 12 16:16:27 2016 +0300
+++ b/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotGraalRuntime.java Wed Mar 22 13:42:45 2017 -0700
@@ -22,22 +22,21 @@
*/
package org.graalvm.compiler.hotspot;
+import static jdk.vm.ci.common.InitTimer.timer;
+import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.runtime;
+import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayIndexScale;
import static org.graalvm.compiler.core.common.GraalOptions.GeneratePIC;
+import static org.graalvm.compiler.core.common.GraalOptions.HotSpotPrintInlining;
import static org.graalvm.compiler.debug.GraalDebugConfig.areScopedGlobalMetricsEnabled;
import static org.graalvm.compiler.debug.GraalDebugConfig.Options.DebugValueSummary;
import static org.graalvm.compiler.debug.GraalDebugConfig.Options.Dump;
import static org.graalvm.compiler.debug.GraalDebugConfig.Options.Log;
import static org.graalvm.compiler.debug.GraalDebugConfig.Options.MethodFilter;
import static org.graalvm.compiler.debug.GraalDebugConfig.Options.Verify;
-import static jdk.vm.ci.common.InitTimer.timer;
-import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.runtime;
-import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider.getArrayIndexScale;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.ArrayList;
+import java.util.List;
-import org.graalvm.compiler.api.collections.CollectionsProvider;
import org.graalvm.compiler.api.replacements.SnippetReflectionProvider;
import org.graalvm.compiler.api.runtime.GraalRuntime;
import org.graalvm.compiler.core.common.GraalOptions;
@@ -48,15 +47,18 @@
import org.graalvm.compiler.debug.TTY;
import org.graalvm.compiler.debug.internal.DebugValuesPrinter;
import org.graalvm.compiler.debug.internal.method.MethodMetricsPrinter;
-import org.graalvm.compiler.graph.DefaultNodeCollectionsProvider;
-import org.graalvm.compiler.graph.NodeCollectionsProvider;
+import org.graalvm.compiler.hotspot.CompilationStatistics.Options;
import org.graalvm.compiler.hotspot.CompilerConfigurationFactory.BackendMap;
import org.graalvm.compiler.hotspot.debug.BenchmarkCounters;
import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
import org.graalvm.compiler.nodes.spi.StampProvider;
+import org.graalvm.compiler.options.OptionValues;
import org.graalvm.compiler.phases.tiers.CompilerConfiguration;
import org.graalvm.compiler.replacements.SnippetCounter;
+import org.graalvm.compiler.replacements.SnippetCounter.Group;
import org.graalvm.compiler.runtime.RuntimeProvider;
+import org.graalvm.util.EconomicMap;
+import org.graalvm.util.Equivalence;
import jdk.vm.ci.code.Architecture;
import jdk.vm.ci.code.stack.StackIntrospection;
@@ -87,27 +89,31 @@
private final HotSpotBackend hostBackend;
private DebugValuesPrinter debugValuesPrinter;
+ private final List<SnippetCounter.Group> snippetCounterGroups;
- private final Map<Class<? extends Architecture>, HotSpotBackend> backends = new HashMap<>();
+ private final EconomicMap<Class<? extends Architecture>, HotSpotBackend> backends = EconomicMap.create(Equivalence.IDENTITY);
private final GraalHotSpotVMConfig config;
+ private final OptionValues options;
+
/**
* @param compilerConfigurationFactory factory for the compiler configuration
- * {@link CompilerConfigurationFactory#selectFactory(String)}
+ * {@link CompilerConfigurationFactory#selectFactory(String, OptionValues)}
*/
@SuppressWarnings("try")
- HotSpotGraalRuntime(HotSpotJVMCIRuntime jvmciRuntime, CompilerConfigurationFactory compilerConfigurationFactory) {
-
+ HotSpotGraalRuntime(HotSpotJVMCIRuntime jvmciRuntime, CompilerConfigurationFactory compilerConfigurationFactory, OptionValues initialOptions) {
HotSpotVMConfigStore store = jvmciRuntime.getConfigStore();
- config = GeneratePIC.getValue() ? new AOTGraalHotSpotVMConfig(store) : new GraalHotSpotVMConfig(store);
- CompileTheWorldOptions.overrideWithNativeOptions(config);
+ config = GeneratePIC.getValue(initialOptions) ? new AOTGraalHotSpotVMConfig(store) : new GraalHotSpotVMConfig(store);
// Only set HotSpotPrintInlining if it still has its default value (false).
- if (GraalOptions.HotSpotPrintInlining.getValue() == false) {
- GraalOptions.HotSpotPrintInlining.setValue(config.printInlining);
+ if (GraalOptions.HotSpotPrintInlining.getValue(initialOptions) == false && config.printInlining) {
+ options = new OptionValues(initialOptions, HotSpotPrintInlining, true);
+ } else {
+ options = initialOptions;
}
+ snippetCounterGroups = GraalOptions.SnippetCounters.getValue(options) ? new ArrayList<>() : null;
CompilerConfiguration compilerConfiguration = compilerConfigurationFactory.createCompilerConfiguration();
BackendMap backendMap = compilerConfigurationFactory.createBackendMap();
@@ -136,16 +142,16 @@
}
}
- if (Log.getValue() == null && !areScopedGlobalMetricsEnabled() && Dump.getValue() == null && Verify.getValue() == null) {
- if (MethodFilter.getValue() != null && !Debug.isEnabled()) {
+ if (Log.getValue(options) == null && !areScopedGlobalMetricsEnabled(options) && Dump.getValue(options) == null && Verify.getValue(options) == null) {
+ if (MethodFilter.getValue(options) != null && !Debug.isEnabled()) {
TTY.println("WARNING: Ignoring MethodFilter option since Log, Meter, Time, TrackMemUse, Dump and Verify options are all null");
}
}
if (Debug.isEnabled()) {
- DebugEnvironment.initialize(TTY.out, hostBackend.getProviders().getSnippetReflection());
+ DebugEnvironment.ensureInitialized(options, hostBackend.getProviders().getSnippetReflection());
- String summary = DebugValueSummary.getValue();
+ String summary = DebugValueSummary.getValue(options);
if (summary != null) {
switch (summary) {
case "Name":
@@ -160,12 +166,12 @@
}
if (Debug.areUnconditionalCountersEnabled() || Debug.areUnconditionalTimersEnabled() || Debug.areUnconditionalMethodMetricsEnabled() ||
- (Debug.isEnabled() && areScopedGlobalMetricsEnabled()) || (Debug.isEnabled() && Debug.isMethodFilteringEnabled())) {
+ (Debug.isEnabled() && areScopedGlobalMetricsEnabled(options)) || (Debug.isEnabled() && Debug.isMethodFilteringEnabled())) {
// This must be created here to avoid loading the DebugValuesPrinter class
// during shutdown() which in turn can cause a deadlock
int mmPrinterType = 0;
- mmPrinterType |= MethodMetricsPrinter.Options.MethodMeterPrintAscii.getValue() ? 1 : 0;
- mmPrinterType |= MethodMetricsPrinter.Options.MethodMeterFile.getValue() != null ? 2 : 0;
+ mmPrinterType |= MethodMetricsPrinter.Options.MethodMeterPrintAscii.getValue(options) ? 1 : 0;
+ mmPrinterType |= MethodMetricsPrinter.Options.MethodMeterFile.getValue(options) != null ? 2 : 0;
switch (mmPrinterType) {
case 0:
debugValuesPrinter = new DebugValuesPrinter();
@@ -188,17 +194,17 @@
// Complete initialization of backends
try (InitTimer st = timer(hostBackend.getTarget().arch.getName(), ".completeInitialization")) {
- hostBackend.completeInitialization(jvmciRuntime);
+ hostBackend.completeInitialization(jvmciRuntime, options);
}
- for (HotSpotBackend backend : backends.values()) {
+ for (HotSpotBackend backend : backends.getValues()) {
if (backend != hostBackend) {
try (InitTimer st = timer(backend.getTarget().arch.getName(), ".completeInitialization")) {
- backend.completeInitialization(jvmciRuntime);
+ backend.completeInitialization(jvmciRuntime, options);
}
}
}
- BenchmarkCounters.initialize(jvmciRuntime);
+ BenchmarkCounters.initialize(jvmciRuntime, options);
assert checkArrayIndexScaleInvariants();
@@ -224,19 +230,32 @@
}
@Override
+ public OptionValues getOptions() {
+ return options;
+ }
+
+ @Override
+ public Group createSnippetCounterGroup(String name) {
+ if (snippetCounterGroups != null) {
+ Group group = new Group(name);
+ snippetCounterGroups.add(group);
+ return group;
+ }
+ return null;
+ }
+
+ @Override
public String getName() {
return getClass().getSimpleName();
}
- private final NodeCollectionsProvider nodeCollectionsProvider = new DefaultNodeCollectionsProvider();
-
@SuppressWarnings("unchecked")
@Override
public <T> T getCapability(Class<T> clazz) {
if (clazz == RuntimeProvider.class) {
return (T) this;
- } else if (clazz == CollectionsProvider.class || clazz == NodeCollectionsProvider.class) {
- return (T) nodeCollectionsProvider;
+ } else if (clazz == OptionValues.class) {
+ return (T) options;
} else if (clazz == StackIntrospection.class) {
return (T) this;
} else if (clazz == SnippetReflectionProvider.class) {
@@ -258,10 +277,6 @@
return backends.get(arch);
}
- public Map<Class<? extends Architecture>, HotSpotBackend> getBackends() {
- return Collections.unmodifiableMap(backends);
- }
-
private long runtimeStartTime;
/**
@@ -269,18 +284,24 @@
*
* @param phase the execution phase being entered
*/
- static void phaseTransition(String phase) {
- CompilationStatistics.clear(phase);
+ void phaseTransition(String phase) {
+ if (Options.UseCompilationStatistics.getValue(options)) {
+ CompilationStatistics.clear(phase);
+ }
}
void shutdown() {
if (debugValuesPrinter != null) {
- debugValuesPrinter.printDebugValues();
+ debugValuesPrinter.printDebugValues(options);
}
phaseTransition("final");
- SnippetCounter.printGroups(TTY.out().out());
- BenchmarkCounters.shutdown(runtime(), runtimeStartTime);
+ if (snippetCounterGroups != null) {
+ for (Group group : snippetCounterGroups) {
+ TTY.out().out().println(group);
+ }
+ }
+ BenchmarkCounters.shutdown(runtime(), options, runtimeStartTime);
}
void clearMeters() {