src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/target/Backend.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/target/Backend.java Fri Mar 16 11:26:05 2018 +0000
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/target/Backend.java Fri Mar 16 22:59:32 2018 -0700
@@ -178,7 +178,7 @@
* @param method the method compiled to produce {@code compiledCode} or {@code null} if the
* input to {@code compResult} was not a {@link ResolvedJavaMethod}
* @param compilationRequest the compilation request or {@code null}
- * @param compilationResult the code to be compiled
+ * @param compilationResult the code to be installed
* @param predefinedInstalledCode a pre-allocated {@link InstalledCode} object to use as a
* reference to the installed code. If {@code null}, a new {@link InstalledCode}
* object will be created.
@@ -204,12 +204,13 @@
}
try (DebugContext.Scope s2 = debug.scope("CodeInstall", debugContext);
DebugContext.Activation a = debug.activate()) {
- preCodeInstallationTasks(tasks, compilationResult);
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;
@@ -229,9 +230,9 @@
}
}
- private static void preCodeInstallationTasks(CodeInstallationTask[] tasks, CompilationResult compilationResult) {
+ private static void preCodeInstallationTasks(CodeInstallationTask[] tasks, CompilationResult compilationResult, InstalledCode predefinedInstalledCode) {
for (CodeInstallationTask task : tasks) {
- task.preProcess(compilationResult);
+ task.preProcess(compilationResult, predefinedInstalledCode);
}
}
@@ -305,23 +306,29 @@
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}.
+ *
*/
- @SuppressWarnings("unused")
- public void preProcess(CompilationResult compilationResult) {
+ public void preProcess(CompilationResult compilationResult, InstalledCode predefinedInstalledCode) {
}
/**
* Task to run after the code is installed.
+ *
+ * @param installedCode a reference to the installed code
*/
- @SuppressWarnings("unused")
public void postProcess(InstalledCode installedCode) {
}
/**
* Invoked after {@link #preProcess} when code installation fails.
+ *
+ * @param cause the cause of the installation failure
*/
- @SuppressWarnings("unused")
- public void installFailed(Throwable t) {
+ public void installFailed(Throwable cause) {
}
}