提交 4568958b 编写于 作者: S shade

8032490: Remove -XX:+-UseOldInlining

Summary: Move the option to obsolete options list, purge the redundant compiler code.
Reviewed-by: kvn, jrose
上级 6a0a927d
...@@ -63,32 +63,12 @@ InlineTree::InlineTree(Compile* c, ...@@ -63,32 +63,12 @@ InlineTree::InlineTree(Compile* c,
assert(_caller_jvms->same_calls_as(caller_jvms), "consistent JVMS"); assert(_caller_jvms->same_calls_as(caller_jvms), "consistent JVMS");
assert((caller_tree == NULL ? 0 : caller_tree->stack_depth() + 1) == stack_depth(), "correct (redundant) depth parameter"); assert((caller_tree == NULL ? 0 : caller_tree->stack_depth() + 1) == stack_depth(), "correct (redundant) depth parameter");
assert(caller_bci == this->caller_bci(), "correct (redundant) bci parameter"); assert(caller_bci == this->caller_bci(), "correct (redundant) bci parameter");
if (UseOldInlining) {
// Update hierarchical counts, count_inline_bcs() and count_inlines() // Update hierarchical counts, count_inline_bcs() and count_inlines()
InlineTree *caller = (InlineTree *)caller_tree; InlineTree *caller = (InlineTree *)caller_tree;
for( ; caller != NULL; caller = ((InlineTree *)(caller->caller_tree())) ) { for( ; caller != NULL; caller = ((InlineTree *)(caller->caller_tree())) ) {
caller->_count_inline_bcs += count_inline_bcs(); caller->_count_inline_bcs += count_inline_bcs();
NOT_PRODUCT(caller->_count_inlines++;) NOT_PRODUCT(caller->_count_inlines++;)
} }
}
}
InlineTree::InlineTree(Compile* c, ciMethod* callee_method, JVMState* caller_jvms,
float site_invoke_ratio, int max_inline_level) :
C(c),
_caller_jvms(caller_jvms),
_caller_tree(NULL),
_method(callee_method),
_site_invoke_ratio(site_invoke_ratio),
_max_inline_level(max_inline_level),
_count_inline_bcs(method()->code_size()),
_msg(NULL)
{
#ifndef PRODUCT
_count_inlines = 0;
_forced_inline = false;
#endif
assert(!UseOldInlining, "do not use for old stuff");
} }
/** /**
...@@ -161,11 +141,6 @@ bool InlineTree::should_inline(ciMethod* callee_method, ciMethod* caller_method, ...@@ -161,11 +141,6 @@ bool InlineTree::should_inline(ciMethod* callee_method, ciMethod* caller_method,
return true; return true;
} }
if (!UseOldInlining) {
set_msg("!UseOldInlining");
return true; // size and frequency are represented in a new way
}
int default_max_inline_size = C->max_inline_size(); int default_max_inline_size = C->max_inline_size();
int inline_small_code_size = InlineSmallCode / 4; int inline_small_code_size = InlineSmallCode / 4;
int max_inline_size = default_max_inline_size; int max_inline_size = default_max_inline_size;
...@@ -229,35 +204,6 @@ bool InlineTree::should_not_inline(ciMethod *callee_method, ...@@ -229,35 +204,6 @@ bool InlineTree::should_not_inline(ciMethod *callee_method,
fail_msg = "don't inline by annotation"; fail_msg = "don't inline by annotation";
} }
if (!UseOldInlining) {
if (fail_msg != NULL) {
*wci_result = *(WarmCallInfo::always_cold());
set_msg(fail_msg);
return true;
}
if (callee_method->has_unloaded_classes_in_signature()) {
wci_result->set_profit(wci_result->profit() * 0.1);
}
// don't inline exception code unless the top method belongs to an
// exception class
if (callee_method->holder()->is_subclass_of(C->env()->Throwable_klass())) {
ciMethod* top_method = jvms->caller() != NULL ? jvms->caller()->of_depth(1)->method() : method();
if (!top_method->holder()->is_subclass_of(C->env()->Throwable_klass())) {
wci_result->set_profit(wci_result->profit() * 0.1);
}
}
if (callee_method->has_compiled_code() &&
callee_method->instructions_size() > InlineSmallCode) {
wci_result->set_profit(wci_result->profit() * 0.1);
// %%% adjust wci_result->size()?
}
return false;
}
// one more inlining restriction // one more inlining restriction
if (fail_msg == NULL && callee_method->has_unloaded_classes_in_signature()) { if (fail_msg == NULL && callee_method->has_unloaded_classes_in_signature()) {
fail_msg = "unloaded signature classes"; fail_msg = "unloaded signature classes";
...@@ -360,9 +306,7 @@ bool InlineTree::try_to_inline(ciMethod* callee_method, ciMethod* caller_method, ...@@ -360,9 +306,7 @@ bool InlineTree::try_to_inline(ciMethod* callee_method, ciMethod* caller_method,
int caller_bci, JVMState* jvms, ciCallProfile& profile, int caller_bci, JVMState* jvms, ciCallProfile& profile,
WarmCallInfo* wci_result, bool& should_delay) { WarmCallInfo* wci_result, bool& should_delay) {
// Old algorithm had funny accumulating BC-size counters if (ClipInlining && (int)count_inline_bcs() >= DesiredMethodLimit) {
if (UseOldInlining && ClipInlining
&& (int)count_inline_bcs() >= DesiredMethodLimit) {
if (!callee_method->force_inline() || !IncrementalInline) { if (!callee_method->force_inline() || !IncrementalInline) {
set_msg("size > DesiredMethodLimit"); set_msg("size > DesiredMethodLimit");
return false; return false;
...@@ -465,8 +409,7 @@ bool InlineTree::try_to_inline(ciMethod* callee_method, ciMethod* caller_method, ...@@ -465,8 +409,7 @@ bool InlineTree::try_to_inline(ciMethod* callee_method, ciMethod* caller_method,
int size = callee_method->code_size_for_inlining(); int size = callee_method->code_size_for_inlining();
if (UseOldInlining && ClipInlining if (ClipInlining && (int)count_inline_bcs() + size >= DesiredMethodLimit) {
&& (int)count_inline_bcs() + size >= DesiredMethodLimit) {
if (!callee_method->force_inline() || !IncrementalInline) { if (!callee_method->force_inline() || !IncrementalInline) {
set_msg("size > DesiredMethodLimit"); set_msg("size > DesiredMethodLimit");
return false; return false;
...@@ -584,8 +527,7 @@ WarmCallInfo* InlineTree::ok_to_inline(ciMethod* callee_method, JVMState* jvms, ...@@ -584,8 +527,7 @@ WarmCallInfo* InlineTree::ok_to_inline(ciMethod* callee_method, JVMState* jvms,
jvms, profile, &wci, should_delay); jvms, profile, &wci, should_delay);
#ifndef PRODUCT #ifndef PRODUCT
if (UseOldInlining && InlineWarmCalls if (InlineWarmCalls && (PrintOpto || C->print_inlining())) {
&& (PrintOpto || C->print_inlining())) {
bool cold = wci.is_cold(); bool cold = wci.is_cold();
bool hot = !cold && wci.is_hot(); bool hot = !cold && wci.is_hot();
bool old_cold = !success; bool old_cold = !success;
...@@ -599,13 +541,12 @@ WarmCallInfo* InlineTree::ok_to_inline(ciMethod* callee_method, JVMState* jvms, ...@@ -599,13 +541,12 @@ WarmCallInfo* InlineTree::ok_to_inline(ciMethod* callee_method, JVMState* jvms,
} }
} }
#endif #endif
if (UseOldInlining) {
if (success) { if (success) {
wci = *(WarmCallInfo::always_hot()); wci = *(WarmCallInfo::always_hot());
} else { } else {
wci = *(WarmCallInfo::always_cold()); wci = *(WarmCallInfo::always_cold());
} }
}
if (!InlineWarmCalls) { if (!InlineWarmCalls) {
if (!wci.is_cold() && !wci.is_hot()) { if (!wci.is_cold() && !wci.is_hot()) {
// Do not inline the warm calls. // Do not inline the warm calls.
...@@ -619,7 +560,6 @@ WarmCallInfo* InlineTree::ok_to_inline(ciMethod* callee_method, JVMState* jvms, ...@@ -619,7 +560,6 @@ WarmCallInfo* InlineTree::ok_to_inline(ciMethod* callee_method, JVMState* jvms,
set_msg("inline (hot)"); set_msg("inline (hot)");
} }
print_inlining(callee_method, caller_bci, true /* success */); print_inlining(callee_method, caller_bci, true /* success */);
if (UseOldInlining)
build_inline_tree_for_callee(callee_method, jvms, caller_bci); build_inline_tree_for_callee(callee_method, jvms, caller_bci);
if (InlineWarmCalls && !wci.is_hot()) if (InlineWarmCalls && !wci.is_hot())
return new (C) WarmCallInfo(wci); // copy to heap return new (C) WarmCallInfo(wci); // copy to heap
......
...@@ -350,9 +350,6 @@ ...@@ -350,9 +350,6 @@
"File to dump ideal graph to. If set overrides the " \ "File to dump ideal graph to. If set overrides the " \
"use of the network") \ "use of the network") \
\ \
product(bool, UseOldInlining, true, \
"Enable the 1.3 inlining strategy") \
\
product(bool, UseBimorphicInlining, true, \ product(bool, UseBimorphicInlining, true, \
"Profiling based inlining for two receivers") \ "Profiling based inlining for two receivers") \
\ \
......
...@@ -701,10 +701,7 @@ Compile::Compile( ciEnv* ci_env, C2Compiler* compiler, ciMethod* target, int osr ...@@ -701,10 +701,7 @@ Compile::Compile( ciEnv* ci_env, C2Compiler* compiler, ciMethod* target, int osr
print_compile_messages(); print_compile_messages();
if (UseOldInlining || PrintCompilation NOT_PRODUCT( || PrintOpto) )
_ilt = InlineTree::build_inline_tree_root(); _ilt = InlineTree::build_inline_tree_root();
else
_ilt = NULL;
// Even if NO memory addresses are used, MergeMem nodes must have at least 1 slice // Even if NO memory addresses are used, MergeMem nodes must have at least 1 slice
assert(num_alias_types() >= AliasIdxRaw, ""); assert(num_alias_types() >= AliasIdxRaw, "");
......
...@@ -161,19 +161,8 @@ CallGenerator* Compile::call_generator(ciMethod* callee, int vtable_index, bool ...@@ -161,19 +161,8 @@ CallGenerator* Compile::call_generator(ciMethod* callee, int vtable_index, bool
// Try inlining a bytecoded method: // Try inlining a bytecoded method:
if (!call_does_dispatch) { if (!call_does_dispatch) {
InlineTree* ilt; InlineTree* ilt = InlineTree::find_subtree_from_root(this->ilt(), jvms->caller(), jvms->method());
if (UseOldInlining) {
ilt = InlineTree::find_subtree_from_root(this->ilt(), jvms->caller(), jvms->method());
} else {
// Make a disembodied, stateless ILT.
// TO DO: When UseOldInlining is removed, copy the ILT code elsewhere.
float site_invoke_ratio = prof_factor;
// Note: ilt is for the root of this parse, not the present call site.
ilt = new InlineTree(this, jvms->method(), jvms->caller(), site_invoke_ratio, MaxInlineLevel);
}
WarmCallInfo scratch_ci; WarmCallInfo scratch_ci;
if (!UseOldInlining)
scratch_ci.init(jvms, callee, profile, prof_factor);
bool should_delay = false; bool should_delay = false;
WarmCallInfo* ci = ilt->ok_to_inline(callee, jvms, profile, &scratch_ci, should_delay); WarmCallInfo* ci = ilt->ok_to_inline(callee, jvms, profile, &scratch_ci, should_delay);
assert(ci != &scratch_ci, "do not let this pointer escape"); assert(ci != &scratch_ci, "do not let this pointer escape");
......
...@@ -290,6 +290,7 @@ static ObsoleteFlag obsolete_jvm_flags[] = { ...@@ -290,6 +290,7 @@ static ObsoleteFlag obsolete_jvm_flags[] = {
{ "UsePermISM", JDK_Version::jdk(8), JDK_Version::jdk(9) }, { "UsePermISM", JDK_Version::jdk(8), JDK_Version::jdk(9) },
{ "UseMPSS", JDK_Version::jdk(8), JDK_Version::jdk(9) }, { "UseMPSS", JDK_Version::jdk(8), JDK_Version::jdk(9) },
{ "UseStringCache", JDK_Version::jdk(8), JDK_Version::jdk(9) }, { "UseStringCache", JDK_Version::jdk(8), JDK_Version::jdk(9) },
{ "UseOldInlining", JDK_Version::jdk(9), JDK_Version::jdk(10) },
#ifdef PRODUCT #ifdef PRODUCT
{ "DesiredMethodLimit", { "DesiredMethodLimit",
JDK_Version::jdk_update(7, 2), JDK_Version::jdk(8) }, JDK_Version::jdk_update(7, 2), JDK_Version::jdk(8) },
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册