< prev index next >
src/share/vm/jvmci/jvmciCompiler.cpp
Print this page
*** 55,64 ****
--- 55,68 ----
// stop the VM deferring compilation now.
CompilationPolicy::completed_vm_startup();
}
void JVMCICompiler::bootstrap() {
+ if (Arguments::mode() == Arguments::_int) {
+ // Nothing to do in -Xint mode
+ return;
+ }
#ifndef PRODUCT
// We turn off CompileTheWorld so that compilation requests are not
// ignored during bootstrap or that JVMCI can be compiled by C1/C2.
FlagSetting ctwOff(CompileTheWorld, false);
#endif
*** 123,156 ****
HandleMark hm;
ResourceMark rm;
Handle receiver = JVMCIRuntime::get_HotSpotJVMCIRuntime(CHECK_ABORT);
JavaValue method_result(T_OBJECT);
- {
JavaCallArguments args;
args.push_long((jlong) (address) method());
! JavaCalls::call_static(&method_result, SystemDictionary::HotSpotResolvedJavaMethodImpl_klass(), vmSymbols::fromMetaspace_name(), vmSymbols::method_fromMetaspace_signature(), &args, CHECK_ABORT);
! }
JavaValue result(T_VOID);
JavaCallArguments args;
args.push_oop(receiver);
args.push_oop((oop)method_result.get_jobject());
args.push_int(entry_bci);
args.push_long((jlong) (address) env);
args.push_int(env->task()->compile_id());
! JavaCalls::call_special(&result, receiver->klass(), vmSymbols::compileMethod_name(), vmSymbols::compileMethod_signature(), &args, CHECK_ABORT);
_methodsCompiled++;
}
// Compilation entry point for methods
void JVMCICompiler::compile_method(ciEnv* env, ciMethod* target, int entry_bci, DirectiveSet* directive) {
ShouldNotReachHere();
}
// Print compilation timers and statistics
void JVMCICompiler::print_timers() {
print_compilation_timers();
}
--- 127,185 ----
HandleMark hm;
ResourceMark rm;
Handle receiver = JVMCIRuntime::get_HotSpotJVMCIRuntime(CHECK_ABORT);
JavaValue method_result(T_OBJECT);
JavaCallArguments args;
args.push_long((jlong) (address) method());
! JavaCalls::call_static(&method_result, SystemDictionary::HotSpotResolvedJavaMethodImpl_klass(),
! vmSymbols::fromMetaspace_name(), vmSymbols::method_fromMetaspace_signature(), &args, THREAD);
+ if (!HAS_PENDING_EXCEPTION) {
JavaValue result(T_VOID);
JavaCallArguments args;
args.push_oop(receiver);
args.push_oop((oop)method_result.get_jobject());
args.push_int(entry_bci);
args.push_long((jlong) (address) env);
args.push_int(env->task()->compile_id());
! JavaCalls::call_special(&result, receiver->klass(),
! vmSymbols::compileMethod_name(), vmSymbols::compileMethod_signature(), &args, THREAD);
! }
!
! // An uncaught exception was thrown during compilation. Generally these
! // should be handled by the Java code in some useful way but if they leak
! // through to here report them instead of dying or silently ignoring them.
! if (HAS_PENDING_EXCEPTION) {
! Handle throwable = PENDING_EXCEPTION;
! CLEAR_PENDING_EXCEPTION;
+ JVMCIRuntime::call_printStackTrace(throwable, THREAD);
+ if (HAS_PENDING_EXCEPTION) {
+ CLEAR_PENDING_EXCEPTION;
+ }
+
+ // Something went wrong so disable compilation at this level
+ method->set_not_compilable(CompLevel_full_optimization);
+ } else {
_methodsCompiled++;
+ }
}
// Compilation entry point for methods
void JVMCICompiler::compile_method(ciEnv* env, ciMethod* target, int entry_bci, DirectiveSet* directive) {
ShouldNotReachHere();
}
+ bool JVMCICompiler::is_trivial(Method* method) {
+ if (_bootstrapping) {
+ return false;
+ }
+ return JVMCIRuntime::treat_as_trivial(method);
+ }
+
// Print compilation timers and statistics
void JVMCICompiler::print_timers() {
print_compilation_timers();
}
< prev index next >