< prev index next >

src/share/vm/opto/bytecodeInfo.cpp

Print this page
rev 11591 : 8161379: @CallerSensitive methods should be forcefully inlined to get Reflection.getCallerClass optimization
Reviewed-by: TBD
Contributed-by: aleksey.shipilev@oracle.com, claes.redestad@oracle.com

*** 123,132 **** --- 123,138 ---- set_msg("force inline by annotation"); _forced_inline = true; return true; } + if (callee_method->caller_sensitive()) { + set_msg("force inline @CallerSensitive"); + _forced_inline = true; + return true; + } + #ifndef PRODUCT int inline_depth = inline_level()+1; if (ciReplay::should_inline(C->replay_inline_data(), callee_method, caller_bci, inline_depth)) { set_msg("force inline by ciReplay"); _forced_inline = true;
*** 254,263 **** --- 260,274 ---- if (callee_method->force_inline()) { set_msg("force inline by annotation"); return false; } + if (callee_method->caller_sensitive()) { + set_msg("force inline @CallerSensitive"); + return false; + } + // Now perform checks which are heuristic if (is_unboxing_method(callee_method, C)) { // Inline unboxing methods. return false;
*** 324,334 **** bool InlineTree::try_to_inline(ciMethod* callee_method, ciMethod* caller_method, int caller_bci, JVMState* jvms, ciCallProfile& profile, WarmCallInfo* wci_result, bool& should_delay) { if (ClipInlining && (int)count_inline_bcs() >= DesiredMethodLimit) { ! if (!callee_method->force_inline() || !IncrementalInline) { set_msg("size > DesiredMethodLimit"); return false; } else if (!C->inlining_incrementally()) { should_delay = true; } --- 335,345 ---- bool InlineTree::try_to_inline(ciMethod* callee_method, ciMethod* caller_method, int caller_bci, JVMState* jvms, ciCallProfile& profile, WarmCallInfo* wci_result, bool& should_delay) { if (ClipInlining && (int)count_inline_bcs() >= DesiredMethodLimit) { ! if ((!callee_method->force_inline() && !callee_method->caller_sensitive()) || !IncrementalInline) { set_msg("size > DesiredMethodLimit"); return false; } else if (!C->inlining_incrementally()) { should_delay = true; }
*** 352,362 **** // suppress a few checks for accessors and trivial methods if (callee_method->code_size() > MaxTrivialSize) { // don't inline into giant methods if (C->over_inlining_cutoff()) { ! if ((!callee_method->force_inline() && !caller_method->is_compiled_lambda_form()) || !IncrementalInline) { set_msg("NodeCountInliningCutoff"); return false; } else { should_delay = true; --- 363,373 ---- // suppress a few checks for accessors and trivial methods if (callee_method->code_size() > MaxTrivialSize) { // don't inline into giant methods if (C->over_inlining_cutoff()) { ! if ((!callee_method->force_inline() && !caller_method->caller_sensitive() && !caller_method->is_compiled_lambda_form()) || !IncrementalInline) { set_msg("NodeCountInliningCutoff"); return false; } else { should_delay = true;
*** 386,396 **** if (inline_level() > MaxForceInlineLevel) { set_msg("MaxForceInlineLevel"); return false; } if (inline_level() > _max_inline_level) { ! if (!callee_method->force_inline() || !IncrementalInline) { set_msg("inlining too deep"); return false; } else if (!C->inlining_incrementally()) { should_delay = true; } --- 397,407 ---- if (inline_level() > MaxForceInlineLevel) { set_msg("MaxForceInlineLevel"); return false; } if (inline_level() > _max_inline_level) { ! if ((!callee_method->force_inline() && !callee_method->caller_sensitive()) || !IncrementalInline) { set_msg("inlining too deep"); return false; } else if (!C->inlining_incrementally()) { should_delay = true; }
*** 430,440 **** } int size = callee_method->code_size_for_inlining(); if (ClipInlining && (int)count_inline_bcs() + size >= DesiredMethodLimit) { ! if (!callee_method->force_inline() || !IncrementalInline) { set_msg("size > DesiredMethodLimit"); return false; } else if (!C->inlining_incrementally()) { should_delay = true; } --- 441,451 ---- } int size = callee_method->code_size_for_inlining(); if (ClipInlining && (int)count_inline_bcs() + size >= DesiredMethodLimit) { ! if ((!callee_method->force_inline() && !callee_method->caller_sensitive()) || !IncrementalInline) { set_msg("size > DesiredMethodLimit"); return false; } else if (!C->inlining_incrementally()) { should_delay = true; }
< prev index next >