< 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




 178      * @param method the method compiled to produce {@code compiledCode} or {@code null} if the
 179      *            input to {@code compResult} was not a {@link ResolvedJavaMethod}
 180      * @param compilationRequest the compilation request or {@code null}
 181      * @param compilationResult the code to be compiled
 182      * @param predefinedInstalledCode a pre-allocated {@link InstalledCode} object to use as a
 183      *            reference to the installed code. If {@code null}, a new {@link InstalledCode}
 184      *            object will be created.
 185      * @param speculationLog the speculation log to be used
 186      * @param isDefault specifies if the installed code should be made the default implementation of
 187      *            {@code compRequest.getMethod()}. The default implementation for a method is the
 188      *            code executed for standard calls to the method. This argument is ignored if
 189      *            {@code compRequest == null}.
 190      * @param context a custom debug context to use for the code installation
 191      * @return a reference to the compiled and ready-to-run installed code
 192      * @throws BailoutException if the code installation failed
 193      */
 194     @SuppressWarnings("try")
 195     public InstalledCode createInstalledCode(DebugContext debug, ResolvedJavaMethod method, CompilationRequest compilationRequest, CompilationResult compilationResult,
 196                     SpeculationLog speculationLog, InstalledCode predefinedInstalledCode, boolean isDefault, Object[] context) {
 197         Object[] debugContext = context != null ? context : new Object[]{getProviders().getCodeCache(), method, compilationResult};
 198         CodeInstallationTask[] tasks = new CodeInstallationTask[codeInstallationTaskFactories.size()];


 199         for (int i = 0; i < codeInstallationTaskFactories.size(); i++) {
 200             tasks[i] = codeInstallationTaskFactories.get(i).create();

 201         }
 202         try (DebugContext.Scope s2 = debug.scope("CodeInstall", debugContext);
 203                         DebugContext.Activation a = debug.activate()) {
 204             for (CodeInstallationTask task : tasks) {
 205                 task.preProcess(compilationResult);
 206             }
 207 
 208             CompiledCode compiledCode = createCompiledCode(method, compilationRequest, compilationResult);
 209             InstalledCode installedCode = getProviders().getCodeCache().installCode(method, compiledCode, predefinedInstalledCode, speculationLog, isDefault);
 210 
 211             // Run post-code installation tasks.
 212             try {
 213                 for (CodeInstallationTask task : tasks) {
 214                     task.postProcess(installedCode);
 215                 }
 216                 for (CodeInstallationTask task : tasks) {
 217                     task.releaseInstallation(installedCode);
 218                 }
 219             } catch (Throwable t) {
 220                 installedCode.invalidate();




 178      * @param method the method compiled to produce {@code compiledCode} or {@code null} if the
 179      *            input to {@code compResult} was not a {@link ResolvedJavaMethod}
 180      * @param compilationRequest the compilation request or {@code null}
 181      * @param compilationResult the code to be compiled
 182      * @param predefinedInstalledCode a pre-allocated {@link InstalledCode} object to use as a
 183      *            reference to the installed code. If {@code null}, a new {@link InstalledCode}
 184      *            object will be created.
 185      * @param speculationLog the speculation log to be used
 186      * @param isDefault specifies if the installed code should be made the default implementation of
 187      *            {@code compRequest.getMethod()}. The default implementation for a method is the
 188      *            code executed for standard calls to the method. This argument is ignored if
 189      *            {@code compRequest == null}.
 190      * @param context a custom debug context to use for the code installation
 191      * @return a reference to the compiled and ready-to-run installed code
 192      * @throws BailoutException if the code installation failed
 193      */
 194     @SuppressWarnings("try")
 195     public InstalledCode createInstalledCode(DebugContext debug, ResolvedJavaMethod method, CompilationRequest compilationRequest, CompilationResult compilationResult,
 196                     SpeculationLog speculationLog, InstalledCode predefinedInstalledCode, boolean isDefault, Object[] context) {
 197         Object[] debugContext = context != null ? context : new Object[]{getProviders().getCodeCache(), method, compilationResult};
 198         CodeInstallationTask[] tasks;
 199         synchronized (this) {
 200             tasks = new CodeInstallationTask[codeInstallationTaskFactories.size()];
 201             for (int i = 0; i < codeInstallationTaskFactories.size(); i++) {
 202                 tasks[i] = codeInstallationTaskFactories.get(i).create();
 203             }
 204         }
 205         try (DebugContext.Scope s2 = debug.scope("CodeInstall", debugContext);
 206                         DebugContext.Activation a = debug.activate()) {
 207             for (CodeInstallationTask task : tasks) {
 208                 task.preProcess(compilationResult);
 209             }
 210 
 211             CompiledCode compiledCode = createCompiledCode(method, compilationRequest, compilationResult);
 212             InstalledCode installedCode = getProviders().getCodeCache().installCode(method, compiledCode, predefinedInstalledCode, speculationLog, isDefault);
 213 
 214             // Run post-code installation tasks.
 215             try {
 216                 for (CodeInstallationTask task : tasks) {
 217                     task.postProcess(installedCode);
 218                 }
 219                 for (CodeInstallationTask task : tasks) {
 220                     task.releaseInstallation(installedCode);
 221                 }
 222             } catch (Throwable t) {
 223                 installedCode.invalidate();


< prev index next >