64 PhaseTraceTime(TimerName timer): |
64 PhaseTraceTime(TimerName timer): |
65 TraceTime("", &timers[timer], CITime || CITimeEach, Verbose) { |
65 TraceTime("", &timers[timer], CITime || CITimeEach, Verbose) { |
66 } |
66 } |
67 }; |
67 }; |
68 |
68 |
69 Arena* Compilation::_arena = NULL; |
|
70 Compilation* Compilation::_compilation = NULL; |
|
71 |
|
72 // Implementation of Compilation |
69 // Implementation of Compilation |
73 |
70 |
74 |
71 |
75 #ifndef PRODUCT |
72 #ifndef PRODUCT |
76 |
73 |
236 // done |
233 // done |
237 masm()->flush(); |
234 masm()->flush(); |
238 } |
235 } |
239 |
236 |
240 |
237 |
|
238 void Compilation::setup_code_buffer(CodeBuffer* code, int call_stub_estimate) { |
|
239 // Preinitialize the consts section to some large size: |
|
240 int locs_buffer_size = 20 * (relocInfo::length_limit + sizeof(relocInfo)); |
|
241 char* locs_buffer = NEW_RESOURCE_ARRAY(char, locs_buffer_size); |
|
242 code->insts()->initialize_shared_locs((relocInfo*)locs_buffer, |
|
243 locs_buffer_size / sizeof(relocInfo)); |
|
244 code->initialize_consts_size(Compilation::desired_max_constant_size()); |
|
245 // Call stubs + deopt/exception handler |
|
246 code->initialize_stubs_size((call_stub_estimate * LIR_Assembler::call_stub_size) + |
|
247 LIR_Assembler::exception_handler_size + |
|
248 LIR_Assembler::deopt_handler_size); |
|
249 } |
|
250 |
|
251 |
241 int Compilation::emit_code_body() { |
252 int Compilation::emit_code_body() { |
242 // emit code |
253 // emit code |
243 Runtime1::setup_code_buffer(code(), allocator()->num_calls()); |
254 setup_code_buffer(code(), allocator()->num_calls()); |
244 code()->initialize_oop_recorder(env()->oop_recorder()); |
255 code()->initialize_oop_recorder(env()->oop_recorder()); |
245 |
256 |
246 _masm = new C1_MacroAssembler(code()); |
257 _masm = new C1_MacroAssembler(code()); |
247 _masm->set_oop_recorder(env()->oop_recorder()); |
258 _masm->set_oop_recorder(env()->oop_recorder()); |
248 |
259 |
420 exception_handler_table()->add_subtable(info->pco(), bcis, scope_depths, pcos); |
431 exception_handler_table()->add_subtable(info->pco(), bcis, scope_depths, pcos); |
421 } |
432 } |
422 } |
433 } |
423 |
434 |
424 |
435 |
425 Compilation::Compilation(AbstractCompiler* compiler, ciEnv* env, ciMethod* method, int osr_bci) |
436 Compilation::Compilation(AbstractCompiler* compiler, ciEnv* env, ciMethod* method, |
|
437 int osr_bci, BufferBlob* buffer_blob) |
426 : _compiler(compiler) |
438 : _compiler(compiler) |
427 , _env(env) |
439 , _env(env) |
428 , _method(method) |
440 , _method(method) |
429 , _osr_bci(osr_bci) |
441 , _osr_bci(osr_bci) |
430 , _hir(NULL) |
442 , _hir(NULL) |
435 , _has_fpu_code(true) // pessimistic assumption |
447 , _has_fpu_code(true) // pessimistic assumption |
436 , _has_unsafe_access(false) |
448 , _has_unsafe_access(false) |
437 , _bailout_msg(NULL) |
449 , _bailout_msg(NULL) |
438 , _exception_info_list(NULL) |
450 , _exception_info_list(NULL) |
439 , _allocator(NULL) |
451 , _allocator(NULL) |
440 , _code(Runtime1::get_buffer_blob()->instructions_begin(), |
452 , _next_id(0) |
441 Runtime1::get_buffer_blob()->instructions_size()) |
453 , _next_block_id(0) |
|
454 , _code(buffer_blob->instructions_begin(), |
|
455 buffer_blob->instructions_size()) |
442 , _current_instruction(NULL) |
456 , _current_instruction(NULL) |
443 #ifndef PRODUCT |
457 #ifndef PRODUCT |
444 , _last_instruction_printed(NULL) |
458 , _last_instruction_printed(NULL) |
445 #endif // PRODUCT |
459 #endif // PRODUCT |
446 { |
460 { |
447 PhaseTraceTime timeit(_t_compile); |
461 PhaseTraceTime timeit(_t_compile); |
448 |
462 |
449 assert(_arena == NULL, "shouldn't only one instance of Compilation in existence at a time"); |
|
450 _arena = Thread::current()->resource_area(); |
463 _arena = Thread::current()->resource_area(); |
451 _compilation = this; |
464 _env->set_compiler_data(this); |
452 _exception_info_list = new ExceptionInfoList(); |
465 _exception_info_list = new ExceptionInfoList(); |
453 _implicit_exception_table.set_size(0); |
466 _implicit_exception_table.set_size(0); |
454 compile_method(); |
467 compile_method(); |
455 } |
468 } |
456 |
469 |
457 Compilation::~Compilation() { |
470 Compilation::~Compilation() { |
458 _arena = NULL; |
471 _env->set_compiler_data(NULL); |
459 _compilation = NULL; |
|
460 } |
472 } |
461 |
473 |
462 |
474 |
463 void Compilation::add_exception_handlers_for_pco(int pco, XHandlers* exception_handlers) { |
475 void Compilation::add_exception_handlers_for_pco(int pco, XHandlers* exception_handlers) { |
464 #ifndef PRODUCT |
476 #ifndef PRODUCT |