Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(144)

Unified Diff: src/compiler/js-inlining-heuristic.cc

Issue 2330883002: [turbofan] Call frequencies for JSCallFunction and JSCallConstruct. (Closed)
Patch Set: REBASE Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/compiler/js-inlining-heuristic.cc
diff --git a/src/compiler/js-inlining-heuristic.cc b/src/compiler/js-inlining-heuristic.cc
index 26c9b1d33ef082ad947f95bb8cb25679d17bbf9f..a526cf5f9c2c3b6d5617a422cc9e40aade58a261 100644
--- a/src/compiler/js-inlining-heuristic.cc
+++ b/src/compiler/js-inlining-heuristic.cc
@@ -123,22 +123,12 @@ Reduction JSInliningHeuristic::Reduce(Node* node) {
// Gather feedback on how often this call site has been hit before.
if (node->opcode() == IrOpcode::kJSCallFunction) {
- CallFunctionParameters p = CallFunctionParametersOf(node->op());
- if (p.feedback().IsValid()) {
- CallICNexus nexus(p.feedback().vector(), p.feedback().slot());
- candidate.calls = nexus.ExtractCallCount();
- }
+ CallFunctionParameters const p = CallFunctionParametersOf(node->op());
+ candidate.frequency = p.frequency();
} else {
DCHECK_EQ(IrOpcode::kJSCallConstruct, node->opcode());
- CallConstructParameters p = CallConstructParametersOf(node->op());
- if (p.feedback().IsValid()) {
- int const extra_index =
- p.feedback().vector()->GetIndex(p.feedback().slot()) + 1;
- Object* feedback_extra = p.feedback().vector()->get(extra_index);
- if (feedback_extra->IsSmi()) {
- candidate.calls = Smi::cast(feedback_extra)->value();
- }
- }
+ CallConstructParameters const p = CallConstructParametersOf(node->op());
+ candidate.frequency = p.frequency();
}
// Handling of special inlining modes right away:
@@ -280,17 +270,20 @@ Reduction JSInliningHeuristic::InlineCandidate(Candidate const& candidate) {
bool JSInliningHeuristic::CandidateCompare::operator()(
const Candidate& left, const Candidate& right) const {
- if (left.calls != right.calls) {
- return left.calls > right.calls;
+ if (left.frequency > right.frequency) {
+ return true;
+ } else if (left.frequency < right.frequency) {
+ return false;
+ } else {
+ return left.node < right.node;
Jarin 2016/09/12 13:10:01 Could we compare on node->id(), so that we do not
Benedikt Meurer 2016/09/13 17:45:07 Done.
}
- return left.node < right.node;
}
void JSInliningHeuristic::PrintCandidates() {
PrintF("Candidates for inlining (size=%zu):\n", candidates_.size());
for (const Candidate& candidate : candidates_) {
- PrintF(" #%d:%s, calls:%d\n", candidate.node->id(),
- candidate.node->op()->mnemonic(), candidate.calls);
+ PrintF(" #%d:%s, frequency:%g\n", candidate.node->id(),
+ candidate.node->op()->mnemonic(), candidate.frequency);
for (int i = 0; i < candidate.num_functions; ++i) {
Handle<JSFunction> function = candidate.functions[i];
PrintF(" - size[source]:%d, size[ast]:%d, name: %s\n",

Powered by Google App Engine
This is Rietveld 408576698