64 bool CompilationPolicy::mustBeCompiled(methodHandle m) { |
64 bool CompilationPolicy::mustBeCompiled(methodHandle m) { |
65 if (m->has_compiled_code()) return false; // already compiled |
65 if (m->has_compiled_code()) return false; // already compiled |
66 if (!canBeCompiled(m)) return false; |
66 if (!canBeCompiled(m)) return false; |
67 |
67 |
68 return !UseInterpreter || // must compile all methods |
68 return !UseInterpreter || // must compile all methods |
69 (UseCompiler && AlwaysCompileLoopMethods && m->has_loops()); // eagerly compile loop methods |
69 (UseCompiler && AlwaysCompileLoopMethods && m->has_loops() && CompileBroker::should_compile_new_jobs()); // eagerly compile loop methods |
70 } |
70 } |
71 |
71 |
72 // Returns true if m is allowed to be compiled |
72 // Returns true if m is allowed to be compiled |
73 bool CompilationPolicy::canBeCompiled(methodHandle m) { |
73 bool CompilationPolicy::canBeCompiled(methodHandle m) { |
74 if (m->is_abstract()) return false; |
74 if (m->is_abstract()) return false; |
135 |
135 |
136 int hot_count = m->invocation_count(); |
136 int hot_count = m->invocation_count(); |
137 reset_counter_for_invocation_event(m); |
137 reset_counter_for_invocation_event(m); |
138 const char* comment = "count"; |
138 const char* comment = "count"; |
139 |
139 |
140 if (!delayCompilationDuringStartup() && canBeCompiled(m) && UseCompiler) { |
140 if (!delayCompilationDuringStartup() && canBeCompiled(m) && UseCompiler && CompileBroker::should_compile_new_jobs()) { |
141 nmethod* nm = m->code(); |
141 nmethod* nm = m->code(); |
142 if (nm == NULL ) { |
142 if (nm == NULL ) { |
143 const char* comment = "count"; |
143 const char* comment = "count"; |
144 CompileBroker::compile_method(m, InvocationEntryBci, |
144 CompileBroker::compile_method(m, InvocationEntryBci, |
145 m, hot_count, comment, CHECK); |
145 m, hot_count, comment, CHECK); |
160 assert(UseCompiler || CompileTheWorld, "UseCompiler should be set by now."); |
160 assert(UseCompiler || CompileTheWorld, "UseCompiler should be set by now."); |
161 |
161 |
162 int hot_count = m->backedge_count(); |
162 int hot_count = m->backedge_count(); |
163 const char* comment = "backedge_count"; |
163 const char* comment = "backedge_count"; |
164 |
164 |
165 if (!m->is_not_osr_compilable() && !delayCompilationDuringStartup() && canBeCompiled(m)) { |
165 if (!m->is_not_osr_compilable() && !delayCompilationDuringStartup() && canBeCompiled(m) && CompileBroker::should_compile_new_jobs()) { |
166 CompileBroker::compile_method(m, loop_top_bci, m, hot_count, comment, CHECK); |
166 CompileBroker::compile_method(m, loop_top_bci, m, hot_count, comment, CHECK); |
167 |
167 |
168 NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(loop_top_bci));) |
168 NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(loop_top_bci));) |
169 } |
169 } |
170 } |
170 } |
202 |
202 |
203 int hot_count = m->invocation_count(); |
203 int hot_count = m->invocation_count(); |
204 reset_counter_for_invocation_event(m); |
204 reset_counter_for_invocation_event(m); |
205 const char* comment = "count"; |
205 const char* comment = "count"; |
206 |
206 |
207 if (m->code() == NULL && !delayCompilationDuringStartup() && canBeCompiled(m) && UseCompiler) { |
207 if (m->code() == NULL && !delayCompilationDuringStartup() && canBeCompiled(m) && UseCompiler && CompileBroker::should_compile_new_jobs()) { |
208 ResourceMark rm(THREAD); |
208 ResourceMark rm(THREAD); |
209 JavaThread *thread = (JavaThread*)THREAD; |
209 JavaThread *thread = (JavaThread*)THREAD; |
210 frame fr = thread->last_frame(); |
210 frame fr = thread->last_frame(); |
211 assert(fr.is_interpreted_frame(), "must be interpreted"); |
211 assert(fr.is_interpreted_frame(), "must be interpreted"); |
212 assert(fr.interpreter_frame_method() == m(), "bad method"); |
212 assert(fr.interpreter_frame_method() == m(), "bad method"); |
246 assert(UseCompiler || CompileTheWorld, "UseCompiler should be set by now."); |
246 assert(UseCompiler || CompileTheWorld, "UseCompiler should be set by now."); |
247 |
247 |
248 int hot_count = m->backedge_count(); |
248 int hot_count = m->backedge_count(); |
249 const char* comment = "backedge_count"; |
249 const char* comment = "backedge_count"; |
250 |
250 |
251 if (!m->is_not_osr_compilable() && !delayCompilationDuringStartup() && canBeCompiled(m)) { |
251 if (!m->is_not_osr_compilable() && !delayCompilationDuringStartup() && canBeCompiled(m) && CompileBroker::should_compile_new_jobs()) { |
252 CompileBroker::compile_method(m, loop_top_bci, m, hot_count, comment, CHECK); |
252 CompileBroker::compile_method(m, loop_top_bci, m, hot_count, comment, CHECK); |
253 |
253 |
254 NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(loop_top_bci));) |
254 NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(loop_top_bci));) |
255 } |
255 } |
256 } |
256 } |