< 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 >