24 |
24 |
25 package org.graalvm.compiler.hotspot; |
25 package org.graalvm.compiler.hotspot; |
26 |
26 |
27 import static org.graalvm.compiler.core.CompilationWrapper.ExceptionAction.Diagnose; |
27 import static org.graalvm.compiler.core.CompilationWrapper.ExceptionAction.Diagnose; |
28 import static org.graalvm.compiler.core.CompilationWrapper.ExceptionAction.ExitVM; |
28 import static org.graalvm.compiler.core.CompilationWrapper.ExceptionAction.ExitVM; |
29 import static org.graalvm.compiler.core.GraalCompilerOptions.CompilationBailoutAction; |
29 import static org.graalvm.compiler.core.GraalCompilerOptions.CompilationBailoutAsFailure; |
30 import static org.graalvm.compiler.core.GraalCompilerOptions.CompilationFailureAction; |
30 import static org.graalvm.compiler.core.GraalCompilerOptions.CompilationFailureAction; |
31 import static org.graalvm.compiler.core.phases.HighTier.Options.Inline; |
31 import static org.graalvm.compiler.core.phases.HighTier.Options.Inline; |
32 import static org.graalvm.compiler.java.BytecodeParserOptions.InlineDuringParsing; |
32 import static org.graalvm.compiler.java.BytecodeParserOptions.InlineDuringParsing; |
33 |
33 |
34 import java.io.PrintStream; |
34 import java.io.PrintStream; |
45 import org.graalvm.compiler.debug.DebugCloseable; |
45 import org.graalvm.compiler.debug.DebugCloseable; |
46 import org.graalvm.compiler.debug.DebugContext; |
46 import org.graalvm.compiler.debug.DebugContext; |
47 import org.graalvm.compiler.debug.DebugDumpScope; |
47 import org.graalvm.compiler.debug.DebugDumpScope; |
48 import org.graalvm.compiler.debug.GraalError; |
48 import org.graalvm.compiler.debug.GraalError; |
49 import org.graalvm.compiler.debug.TimerKey; |
49 import org.graalvm.compiler.debug.TimerKey; |
50 import org.graalvm.compiler.options.EnumOptionKey; |
|
51 import org.graalvm.compiler.options.OptionKey; |
50 import org.graalvm.compiler.options.OptionKey; |
52 import org.graalvm.compiler.options.OptionValues; |
51 import org.graalvm.compiler.options.OptionValues; |
53 import org.graalvm.compiler.printer.GraalDebugHandlersFactory; |
52 import org.graalvm.compiler.printer.GraalDebugHandlersFactory; |
54 |
53 |
55 import jdk.vm.ci.code.BailoutException; |
54 import jdk.vm.ci.code.BailoutException; |
143 */ |
142 */ |
144 return HotSpotCompilationRequestResult.failure(t.toString(), false); |
143 return HotSpotCompilationRequestResult.failure(t.toString(), false); |
145 } |
144 } |
146 |
145 |
147 @Override |
146 @Override |
148 protected ExceptionAction lookupAction(OptionValues values, EnumOptionKey<ExceptionAction> actionKey, Throwable cause) { |
147 protected ExceptionAction lookupAction(OptionValues values, Throwable cause) { |
|
148 if (cause instanceof BailoutException) { |
|
149 BailoutException bailout = (BailoutException) cause; |
|
150 if (bailout.isPermanent()) { |
|
151 // Respect current action if it has been explicitly set. |
|
152 if (!CompilationBailoutAsFailure.hasBeenSet(values)) { |
|
153 // Get more info for permanent bailouts during bootstrap |
|
154 // or when assertions are enabled. |
|
155 if (Assertions.assertionsEnabled() || compiler.getGraalRuntime().isBootstrapping()) { |
|
156 return Diagnose; |
|
157 } |
|
158 |
|
159 } |
|
160 } |
|
161 if (!CompilationBailoutAsFailure.getValue(values)) { |
|
162 return super.lookupAction(values, cause); |
|
163 } |
|
164 } |
|
165 |
149 // Respect current action if it has been explicitly set. |
166 // Respect current action if it has been explicitly set. |
150 if (!actionKey.hasBeenSet(values)) { |
167 if (!CompilationFailureAction.hasBeenSet(values)) { |
151 if (actionKey == CompilationFailureAction) { |
168 // Automatically exit on failure during bootstrap |
152 // Automatically exit on non-bailout during bootstrap |
169 // or when assertions are enabled. |
153 // or when assertions are enabled. |
170 if (Assertions.assertionsEnabled() || compiler.getGraalRuntime().isBootstrapping()) { |
154 if (Assertions.assertionsEnabled() || compiler.getGraalRuntime().isBootstrapping()) { |
171 return ExitVM; |
155 return ExitVM; |
172 } |
156 } |
173 } |
157 } else if (actionKey == CompilationBailoutAction && ((BailoutException) cause).isPermanent()) { |
174 return super.lookupAction(values, cause); |
158 // Get more info for permanent bailouts during bootstrap |
|
159 // or when assertions are enabled. |
|
160 assert CompilationBailoutAction.getDefaultValue() == ExceptionAction.Silent; |
|
161 if (Assertions.assertionsEnabled() || compiler.getGraalRuntime().isBootstrapping()) { |
|
162 return Diagnose; |
|
163 } |
|
164 } |
|
165 } |
|
166 return super.lookupAction(values, actionKey, cause); |
|
167 } |
175 } |
168 |
176 |
169 @SuppressWarnings("try") |
177 @SuppressWarnings("try") |
170 @Override |
178 @Override |
171 protected HotSpotCompilationRequestResult performCompilation(DebugContext debug) { |
179 protected HotSpotCompilationRequestResult performCompilation(DebugContext debug) { |