| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/compiler/js-inlining-heuristic.h" | 5 #include "src/compiler/js-inlining-heuristic.h" |
| 6 | 6 |
| 7 #include "src/compilation-info.h" | 7 #include "src/compilation-info.h" |
| 8 #include "src/compiler/common-operator.h" | 8 #include "src/compiler/common-operator.h" |
| 9 #include "src/compiler/node-matchers.h" | 9 #include "src/compiler/node-matchers.h" |
| 10 #include "src/compiler/simplified-operator.h" | 10 #include "src/compiler/simplified-operator.h" |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 | 157 |
| 158 // We inline at most one candidate in every iteration of the fixpoint. | 158 // We inline at most one candidate in every iteration of the fixpoint. |
| 159 // This is to ensure that we don't consume the full inlining budget | 159 // This is to ensure that we don't consume the full inlining budget |
| 160 // on things that aren't called very often. | 160 // on things that aren't called very often. |
| 161 // TODO(bmeurer): Use std::priority_queue instead of std::set here. | 161 // TODO(bmeurer): Use std::priority_queue instead of std::set here. |
| 162 while (!candidates_.empty()) { | 162 while (!candidates_.empty()) { |
| 163 if (cumulative_count_ > FLAG_max_inlined_nodes_cumulative) return; | 163 if (cumulative_count_ > FLAG_max_inlined_nodes_cumulative) return; |
| 164 auto i = candidates_.begin(); | 164 auto i = candidates_.begin(); |
| 165 Candidate candidate = *i; | 165 Candidate candidate = *i; |
| 166 candidates_.erase(i); | 166 candidates_.erase(i); |
| 167 // Only include candidates that we've successfully called before. |
| 168 // The candidate list is sorted, so we can exit at the first occurance of |
| 169 // frequency 0 in the list. |
| 170 if (candidate.frequency <= 0.0) return; |
| 167 // Make sure we don't try to inline dead candidate nodes. | 171 // Make sure we don't try to inline dead candidate nodes. |
| 168 if (!candidate.node->IsDead()) { | 172 if (!candidate.node->IsDead()) { |
| 169 Reduction const reduction = InlineCandidate(candidate); | 173 Reduction const reduction = InlineCandidate(candidate); |
| 170 if (reduction.Changed()) return; | 174 if (reduction.Changed()) return; |
| 171 } | 175 } |
| 172 } | 176 } |
| 173 } | 177 } |
| 174 | 178 |
| 175 Reduction JSInliningHeuristic::InlineCandidate(Candidate const& candidate) { | 179 Reduction JSInliningHeuristic::InlineCandidate(Candidate const& candidate) { |
| 176 int const num_calls = candidate.num_functions; | 180 int const num_calls = candidate.num_functions; |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 return jsgraph()->common(); | 315 return jsgraph()->common(); |
| 312 } | 316 } |
| 313 | 317 |
| 314 SimplifiedOperatorBuilder* JSInliningHeuristic::simplified() const { | 318 SimplifiedOperatorBuilder* JSInliningHeuristic::simplified() const { |
| 315 return jsgraph()->simplified(); | 319 return jsgraph()->simplified(); |
| 316 } | 320 } |
| 317 | 321 |
| 318 } // namespace compiler | 322 } // namespace compiler |
| 319 } // namespace internal | 323 } // namespace internal |
| 320 } // namespace v8 | 324 } // namespace v8 |
| OLD | NEW |