195 CompilationLog() : StringEventLog("Compilation events") { |
195 CompilationLog() : StringEventLog("Compilation events") { |
196 } |
196 } |
197 |
197 |
198 void log_compile(JavaThread* thread, CompileTask* task) { |
198 void log_compile(JavaThread* thread, CompileTask* task) { |
199 StringLogMessage lm; |
199 StringLogMessage lm; |
200 stringStream msg = lm.stream(); |
200 stringStream sstr = lm.stream(); |
201 // msg.time_stamp().update_to(tty->time_stamp().ticks()); |
201 // msg.time_stamp().update_to(tty->time_stamp().ticks()); |
202 task->print_compilation(&msg, true); |
202 task->print_compilation(&sstr, NULL, true); |
203 log(thread, "%s", (const char*)lm); |
203 log(thread, "%s", (const char*)lm); |
204 } |
204 } |
205 |
205 |
206 void log_nmethod(JavaThread* thread, nmethod* nm) { |
206 void log_nmethod(JavaThread* thread, nmethod* nm) { |
207 log(thread, "nmethod %d%s " INTPTR_FORMAT " code ["INTPTR_FORMAT ", " INTPTR_FORMAT "]", |
207 log(thread, "nmethod %d%s " INTPTR_FORMAT " code ["INTPTR_FORMAT ", " INTPTR_FORMAT "]", |
489 for (int i = 0; i < inline_level; i++) st->print(" "); |
489 for (int i = 0; i < inline_level; i++) st->print(" "); |
490 } |
490 } |
491 |
491 |
492 // ------------------------------------------------------------------ |
492 // ------------------------------------------------------------------ |
493 // CompileTask::print_compilation |
493 // CompileTask::print_compilation |
494 void CompileTask::print_compilation(outputStream* st, bool short_form) { |
494 void CompileTask::print_compilation(outputStream* st, const char* msg, bool short_form) { |
495 bool is_osr_method = osr_bci() != InvocationEntryBci; |
495 bool is_osr_method = osr_bci() != InvocationEntryBci; |
496 print_compilation_impl(st, method(), compile_id(), comp_level(), is_osr_method, osr_bci(), is_blocking(), NULL, short_form); |
496 print_compilation_impl(st, method(), compile_id(), comp_level(), is_osr_method, osr_bci(), is_blocking(), msg, short_form); |
497 } |
497 } |
498 |
498 |
499 // ------------------------------------------------------------------ |
499 // ------------------------------------------------------------------ |
500 // CompileTask::log_task |
500 // CompileTask::log_task |
501 void CompileTask::log_task(xmlStream* log) { |
501 void CompileTask::log_task(xmlStream* log) { |
1247 "all OSR compiles are assumed to be at a single compilation lavel"); |
1247 "all OSR compiles are assumed to be at a single compilation lavel"); |
1248 #endif // TIERED |
1248 #endif // TIERED |
1249 // We accept a higher level osr method |
1249 // We accept a higher level osr method |
1250 nmethod* nm = method->lookup_osr_nmethod_for(osr_bci, comp_level, false); |
1250 nmethod* nm = method->lookup_osr_nmethod_for(osr_bci, comp_level, false); |
1251 if (nm != NULL) return nm; |
1251 if (nm != NULL) return nm; |
1252 if (method->is_not_osr_compilable()) return NULL; |
1252 if (method->is_not_osr_compilable(comp_level)) return NULL; |
1253 } |
1253 } |
1254 |
1254 |
1255 assert(!HAS_PENDING_EXCEPTION, "No exception should be present"); |
1255 assert(!HAS_PENDING_EXCEPTION, "No exception should be present"); |
1256 // some prerequisites that are compiler specific |
1256 // some prerequisites that are compiler specific |
1257 if (compiler(comp_level)->is_c2() || compiler(comp_level)->is_shark()) { |
1257 if (compiler(comp_level)->is_c2() || compiler(comp_level)->is_shark()) { |
1328 bool CompileBroker::compilation_is_complete(methodHandle method, |
1328 bool CompileBroker::compilation_is_complete(methodHandle method, |
1329 int osr_bci, |
1329 int osr_bci, |
1330 int comp_level) { |
1330 int comp_level) { |
1331 bool is_osr = (osr_bci != standard_entry_bci); |
1331 bool is_osr = (osr_bci != standard_entry_bci); |
1332 if (is_osr) { |
1332 if (is_osr) { |
1333 if (method->is_not_osr_compilable()) { |
1333 if (method->is_not_osr_compilable(comp_level)) { |
1334 return true; |
1334 return true; |
1335 } else { |
1335 } else { |
1336 nmethod* result = method->lookup_osr_nmethod_for(osr_bci, comp_level, true); |
1336 nmethod* result = method->lookup_osr_nmethod_for(osr_bci, comp_level, true); |
1337 return (result != NULL); |
1337 return (result != NULL); |
1338 } |
1338 } |
1379 |
1379 |
1380 bool is_osr = (osr_bci != standard_entry_bci); |
1380 bool is_osr = (osr_bci != standard_entry_bci); |
1381 // Some compilers may not support on stack replacement. |
1381 // Some compilers may not support on stack replacement. |
1382 if (is_osr && |
1382 if (is_osr && |
1383 (!CICompileOSR || !compiler(comp_level)->supports_osr())) { |
1383 (!CICompileOSR || !compiler(comp_level)->supports_osr())) { |
1384 method->set_not_osr_compilable(); |
1384 method->set_not_osr_compilable(comp_level); |
1385 return true; |
1385 return true; |
1386 } |
1386 } |
1387 |
1387 |
1388 // The method may be explicitly excluded by the user. |
1388 // The method may be explicitly excluded by the user. |
1389 bool quietly; |
1389 bool quietly; |
1805 const char* retry_message = ci_env.retry_message(); |
1805 const char* retry_message = ci_env.retry_message(); |
1806 if (_compilation_log != NULL) { |
1806 if (_compilation_log != NULL) { |
1807 _compilation_log->log_failure(thread, task, ci_env.failure_reason(), retry_message); |
1807 _compilation_log->log_failure(thread, task, ci_env.failure_reason(), retry_message); |
1808 } |
1808 } |
1809 if (PrintCompilation) { |
1809 if (PrintCompilation) { |
1810 tty->print("%4d COMPILE SKIPPED: %s", compile_id, ci_env.failure_reason()); |
1810 FormatBufferResource msg = retry_message != NULL ? |
1811 if (retry_message != NULL) { |
1811 err_msg_res("COMPILE SKIPPED: %s (%s)", ci_env.failure_reason(), retry_message) : |
1812 tty->print(" (%s)", retry_message); |
1812 err_msg_res("COMPILE SKIPPED: %s", ci_env.failure_reason()); |
1813 } |
1813 task->print_compilation(tty, msg); |
1814 tty->cr(); |
|
1815 } |
1814 } |
1816 } else { |
1815 } else { |
1817 task->mark_success(); |
1816 task->mark_success(); |
1818 task->set_num_inlined_bytecodes(ci_env.num_inlined_bytecodes()); |
1817 task->set_num_inlined_bytecodes(ci_env.num_inlined_bytecodes()); |
1819 if (_compilation_log != NULL) { |
1818 if (_compilation_log != NULL) { |
1838 tty->print("%s ", (is_osr ? "%" : " ")); |
1837 tty->print("%s ", (is_osr ? "%" : " ")); |
1839 int code_size = (task->code() == NULL) ? 0 : task->code()->total_size(); |
1838 int code_size = (task->code() == NULL) ? 0 : task->code()->total_size(); |
1840 tty->print_cr("size: %d time: %d inlined: %d bytes", code_size, (int)time.milliseconds(), task->num_inlined_bytecodes()); |
1839 tty->print_cr("size: %d time: %d inlined: %d bytes", code_size, (int)time.milliseconds(), task->num_inlined_bytecodes()); |
1841 } |
1840 } |
1842 |
1841 |
1843 if (compilable == ciEnv::MethodCompilable_never) { |
1842 // Disable compilation, if required. |
1844 if (is_osr) { |
1843 switch (compilable) { |
1845 method->set_not_osr_compilable(); |
1844 case ciEnv::MethodCompilable_never: |
1846 } else { |
1845 if (is_osr) |
|
1846 method->set_not_osr_compilable_quietly(); |
|
1847 else |
1847 method->set_not_compilable_quietly(); |
1848 method->set_not_compilable_quietly(); |
1848 } |
1849 break; |
1849 } else if (compilable == ciEnv::MethodCompilable_not_at_tier) { |
1850 case ciEnv::MethodCompilable_not_at_tier: |
1850 method->set_not_compilable_quietly(task->comp_level()); |
1851 if (is_osr) |
|
1852 method->set_not_osr_compilable_quietly(task->comp_level()); |
|
1853 else |
|
1854 method->set_not_compilable_quietly(task->comp_level()); |
|
1855 break; |
1851 } |
1856 } |
1852 |
1857 |
1853 // Note that the queued_for_compilation bits are cleared without |
1858 // Note that the queued_for_compilation bits are cleared without |
1854 // protection of a mutex. [They were set by the requester thread, |
1859 // protection of a mutex. [They were set by the requester thread, |
1855 // when adding the task to the complie queue -- at which time the |
1860 // when adding the task to the complie queue -- at which time the |