void Compiler::compile(BackgroundCompileRequest* req) { if(req->is_block()) { compile_block(req->method(), req->machine_code()); } else { compile_method(req); } }
Compilation::Compilation(AbstractCompiler* compiler, ciEnv* env, ciMethod* method, int osr_bci) : _compiler(compiler) , _env(env) , _method(method) , _osr_bci(osr_bci) , _hir(NULL) , _max_spills(-1) , _frame_map(NULL) , _masm(NULL) , _has_exception_handlers(false) , _has_fpu_code(true) // pessimistic assumption , _has_unsafe_access(false) , _bailout_msg(NULL) , _exception_info_list(NULL) , _allocator(NULL) , _code(Runtime1::get_buffer_blob()->instructions_begin(), Runtime1::get_buffer_blob()->instructions_size()) , _current_instruction(NULL) #ifndef PRODUCT , _last_instruction_printed(NULL) #endif // PRODUCT { PhaseTraceTime timeit(_t_compile); assert(_arena == NULL, "shouldn't only one instance of Compilation in existence at a time"); _arena = Thread::current()->resource_area(); _compilation = this; _needs_debug_information = _env->jvmti_can_examine_or_deopt_anywhere() || JavaMonitorsInStackTrace || AlwaysEmitDebugInfo || DeoptimizeALot; _exception_info_list = new ExceptionInfoList(); _implicit_exception_table.set_size(0); compile_method(); }
void Compiler::compile(LLVMState* ls, BackgroundCompileRequest* req) { if(req->is_block()) { compile_block(ls, req->method(), req->vmmethod()); } else { compile_method(ls, req); } }
// Gets the code from a method object, compiling the method if necessary. static value_t ensure_method_code(runtime_t *runtime, value_t method) { value_t code = get_method_code(method); if (is_nothing(code)) { TRY_SET(code, compile_method(runtime, method)); set_method_code(method, code); } return code; }
Compilation::Compilation(AbstractCompiler* compiler, ciEnv* env, ciMethod* method, int osr_bci, BufferBlob* buffer_blob) : _compiler(compiler) , _env(env) , _log(env->log()) , _method(method) , _osr_bci(osr_bci) , _hir(NULL) , _max_spills(-1) , _frame_map(NULL) , _masm(NULL) , _has_exception_handlers(false) , _has_fpu_code(true) // pessimistic assumption , _would_profile(false) , _has_unsafe_access(false) , _has_method_handle_invokes(false) , _bailout_msg(NULL) , _exception_info_list(NULL) , _allocator(NULL) , _next_id(0) , _next_block_id(0) , _code(buffer_blob) , _has_access_indexed(false) , _current_instruction(NULL) #ifndef PRODUCT , _last_instruction_printed(NULL) #endif // PRODUCT { PhaseTraceTime timeit(_t_compile); _arena = Thread::current()->resource_area(); _env->set_compiler_data(this); _exception_info_list = new ExceptionInfoList(); _implicit_exception_table.set_size(0); compile_method(); if (bailed_out()) { _env->record_method_not_compilable(bailout_msg(), !TieredCompilation); if (is_profiling()) { // Compilation failed, create MDO, which would signal the interpreter // to start profiling on its own. _method->ensure_method_data(); } } else if (is_profiling()) { ciMethodData *md = method->method_data_or_null(); if (md != NULL) { md->set_would_profile(_would_profile); } } }