Commit 47396c41 authored by bmeurer's avatar bmeurer Committed by Commit bot

[turbofan] Don't abort inlining on first failed attempt.

Continue with the other candidates in case of a failed attempt to inline
a certain candidate.

TBR=mstarzinger@chromium.org
BUG=v8:4493
LOG=n

Review URL: https://codereview.chromium.org/1435373002

Cr-Commit-Position: refs/heads/master@{#31975}
parent d8d5676e
......@@ -101,12 +101,18 @@ void JSInliningHeuristic::Finalize() {
// We inline at most one candidate in every iteration of the fixpoint.
// This is to ensure that we don't consume the full inlining budget
// on things that aren't called very often.
if (cumulative_count_ > FLAG_max_inlined_nodes_cumulative) return;
auto i = candidates_.begin();
Candidate const& candidate = *i;
inliner_.ReduceJSCall(candidate.node, candidate.function);
cumulative_count_ += candidate.function->shared()->ast_node_count();
candidates_.erase(i);
// TODO(bmeurer): Use std::priority_queue instead of std::set here.
while (!candidates_.empty()) {
if (cumulative_count_ > FLAG_max_inlined_nodes_cumulative) return;
auto i = candidates_.begin();
Candidate candidate = *i;
candidates_.erase(i);
Reduction r = inliner_.ReduceJSCall(candidate.node, candidate.function);
if (r.Changed()) {
cumulative_count_ += candidate.function->shared()->ast_node_count();
return;
}
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment