43 _caller_jvms(caller_jvms), |
43 _caller_jvms(caller_jvms), |
44 _caller_tree((InlineTree*) caller_tree), |
44 _caller_tree((InlineTree*) caller_tree), |
45 _method(callee), |
45 _method(callee), |
46 _site_invoke_ratio(site_invoke_ratio), |
46 _site_invoke_ratio(site_invoke_ratio), |
47 _max_inline_level(max_inline_level), |
47 _max_inline_level(max_inline_level), |
48 _count_inline_bcs(method()->code_size()) |
48 _count_inline_bcs(method()->code_size_for_inlining()) |
49 { |
49 { |
50 NOT_PRODUCT(_count_inlines = 0;) |
50 NOT_PRODUCT(_count_inlines = 0;) |
51 if (_caller_jvms != NULL) { |
51 if (_caller_jvms != NULL) { |
52 // Keep a private copy of the caller_jvms: |
52 // Keep a private copy of the caller_jvms: |
53 _caller_jvms = new (C) JVMState(caller_jvms->method(), caller_tree->caller_jvms()); |
53 _caller_jvms = new (C) JVMState(caller_jvms->method(), caller_tree->caller_jvms()); |
105 return NULL; |
105 return NULL; |
106 } |
106 } |
107 |
107 |
108 // positive filter: should send be inlined? returns NULL (--> yes) |
108 // positive filter: should send be inlined? returns NULL (--> yes) |
109 // or rejection msg |
109 // or rejection msg |
110 int size = callee_method->code_size(); |
110 int size = callee_method->code_size_for_inlining(); |
111 |
111 |
112 // Check for too many throws (and not too huge) |
112 // Check for too many throws (and not too huge) |
113 if(callee_method->interpreter_throwout_count() > InlineThrowCount && |
113 if(callee_method->interpreter_throwout_count() > InlineThrowCount && |
114 size < InlineThrowMaxSize ) { |
114 size < InlineThrowMaxSize ) { |
115 wci_result->set_profit(wci_result->profit() * 100); |
115 wci_result->set_profit(wci_result->profit() * 100); |
242 if (!k->is_subclass_of(C->env()->Throwable_klass())) |
242 if (!k->is_subclass_of(C->env()->Throwable_klass())) |
243 return "exception method"; |
243 return "exception method"; |
244 } |
244 } |
245 |
245 |
246 // use frequency-based objections only for non-trivial methods |
246 // use frequency-based objections only for non-trivial methods |
247 if (callee_method->code_size() <= MaxTrivialSize) return NULL; |
247 if (callee_method->code_size_for_inlining() <= MaxTrivialSize) return NULL; |
248 |
248 |
249 // don't use counts with -Xcomp or CTW |
249 // don't use counts with -Xcomp or CTW |
250 if (UseInterpreter && !CompileTheWorld) { |
250 if (UseInterpreter && !CompileTheWorld) { |
251 |
251 |
252 if (!callee_method->has_compiled_code() && |
252 if (!callee_method->has_compiled_code() && |
303 // accessor methods are not subject to any of the following limits. |
303 // accessor methods are not subject to any of the following limits. |
304 return NULL; |
304 return NULL; |
305 } |
305 } |
306 |
306 |
307 // suppress a few checks for accessors and trivial methods |
307 // suppress a few checks for accessors and trivial methods |
308 if (callee_method->code_size() > MaxTrivialSize) { |
308 if (callee_method->code_size_for_inlining() > MaxTrivialSize) { |
309 |
309 |
310 // don't inline into giant methods |
310 // don't inline into giant methods |
311 if (C->unique() > (uint)NodeCountInliningCutoff) { |
311 if (C->unique() > (uint)NodeCountInliningCutoff) { |
312 return "NodeCountInliningCutoff"; |
312 return "NodeCountInliningCutoff"; |
313 } |
313 } |
347 } |
347 } |
348 jvms = jvms->caller(); |
348 jvms = jvms->caller(); |
349 } |
349 } |
350 } |
350 } |
351 |
351 |
352 int size = callee_method->code_size(); |
352 int size = callee_method->code_size_for_inlining(); |
353 |
353 |
354 if (UseOldInlining && ClipInlining |
354 if (UseOldInlining && ClipInlining |
355 && (int)count_inline_bcs() + size >= DesiredMethodLimit) { |
355 && (int)count_inline_bcs() + size >= DesiredMethodLimit) { |
356 return "size > DesiredMethodLimit"; |
356 return "size > DesiredMethodLimit"; |
357 } |
357 } |