comparison src/share/vm/runtime/compilationPolicy.cpp @ 12073:f99558245e5c

8022832: Add WB APIs for OSR compilation Reviewed-by: kvn
author iignatyev
date Wed, 14 Aug 2013 23:50:23 +0400
parents d1c9384eecb4
children cefad50507d8 63a4eb8bcd23 7150b16fda52
comparison
equal deleted inserted replaced
12072:6c72125a2f40 12073:f99558245e5c
134 } 134 }
135 } else if (is_compile(comp_level)) { 135 } else if (is_compile(comp_level)) {
136 return !m->is_not_compilable(comp_level); 136 return !m->is_not_compilable(comp_level);
137 } 137 }
138 return false; 138 return false;
139 }
140
141 // Returns true if m is allowed to be osr compiled
142 bool CompilationPolicy::can_be_osr_compiled(methodHandle m, int comp_level) {
143 bool result = false;
144 if (comp_level == CompLevel_all) {
145 if (TieredCompilation) {
146 // enough to be osr compilable at any level for tiered
147 result = !m->is_not_osr_compilable(CompLevel_simple) || !m->is_not_osr_compilable(CompLevel_full_optimization);
148 } else {
149 // must be osr compilable at available level for non-tiered
150 result = !m->is_not_osr_compilable(CompLevel_highest_tier);
151 }
152 } else if (is_compile(comp_level)) {
153 result = !m->is_not_osr_compilable(comp_level);
154 }
155 return (result && can_be_compiled(m, comp_level));
139 } 156 }
140 157
141 bool CompilationPolicy::is_compilation_enabled() { 158 bool CompilationPolicy::is_compilation_enabled() {
142 // NOTE: CompileBroker::should_compile_new_jobs() checks for UseCompiler 159 // NOTE: CompileBroker::should_compile_new_jobs() checks for UseCompiler
143 return !delay_compilation_during_startup() && CompileBroker::should_compile_new_jobs(); 160 return !delay_compilation_during_startup() && CompileBroker::should_compile_new_jobs();
456 void SimpleCompPolicy::method_back_branch_event(methodHandle m, int bci, JavaThread* thread) { 473 void SimpleCompPolicy::method_back_branch_event(methodHandle m, int bci, JavaThread* thread) {
457 const int comp_level = CompLevel_highest_tier; 474 const int comp_level = CompLevel_highest_tier;
458 const int hot_count = m->backedge_count(); 475 const int hot_count = m->backedge_count();
459 const char* comment = "backedge_count"; 476 const char* comment = "backedge_count";
460 477
461 if (is_compilation_enabled() && !m->is_not_osr_compilable(comp_level) && can_be_compiled(m, comp_level)) { 478 if (is_compilation_enabled() && can_be_osr_compiled(m, comp_level)) {
462 CompileBroker::compile_method(m, bci, comp_level, m, hot_count, comment, thread); 479 CompileBroker::compile_method(m, bci, comp_level, m, hot_count, comment, thread);
463 NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(bci, comp_level, true));) 480 NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(bci, comp_level, true));)
464 } 481 }
465 } 482 }
466 // StackWalkCompPolicy - walk up stack to find a suitable method to compile 483 // StackWalkCompPolicy - walk up stack to find a suitable method to compile
512 void StackWalkCompPolicy::method_back_branch_event(methodHandle m, int bci, JavaThread* thread) { 529 void StackWalkCompPolicy::method_back_branch_event(methodHandle m, int bci, JavaThread* thread) {
513 const int comp_level = CompLevel_highest_tier; 530 const int comp_level = CompLevel_highest_tier;
514 const int hot_count = m->backedge_count(); 531 const int hot_count = m->backedge_count();
515 const char* comment = "backedge_count"; 532 const char* comment = "backedge_count";
516 533
517 if (is_compilation_enabled() && !m->is_not_osr_compilable(comp_level) && can_be_compiled(m, comp_level)) { 534 if (is_compilation_enabled() && can_be_osr_compiled(m, comp_level)) {
518 CompileBroker::compile_method(m, bci, comp_level, m, hot_count, comment, thread); 535 CompileBroker::compile_method(m, bci, comp_level, m, hot_count, comment, thread);
519 NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(bci, comp_level, true));) 536 NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(bci, comp_level, true));)
520 } 537 }
521 } 538 }
522 539