Index: runtime/vm/flow_graph_inliner.cc |
diff --git a/runtime/vm/flow_graph_inliner.cc b/runtime/vm/flow_graph_inliner.cc |
index 95e634b1a1815002f21702aa1889bdf8a54acbf0..e60ec2b687cf956f4395cb08a1f896b6337aba94 100644 |
--- a/runtime/vm/flow_graph_inliner.cc |
+++ b/runtime/vm/flow_graph_inliner.cc |
@@ -297,14 +297,8 @@ class CallSites : public ValueObject { |
GrowableArray<intptr_t> static_call_counts(num_static_calls); |
for (intptr_t i = 0; i < num_static_calls; ++i) { |
- intptr_t aggregate_count = 0; |
- if (static_calls_[i + static_call_start_ix].call->ic_data() == NULL) { |
- aggregate_count = 0; |
- } else { |
- aggregate_count = static_calls_[i + static_call_start_ix] |
- .call->ic_data() |
- ->AggregateCount(); |
- } |
+ intptr_t aggregate_count = |
+ static_calls_[i + static_call_start_ix].call->CallCount(); |
static_call_counts.Add(aggregate_count); |
if (aggregate_count > max_count) max_count = aggregate_count; |
} |
@@ -1287,46 +1281,18 @@ class CallSiteInliner : public ValueObject { |
call_info.length())); |
for (intptr_t call_idx = 0; call_idx < call_info.length(); ++call_idx) { |
PolymorphicInstanceCallInstr* call = call_info[call_idx].call; |
- if (call->with_checks()) { |
- // PolymorphicInliner introduces deoptimization paths. |
- if (!call->complete() && !FLAG_polymorphic_with_deopt) { |
- TRACE_INLINING( |
- THR_Print(" => %s\n Bailout: call with checks\n", |
- call->instance_call()->function_name().ToCString())); |
- continue; |
- } |
- const Function& cl = call_info[call_idx].caller(); |
- intptr_t caller_inlining_id = |
- call_info[call_idx].caller_graph->inlining_id(); |
- PolymorphicInliner inliner(this, call, cl, caller_inlining_id); |
- inliner.Inline(); |
+ // PolymorphicInliner introduces deoptimization paths. |
+ if (!call->complete() && !FLAG_polymorphic_with_deopt) { |
+ TRACE_INLINING( |
+ THR_Print(" => %s\n Bailout: call with checks\n", |
+ call->instance_call()->function_name().ToCString())); |
continue; |
} |
- |
- const Function& target = call->targets().MostPopularTarget(); |
- if (!inliner_->AlwaysInline(target) && |
- (call_info[call_idx].ratio * 100) < FLAG_inlining_hotness) { |
- if (trace_inlining()) { |
- String& name = String::Handle(target.QualifiedUserVisibleName()); |
- THR_Print(" => %s (deopt count %d)\n Bailout: cold %f\n", |
- name.ToCString(), target.deoptimization_counter(), |
- call_info[call_idx].ratio); |
- } |
- PRINT_INLINING_TREE("Too cold", &call_info[call_idx].caller(), &target, |
- call); |
- continue; |
- } |
- GrowableArray<Value*> arguments(call->ArgumentCount()); |
- for (int arg_i = 0; arg_i < call->ArgumentCount(); ++arg_i) { |
- arguments.Add(call->PushArgumentAt(arg_i)->value()); |
- } |
- InlinedCallData call_data( |
- call, &arguments, call_info[call_idx].caller(), |
- call_info[call_idx].caller_graph->inlining_id()); |
- if (TryInlining(target, call->instance_call()->argument_names(), |
- &call_data)) { |
- InlineCall(&call_data); |
- } |
+ const Function& cl = call_info[call_idx].caller(); |
+ intptr_t caller_inlining_id = |
+ call_info[call_idx].caller_graph->inlining_id(); |
+ PolymorphicInliner inliner(this, call, cl, caller_inlining_id); |
+ inliner.Inline(); |
} |
} |
@@ -1892,8 +1858,7 @@ TargetEntryInstr* PolymorphicInliner::BuildDecisionGraph() { |
} |
PolymorphicInstanceCallInstr* fallback_call = |
new PolymorphicInstanceCallInstr( |
- call_->instance_call(), *non_inlined_variants_, |
- /* with_checks = */ true, call_->complete()); |
+ call_->instance_call(), *non_inlined_variants_, call_->complete()); |
fallback_call->set_ssa_temp_index( |
owner_->caller_graph()->alloc_ssa_temp_index()); |
fallback_call->InheritDeoptTarget(zone(), call_); |