 Chromium Code Reviews
 Chromium Code Reviews Issue 2755973002:
  [type profile] Collect return types.  (Closed)
    
  
    Issue 2755973002:
  [type profile] Collect return types.  (Closed) 
  | Index: src/interpreter/bytecode-generator.cc | 
| diff --git a/src/interpreter/bytecode-generator.cc b/src/interpreter/bytecode-generator.cc | 
| index f67e7b927c28e4a9502c50b1ae98b1c652d48cf9..0fb45d0c44147a84eaab7aef99fb4084ba4c98c6 100644 | 
| --- a/src/interpreter/bytecode-generator.cc | 
| +++ b/src/interpreter/bytecode-generator.cc | 
| @@ -1091,8 +1091,39 @@ void BytecodeGenerator::VisitBreakStatement(BreakStatement* stmt) { | 
| void BytecodeGenerator::VisitReturnStatement(ReturnStatement* stmt) { | 
| builder()->SetStatementPosition(stmt); | 
| + | 
| + Register position; | 
| + Register name; | 
| + if (stmt->HasTypeProfileSlot()) { | 
| + position = register_allocator()->NewRegister(); | 
| + | 
| + builder() | 
| + ->LoadLiteral(Smi::FromInt(stmt->position())) | 
| + .StoreAccumulatorInRegister(position); | 
| 
rmcilroy
2017/03/20 10:02:46
Any reason you need to store position as a registe
 
Franzi
2017/03/20 15:38:39
Done. Using kImm because for the global(?) return
 | 
| + | 
| + name = register_allocator()->NewRegister(); | 
| + | 
| + if (stmt->expression()->IsVariableProxy()) { | 
| + builder() | 
| + ->LoadLiteral( | 
| + stmt->expression()->AsVariableProxy()->var()->raw_name()) | 
| + .StoreAccumulatorInRegister(name); | 
| + } else { | 
| + // Use a dummy string for now. | 
| + builder() | 
| + ->LoadLiteral(ast_string_constants()->return_string()) | 
| + .StoreAccumulatorInRegister(name); | 
| + } | 
| 
rmcilroy
2017/03/20 10:02:46
As I remember, the plan was to remove the need for
 
Franzi
2017/03/20 15:38:39
Done.
 | 
| + } | 
| + | 
| VisitForAccumulatorValue(stmt->expression()); | 
| + if (stmt->HasTypeProfileSlot()) { | 
| + FeedbackSlot collect_type_feedback_slot = stmt->TypeProfileSlot(); | 
| + builder()->CollectTypeProfile(position, name, | 
| + feedback_index(collect_type_feedback_slot)); | 
| + } | 
| + | 
| if (stmt->is_async_return()) { | 
| execution_control()->AsyncReturnAccumulator(); | 
| } else { | 
| @@ -2212,8 +2243,15 @@ void BytecodeGenerator::VisitAssignment(Assignment* expr) { | 
| // Evaluate LHS expression. | 
| Register lhs_name; | 
| + Register position; | 
| + | 
| if (expr->HasTypeProfileSlot()) { | 
| lhs_name = register_allocator()->NewRegister(); | 
| + position = register_allocator()->NewRegister(); | 
| + | 
| + builder() | 
| + ->LoadLiteral(Smi::FromInt(expr->position())) | 
| + .StoreAccumulatorInRegister(position); | 
| } | 
| switch (assign_type) { | 
| @@ -2358,10 +2396,10 @@ void BytecodeGenerator::VisitAssignment(Assignment* expr) { | 
| } | 
| // Value is in accumulator. | 
| - if (expr->HasTypeProfileSlot()) { | 
| + if (false && expr->HasTypeProfileSlot()) { | 
| 
Michael Starzinger
2017/03/20 09:29:26
nit: Looks like a left-over. If it is intentional
 
Franzi
2017/03/20 15:38:39
Done.
 | 
| FeedbackSlot collect_type_feedback_slot = expr->TypeProfileSlot(); | 
| - builder()->CollectTypeProfile(lhs_name, | 
| + builder()->CollectTypeProfile(position, lhs_name, | 
| feedback_index(collect_type_feedback_slot)); | 
| } | 
| } |