src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotGraalCompiler.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotGraalCompiler.java	Fri Jul  7 09:30:12 2017
--- new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotGraalCompiler.java	Fri Jul  7 09:30:12 2017

*** 25,49 **** --- 25,49 ---- import static org.graalvm.compiler.core.common.GraalOptions.OptAssumptions; import static org.graalvm.compiler.nodes.graphbuilderconf.IntrinsicContext.CompilationContext.ROOT_COMPILATION; import java.io.ByteArrayOutputStream; import java.io.PrintStream; + import java.util.Collections; import java.util.Formattable; import java.util.Formatter; + import java.util.List; import org.graalvm.compiler.api.runtime.GraalJVMCICompiler; import org.graalvm.compiler.bytecode.Bytecode; import org.graalvm.compiler.code.CompilationResult; import org.graalvm.compiler.core.GraalCompiler; import org.graalvm.compiler.core.common.CompilationIdentifier; import org.graalvm.compiler.core.common.util.CompilationAlarm; ! import org.graalvm.compiler.debug.DebugHandlersFactory; ! import org.graalvm.compiler.debug.DebugConfigScope; ! import org.graalvm.compiler.debug.DebugEnvironment; ! import org.graalvm.compiler.debug.GraalDebugConfig; import org.graalvm.compiler.debug.TopLevelDebugConfig; import org.graalvm.compiler.debug.internal.method.MethodMetricsRootScopeInfo; ! import org.graalvm.compiler.debug.DebugContext; ! import org.graalvm.compiler.debug.DebugContext.Activation; ! import org.graalvm.compiler.debug.DebugOptions; import org.graalvm.compiler.hotspot.CompilationCounters.Options; import org.graalvm.compiler.hotspot.meta.HotSpotProviders; import org.graalvm.compiler.hotspot.phases.OnStackReplacementPhase; import org.graalvm.compiler.java.GraphBuilderPhase; import org.graalvm.compiler.lir.asm.CompilationResultBuilderFactory;
*** 58,67 **** --- 58,68 ---- import org.graalvm.compiler.phases.OptimisticOptimizations; import org.graalvm.compiler.phases.OptimisticOptimizations.Optimization; import org.graalvm.compiler.phases.PhaseSuite; import org.graalvm.compiler.phases.tiers.HighTierContext; import org.graalvm.compiler.phases.tiers.Suites; + import org.graalvm.compiler.printer.GraalDebugHandlersFactory; import jdk.vm.ci.code.CompilationRequest; import jdk.vm.ci.code.CompilationRequestResult; import jdk.vm.ci.hotspot.HotSpotCompilationRequest; import jdk.vm.ci.hotspot.HotSpotCompilationRequestResult;
*** 78,94 **** --- 79,103 ---- private final HotSpotJVMCIRuntimeProvider jvmciRuntime; private final HotSpotGraalRuntimeProvider graalRuntime; private final CompilationCounters compilationCounters; private final BootstrapWatchDog bootstrapWatchDog; + private List<DebugHandlersFactory> factories; HotSpotGraalCompiler(HotSpotJVMCIRuntimeProvider jvmciRuntime, HotSpotGraalRuntimeProvider graalRuntime, OptionValues options) { this.jvmciRuntime = jvmciRuntime; this.graalRuntime = graalRuntime; // It is sufficient to have one compilation counter object per Graal compiler object. this.compilationCounters = Options.CompilationCountLimit.getValue(options) > 0 ? new CompilationCounters(options) : null; ! this.bootstrapWatchDog = graalRuntime.isBootstrapping() && !GraalDebugConfig.Options.BootstrapInitializeOnly.getValue(options) ? BootstrapWatchDog.maybeCreate(graalRuntime) : null; + } + + public List<DebugHandlersFactory> getDebugHandlersFactories() { + if (factories == null) { + factories = Collections.singletonList(new GraalDebugHandlersFactory(graalRuntime.getHostProviders().getSnippetReflection())); + } + return factories; } @Override public HotSpotGraalRuntimeProvider getGraalRuntime() { return graalRuntime;
*** 102,157 **** --- 111,165 ---- @SuppressWarnings("try") CompilationRequestResult compileMethod(CompilationRequest request, boolean installAsDefault) { if (graalRuntime.isShutdown()) { return HotSpotCompilationRequestResult.failure(String.format("Shutdown entered"), false); } OptionValues options = graalRuntime.getOptions(request.getMethod()); + + ResolvedJavaMethod method = request.getMethod(); + OptionValues options = graalRuntime.getOptions(method); if (graalRuntime.isBootstrapping()) { ! if (GraalDebugConfig.Options.BootstrapInitializeOnly.getValue(options)) { ! return HotSpotCompilationRequestResult.failure(String.format("Skip compilation because %s is enabled", GraalDebugConfig.Options.BootstrapInitializeOnly.getName()), true); ! return HotSpotCompilationRequestResult.failure(String.format("Skip compilation because %s is enabled", DebugOptions.BootstrapInitializeOnly.getName()), true); } if (bootstrapWatchDog != null) { if (bootstrapWatchDog.hitCriticalCompilationRateOrTimeout()) { // Drain the compilation queue to expedite completion of the bootstrap return HotSpotCompilationRequestResult.failure("hit critical bootstrap compilation rate or timeout", true); } } } ResolvedJavaMethod method = request.getMethod(); HotSpotCompilationRequest hsRequest = (HotSpotCompilationRequest) request; try (CompilationWatchDog w1 = CompilationWatchDog.watch(method, hsRequest.getId(), options); BootstrapWatchDog.Watch w2 = bootstrapWatchDog == null ? null : bootstrapWatchDog.watch(request); CompilationAlarm alarm = CompilationAlarm.trackCompilationPeriod(options);) { if (compilationCounters != null) { compilationCounters.countCompilation(method); } // Ensure a debug configuration for this thread is initialized DebugEnvironment.ensureInitialized(options, graalRuntime.getHostProviders().getSnippetReflection()); CompilationTask task = new CompilationTask(jvmciRuntime, this, hsRequest, true, installAsDefault, options); ! CompilationRequestResult r = null; ! try (DebugConfigScope dcs = Debug.setConfig(new TopLevelDebugConfig()); ! Debug.Scope s = Debug.methodMetricsScope("HotSpotGraalCompiler", MethodMetricsRootScopeInfo.create(method), true, method)) { ! r = task.runCompilation(); ! try (DebugContext debug = graalRuntime.openDebugContext(options, task.getCompilationIdentifier(), method, getDebugHandlersFactories()); ! Activation a = debug.activate()) { ! r = task.runCompilation(debug); } assert r != null; return r; } } ! public CompilationResult compile(ResolvedJavaMethod method, int entryBCI, boolean useProfilingInfo, CompilationIdentifier compilationId, OptionValues options, DebugContext debug) { HotSpotBackend backend = graalRuntime.getHostBackend(); HotSpotProviders providers = backend.getProviders(); final boolean isOSR = entryBCI != JVMCICompiler.INVOCATION_ENTRY_BCI; ! StructuredGraph graph = method.isNative() || isOSR ? null : getIntrinsicGraph(method, providers, compilationId, options, debug); if (graph == null) { SpeculationLog speculationLog = method.getSpeculationLog(); if (speculationLog != null) { speculationLog.collectFailedSpeculations(); } ! graph = new StructuredGraph.Builder(options, debug, AllowAssumptions.ifTrue(OptAssumptions.getValue(options))).method(method).entryBCI(entryBCI).speculationLog( speculationLog).useProfilingInfo(useProfilingInfo).compilationId(compilationId).build(); } Suites suites = getSuites(providers, options); LIRSuites lirSuites = getLIRSuites(providers, options);
*** 184,213 **** --- 192,222 ---- * installed for the method. * * @param method * @param compilationId * @param options + * @param debug * @return an intrinsic graph that can be compiled and installed for {@code method} or null */ @SuppressWarnings("try") ! public StructuredGraph getIntrinsicGraph(ResolvedJavaMethod method, HotSpotProviders providers, CompilationIdentifier compilationId, OptionValues options, DebugContext debug) { Replacements replacements = providers.getReplacements(); Bytecode subst = replacements.getSubstitutionBytecode(method); if (subst != null) { ResolvedJavaMethod substMethod = subst.getMethod(); assert !substMethod.equals(method); ! StructuredGraph graph = new StructuredGraph.Builder(options, debug, AllowAssumptions.YES).method(substMethod).compilationId(compilationId).build(); ! try (Debug.Scope scope = Debug.scope("GetIntrinsicGraph", graph)) { ! try (DebugContext.Scope scope = debug.scope("GetIntrinsicGraph", graph)) { Plugins plugins = new Plugins(providers.getGraphBuilderPlugins()); GraphBuilderConfiguration config = GraphBuilderConfiguration.getSnippetDefault(plugins); IntrinsicContext initialReplacementContext = new IntrinsicContext(method, substMethod, subst.getOrigin(), ROOT_COMPILATION); new GraphBuilderPhase.Instance(providers.getMetaAccess(), providers.getStampProvider(), providers.getConstantReflection(), providers.getConstantFieldProvider(), config, OptimisticOptimizations.NONE, initialReplacementContext).apply(graph); assert !graph.isFrozen(); return graph; } catch (Throwable e) { ! Debug.handle(e); ! debug.handle(e); } } return null; }

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/HotSpotGraalCompiler.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File