20 * or visit www.oracle.com if you need additional information or have any |
20 * or visit www.oracle.com if you need additional information or have any |
21 * questions. |
21 * questions. |
22 */ |
22 */ |
23 package org.graalvm.compiler.hotspot; |
23 package org.graalvm.compiler.hotspot; |
24 |
24 |
|
25 import static org.graalvm.compiler.core.CompilationWrapper.ExceptionAction.Diagnose; |
25 import static org.graalvm.compiler.core.CompilationWrapper.ExceptionAction.ExitVM; |
26 import static org.graalvm.compiler.core.CompilationWrapper.ExceptionAction.ExitVM; |
|
27 import static org.graalvm.compiler.core.GraalCompilerOptions.CompilationBailoutAction; |
26 import static org.graalvm.compiler.core.GraalCompilerOptions.CompilationFailureAction; |
28 import static org.graalvm.compiler.core.GraalCompilerOptions.CompilationFailureAction; |
27 import static org.graalvm.compiler.core.phases.HighTier.Options.Inline; |
29 import static org.graalvm.compiler.core.phases.HighTier.Options.Inline; |
28 import static org.graalvm.compiler.java.BytecodeParserOptions.InlineDuringParsing; |
30 import static org.graalvm.compiler.java.BytecodeParserOptions.InlineDuringParsing; |
29 |
31 |
30 import java.util.List; |
32 import java.util.List; |
31 |
33 |
32 import org.graalvm.collections.EconomicMap; |
34 import jdk.internal.vm.compiler.collections.EconomicMap; |
33 import org.graalvm.compiler.api.replacements.SnippetReflectionProvider; |
35 import org.graalvm.compiler.api.replacements.SnippetReflectionProvider; |
34 import org.graalvm.compiler.code.CompilationResult; |
36 import org.graalvm.compiler.code.CompilationResult; |
35 import org.graalvm.compiler.core.CompilationPrinter; |
37 import org.graalvm.compiler.core.CompilationPrinter; |
36 import org.graalvm.compiler.core.CompilationWrapper; |
38 import org.graalvm.compiler.core.CompilationWrapper; |
37 import org.graalvm.compiler.core.common.CompilationIdentifier; |
39 import org.graalvm.compiler.core.common.CompilationIdentifier; |
138 */ |
140 */ |
139 return HotSpotCompilationRequestResult.failure(t.toString(), false); |
141 return HotSpotCompilationRequestResult.failure(t.toString(), false); |
140 } |
142 } |
141 |
143 |
142 @Override |
144 @Override |
143 protected ExceptionAction lookupAction(OptionValues values, EnumOptionKey<ExceptionAction> actionKey) { |
145 protected ExceptionAction lookupAction(OptionValues values, EnumOptionKey<ExceptionAction> actionKey, Throwable cause) { |
144 /* |
146 // Respect current action if it has been explicitly set. |
145 * Automatically exit VM on non-bailout during bootstrap or when asserts are enabled but |
147 if (!actionKey.hasBeenSet(values)) { |
146 * respect CompilationFailureAction if it has been explicitly set. |
148 if (actionKey == CompilationFailureAction) { |
147 */ |
149 // Automatically exit on non-bailout during bootstrap |
148 if (actionKey == CompilationFailureAction && !actionKey.hasBeenSet(values)) { |
150 // or when assertions are enabled. |
149 if (Assertions.assertionsEnabled() || compiler.getGraalRuntime().isBootstrapping()) { |
151 if (Assertions.assertionsEnabled() || compiler.getGraalRuntime().isBootstrapping()) { |
150 return ExitVM; |
152 return ExitVM; |
|
153 } |
|
154 } else if (actionKey == CompilationBailoutAction && ((BailoutException) cause).isPermanent()) { |
|
155 // Get more info for permanent bailouts during bootstrap |
|
156 // or when assertions are enabled. |
|
157 assert CompilationBailoutAction.getDefaultValue() == ExceptionAction.Silent; |
|
158 if (Assertions.assertionsEnabled() || compiler.getGraalRuntime().isBootstrapping()) { |
|
159 return Diagnose; |
|
160 } |
151 } |
161 } |
152 } |
162 } |
153 return super.lookupAction(values, actionKey); |
163 return super.lookupAction(values, actionKey, cause); |
154 } |
164 } |
155 |
165 |
156 @SuppressWarnings("try") |
166 @SuppressWarnings("try") |
157 @Override |
167 @Override |
158 protected HotSpotCompilationRequestResult performCompilation(DebugContext debug) { |
168 protected HotSpotCompilationRequestResult performCompilation(DebugContext debug) { |
185 if (result != null) { |
195 if (result != null) { |
186 return HotSpotCompilationRequestResult.success(result.getBytecodeSize() - method.getCodeSize()); |
196 return HotSpotCompilationRequestResult.success(result.getBytecodeSize() - method.getCodeSize()); |
187 } |
197 } |
188 return null; |
198 return null; |
189 } |
199 } |
|
200 |
190 } |
201 } |
191 |
202 |
192 public CompilationTask(HotSpotJVMCIRuntimeProvider jvmciRuntime, HotSpotGraalCompiler compiler, HotSpotCompilationRequest request, boolean useProfilingInfo, boolean installAsDefault, |
203 public CompilationTask(HotSpotJVMCIRuntimeProvider jvmciRuntime, HotSpotGraalCompiler compiler, HotSpotCompilationRequest request, boolean useProfilingInfo, boolean installAsDefault, |
193 OptionValues options) { |
204 OptionValues options) { |
194 this.jvmciRuntime = jvmciRuntime; |
205 this.jvmciRuntime = jvmciRuntime; |