Index: src/compiler.cc |
diff --git a/src/compiler.cc b/src/compiler.cc |
index 4e944f7fcda41fdde7cbd60e7f5931be9dfc69bd..86c1f3c0465848ac17871b5aa429fe4918bea1f4 100644 |
--- a/src/compiler.cc |
+++ b/src/compiler.cc |
@@ -321,6 +321,16 @@ void EnsureFeedbackMetadata(CompilationInfo* info) { |
info->shared_info()->set_feedback_metadata(*feedback_metadata); |
} |
+ // CollectTypeProfile uses its own feedback slot. The decision |
+ // whether we collect type profile or not must match the |
+ // feedback metadata. |
+ // If we have not decided whether we collect type feedback, we |
+ // make a decision based on the FLAG. Otherwise we cannot change it. |
+ 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
|
+ info->shared_info()->set_collects_type_profile(FLAG_type_profile); |
+ info->shared_info()->set_computed_collects_type_profile(true); |
+ } |
+ |
// It's very important that recompiles do not alter the structure of the type |
// feedback vector. Verify that the structure fits the function literal. |
CHECK(!info->shared_info()->feedback_metadata()->SpecDiffersFrom( |
@@ -478,9 +488,25 @@ bool Renumber(ParseInfo* parse_info, |
Compiler::EagerInnerFunctionLiterals* eager_literals) { |
RuntimeCallTimerScope runtimeTimer(parse_info->isolate(), |
&RuntimeCallStats::CompileRenumber); |
+ |
+ // CollectTypeProfile uses its own feedback slot. The decision |
+ // whether we collect type profile or not must match the |
+ // feedback metadata. |
+ // If we parse for the first time or if we have not decided whether we collect |
+ // type feedback, we make a decision based on the FLAG. Otherwise we stick |
+ // with the previous decision. |
+ bool collect_type_profile = |
+ (FLAG_type_profile && |
+ (parse_info->shared_info().is_null() || |
+ !parse_info->shared_info()->computed_collects_type_profile())) || |
+ (!parse_info->shared_info().is_null() && |
+ parse_info->shared_info()->computed_collects_type_profile() && |
+ 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.
|
+ |
if (!AstNumbering::Renumber( |
parse_info->isolate()->stack_guard()->real_climit(), |
- parse_info->zone(), parse_info->literal(), eager_literals)) { |
+ parse_info->zone(), parse_info->literal(), eager_literals, |
+ collect_type_profile)) { |
return false; |
} |
if (!parse_info->shared_info().is_null()) { |