< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/target/Backend.java

Print this page
rev 52509 : [mq]: graal2

*** 42,51 **** --- 42,52 ---- import org.graalvm.compiler.lir.framemap.FrameMapBuilder; import org.graalvm.compiler.lir.gen.LIRGenerationResult; import org.graalvm.compiler.lir.gen.LIRGeneratorTool; import org.graalvm.compiler.nodes.StructuredGraph; import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool; + import org.graalvm.compiler.options.OptionValues; import org.graalvm.compiler.phases.tiers.SuitesProvider; import org.graalvm.compiler.phases.tiers.TargetProvider; import org.graalvm.compiler.phases.util.Providers; import jdk.vm.ci.code.BailoutException;
*** 151,161 **** /** * Turns a Graal {@link CompilationResult} into a {@link CompiledCode} object that can be passed * to the VM for code installation. */ ! protected abstract CompiledCode createCompiledCode(ResolvedJavaMethod method, CompilationRequest compilationRequest, CompilationResult compilationResult); /** * @see #createInstalledCode(DebugContext, ResolvedJavaMethod, CompilationRequest, * CompilationResult, SpeculationLog, InstalledCode, boolean, Object[]) */ --- 152,162 ---- /** * Turns a Graal {@link CompilationResult} into a {@link CompiledCode} object that can be passed * to the VM for code installation. */ ! protected abstract CompiledCode createCompiledCode(ResolvedJavaMethod method, CompilationRequest compilationRequest, CompilationResult compilationResult, boolean isDefault, OptionValues options); /** * @see #createInstalledCode(DebugContext, ResolvedJavaMethod, CompilationRequest, * CompilationResult, SpeculationLog, InstalledCode, boolean, Object[]) */
*** 190,199 **** --- 191,203 ---- * code executed for standard calls to the method. This argument is ignored if * {@code compRequest == null}. * @param context a custom debug context to use for the code installation * @return a reference to the compiled and ready-to-run installed code * @throws BailoutException if the code installation failed + * @throws IllegalArgumentException if {@code installedCode != null} and this platform does not + * {@linkplain CodeCacheProvider#installCode support} a predefined + * {@link InstalledCode} object */ @SuppressWarnings("try") public InstalledCode createInstalledCode(DebugContext debug, ResolvedJavaMethod method, CompilationRequest compilationRequest, CompilationResult compilationResult, SpeculationLog speculationLog, InstalledCode predefinedInstalledCode, boolean isDefault, Object[] context) { Object[] debugContext = context != null ? context : new Object[]{getProviders().getCodeCache(), method, compilationResult};
*** 207,226 **** try (DebugContext.Scope s2 = debug.scope("CodeInstall", debugContext); DebugContext.Activation a = debug.activate()) { InstalledCode installedCode; try { ! preCodeInstallationTasks(tasks, compilationResult, predefinedInstalledCode); ! CompiledCode compiledCode = createCompiledCode(method, compilationRequest, compilationResult); installedCode = getProviders().getCodeCache().installCode(method, compiledCode, predefinedInstalledCode, speculationLog, isDefault); assert predefinedInstalledCode == null || installedCode == predefinedInstalledCode; } catch (Throwable t) { failCodeInstallationTasks(tasks, t); throw t; } ! postCodeInstallationTasks(tasks, installedCode); return installedCode; } catch (Throwable e) { throw debug.handle(e); } --- 211,230 ---- try (DebugContext.Scope s2 = debug.scope("CodeInstall", debugContext); DebugContext.Activation a = debug.activate()) { InstalledCode installedCode; try { ! preCodeInstallationTasks(tasks, compilationResult); ! CompiledCode compiledCode = createCompiledCode(method, compilationRequest, compilationResult, isDefault, debug.getOptions()); installedCode = getProviders().getCodeCache().installCode(method, compiledCode, predefinedInstalledCode, speculationLog, isDefault); assert predefinedInstalledCode == null || installedCode == predefinedInstalledCode; } catch (Throwable t) { failCodeInstallationTasks(tasks, t); throw t; } ! postCodeInstallationTasks(tasks, compilationResult, installedCode); return installedCode; } catch (Throwable e) { throw debug.handle(e); }
*** 230,249 **** for (CodeInstallationTask task : tasks) { task.installFailed(t); } } ! private static void preCodeInstallationTasks(CodeInstallationTask[] tasks, CompilationResult compilationResult, InstalledCode predefinedInstalledCode) { for (CodeInstallationTask task : tasks) { ! task.preProcess(compilationResult, predefinedInstalledCode); } } ! private static void postCodeInstallationTasks(CodeInstallationTask[] tasks, InstalledCode installedCode) { try { for (CodeInstallationTask task : tasks) { ! task.postProcess(installedCode); } } catch (Throwable t) { installedCode.invalidate(); throw t; } --- 234,253 ---- for (CodeInstallationTask task : tasks) { task.installFailed(t); } } ! private static void preCodeInstallationTasks(CodeInstallationTask[] tasks, CompilationResult compilationResult) { for (CodeInstallationTask task : tasks) { ! task.preProcess(compilationResult); } } ! private static void postCodeInstallationTasks(CodeInstallationTask[] tasks, CompilationResult compilationResult, InstalledCode installedCode) { try { for (CodeInstallationTask task : tasks) { ! task.postProcess(compilationResult, installedCode); } } catch (Throwable t) { installedCode.invalidate(); throw t; }
*** 308,330 **** public abstract static class CodeInstallationTask { /** * Task to run before code installation. * * @param compilationResult the code about to be installed - * @param predefinedInstalledCode a pre-allocated {@link InstalledCode} object that will be - * used as a reference to the installed code. May be {@code null}. * */ ! public void preProcess(CompilationResult compilationResult, InstalledCode predefinedInstalledCode) { } /** * Task to run after the code is installed. * * @param installedCode a reference to the installed code */ ! public void postProcess(InstalledCode installedCode) { } /** * Invoked after {@link #preProcess} when code installation fails. * --- 312,333 ---- public abstract static class CodeInstallationTask { /** * Task to run before code installation. * * @param compilationResult the code about to be installed * */ ! public void preProcess(CompilationResult compilationResult) { } /** * Task to run after the code is installed. * + * @param compilationResult the code about to be installed * @param installedCode a reference to the installed code */ ! public void postProcess(CompilationResult compilationResult, InstalledCode installedCode) { } /** * Invoked after {@link #preProcess} when code installation fails. *
< prev index next >