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

Side by Side Diff: src/compiler.cc

Issue 2707873002: Collect type profile for DevTools. (Closed)
Patch Set: Add documentation and sprinkle consts around. Created 3 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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.h" 5 #include "src/compiler.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <memory> 8 #include <memory>
9 9
10 #include "src/asmjs/asm-js.h" 10 #include "src/asmjs/asm-js.h"
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 // when the function is not compiled (i.e. no code was serialized). 314 // when the function is not compiled (i.e. no code was serialized).
315 315
316 // TODO(mvstanton): reintroduce is_empty() predicate to feedback_metadata(). 316 // TODO(mvstanton): reintroduce is_empty() predicate to feedback_metadata().
317 if (info->shared_info()->feedback_metadata()->length() == 0 || 317 if (info->shared_info()->feedback_metadata()->length() == 0 ||
318 !info->shared_info()->is_compiled()) { 318 !info->shared_info()->is_compiled()) {
319 Handle<FeedbackMetadata> feedback_metadata = FeedbackMetadata::New( 319 Handle<FeedbackMetadata> feedback_metadata = FeedbackMetadata::New(
320 info->isolate(), info->literal()->feedback_vector_spec()); 320 info->isolate(), info->literal()->feedback_vector_spec());
321 info->shared_info()->set_feedback_metadata(*feedback_metadata); 321 info->shared_info()->set_feedback_metadata(*feedback_metadata);
322 } 322 }
323 323
324 // CollectTypeProfile uses its own feedback slot. The decision
325 // whether we collect type profile or not must match the
326 // feedback metadata.
327 // If we have not decided whether we collect type feedback, we
328 // make a decision based on the FLAG. Otherwise we cannot change it.
329 if (!info->shared_info()->computed_collects_type_profile()) {
Yang 2017/03/09 10:28:27 Michael, here's where I'd like you to take a close
mvstanton 2017/03/10 12:12:24 Yep, it makes sense to avoid these flags and just
Franzi 2017/03/10 14:33:49 I deleted the constants and instead check the Feed
330 info->shared_info()->set_collects_type_profile(FLAG_type_profile);
331 info->shared_info()->set_computed_collects_type_profile(true);
332 }
333
324 // It's very important that recompiles do not alter the structure of the type 334 // It's very important that recompiles do not alter the structure of the type
325 // feedback vector. Verify that the structure fits the function literal. 335 // feedback vector. Verify that the structure fits the function literal.
326 CHECK(!info->shared_info()->feedback_metadata()->SpecDiffersFrom( 336 CHECK(!info->shared_info()->feedback_metadata()->SpecDiffersFrom(
327 info->literal()->feedback_vector_spec())); 337 info->literal()->feedback_vector_spec()));
328 } 338 }
329 339
330 bool UseTurboFan(Handle<SharedFunctionInfo> shared) { 340 bool UseTurboFan(Handle<SharedFunctionInfo> shared) {
331 bool must_use_ignition_turbo = shared->must_use_ignition_turbo(); 341 bool must_use_ignition_turbo = shared->must_use_ignition_turbo();
332 342
333 // Check the enabling conditions for Turbofan. 343 // Check the enabling conditions for Turbofan.
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 } 481 }
472 if (literal->flags() & AstProperties::kMustUseIgnitionTurbo) { 482 if (literal->flags() & AstProperties::kMustUseIgnitionTurbo) {
473 shared_info->set_must_use_ignition_turbo(true); 483 shared_info->set_must_use_ignition_turbo(true);
474 } 484 }
475 } 485 }
476 486
477 bool Renumber(ParseInfo* parse_info, 487 bool Renumber(ParseInfo* parse_info,
478 Compiler::EagerInnerFunctionLiterals* eager_literals) { 488 Compiler::EagerInnerFunctionLiterals* eager_literals) {
479 RuntimeCallTimerScope runtimeTimer(parse_info->isolate(), 489 RuntimeCallTimerScope runtimeTimer(parse_info->isolate(),
480 &RuntimeCallStats::CompileRenumber); 490 &RuntimeCallStats::CompileRenumber);
491
492 // CollectTypeProfile uses its own feedback slot. The decision
493 // whether we collect type profile or not must match the
494 // feedback metadata.
495 // If we parse for the first time or if we have not decided whether we collect
496 // type feedback, we make a decision based on the FLAG. Otherwise we stick
497 // with the previous decision.
498 bool collect_type_profile =
499 (FLAG_type_profile &&
500 (parse_info->shared_info().is_null() ||
501 !parse_info->shared_info()->computed_collects_type_profile())) ||
502 (!parse_info->shared_info().is_null() &&
503 parse_info->shared_info()->computed_collects_type_profile() &&
504 parse_info->shared_info()->collects_type_profile());
Yang 2017/03/09 10:28:27 This expression seems correct. But can we make thi
Franzi 2017/03/10 12:14:28 Thanks for the suggestions. Done.
505
481 if (!AstNumbering::Renumber( 506 if (!AstNumbering::Renumber(
482 parse_info->isolate()->stack_guard()->real_climit(), 507 parse_info->isolate()->stack_guard()->real_climit(),
483 parse_info->zone(), parse_info->literal(), eager_literals)) { 508 parse_info->zone(), parse_info->literal(), eager_literals,
509 collect_type_profile)) {
484 return false; 510 return false;
485 } 511 }
486 if (!parse_info->shared_info().is_null()) { 512 if (!parse_info->shared_info().is_null()) {
487 SetSharedFunctionFlagsFromLiteral(parse_info->literal(), 513 SetSharedFunctionFlagsFromLiteral(parse_info->literal(),
488 parse_info->shared_info()); 514 parse_info->shared_info());
489 } 515 }
490 return true; 516 return true;
491 } 517 }
492 518
493 bool GenerateUnoptimizedCode(CompilationInfo* info) { 519 bool GenerateUnoptimizedCode(CompilationInfo* info) {
(...skipping 1444 matching lines...) Expand 10 before | Expand all | Expand 10 after
1938 } 1964 }
1939 1965
1940 if (shared->is_compiled()) { 1966 if (shared->is_compiled()) {
1941 // TODO(mvstanton): pass pretenure flag to EnsureLiterals. 1967 // TODO(mvstanton): pass pretenure flag to EnsureLiterals.
1942 JSFunction::EnsureLiterals(function); 1968 JSFunction::EnsureLiterals(function);
1943 } 1969 }
1944 } 1970 }
1945 1971
1946 } // namespace internal 1972 } // namespace internal
1947 } // namespace v8 1973 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698