Index: src/compiler/ast-graph-builder.cc |
diff --git a/src/compiler/ast-graph-builder.cc b/src/compiler/ast-graph-builder.cc |
index 22ef8518249f825d5abf93fc5518c535b61af302..44f2276ee6513231af2bcdd29fa6023323fbcd52 100644 |
--- a/src/compiler/ast-graph-builder.cc |
+++ b/src/compiler/ast-graph-builder.cc |
@@ -1365,9 +1365,10 @@ void AstGraphBuilder::VisitForInStatement(ForInStatement* stmt) { |
test_value.Else(); |
{ |
// Bind value and do loop body. |
- ResolvedFeedbackSlot slot = |
- ResolveFeedbackSlot(stmt->EachFeedbackSlot()); |
- VisitForInAssignment(stmt->each(), value, slot, stmt->AssignmentId()); |
+ VectorSlotPair feedback = |
+ CreateVectorSlotPair(stmt->EachFeedbackSlot()); |
+ VisitForInAssignment(stmt->each(), value, feedback, |
+ stmt->AssignmentId()); |
VisitIterationBody(stmt, &for_loop); |
} |
test_value.End(); |
@@ -1611,9 +1612,9 @@ void AstGraphBuilder::VisitClassLiteralContents(ClassLiteral* expr) { |
Node* value = environment()->Pop(); |
Node* key = environment()->Pop(); |
Node* receiver = environment()->Pop(); |
- ResolvedFeedbackSlot slot = ResolveFeedbackSlot( |
+ VectorSlotPair feedback = CreateVectorSlotPair( |
expr->SlotForHomeObject(property->value(), &store_slot_index)); |
- BuildSetHomeObject(value, receiver, property->value(), slot); |
+ BuildSetHomeObject(value, receiver, property->value(), feedback); |
switch (property->kind()) { |
case ObjectLiteral::Property::CONSTANT: |
@@ -1653,10 +1654,10 @@ void AstGraphBuilder::VisitClassLiteralContents(ClassLiteral* expr) { |
DCHECK_NOT_NULL(expr->class_variable_proxy()); |
Variable* var = expr->class_variable_proxy()->var(); |
FrameStateBeforeAndAfter states(this, BailoutId::None()); |
- ResolvedFeedbackSlot slot = ResolveFeedbackSlot( |
+ VectorSlotPair feedback = CreateVectorSlotPair( |
FLAG_vector_stores ? expr->GetNthSlot(store_slot_index++) |
: FeedbackVectorICSlot::Invalid()); |
- BuildVariableAssignment(var, literal, Token::INIT_CONST, slot, |
+ BuildVariableAssignment(var, literal, Token::INIT_CONST, feedback, |
BailoutId::None(), states); |
} |
@@ -1684,9 +1685,9 @@ void AstGraphBuilder::VisitConditional(Conditional* expr) { |
void AstGraphBuilder::VisitVariableProxy(VariableProxy* expr) { |
- ResolvedFeedbackSlot slot = ResolveFeedbackSlot(expr->VariableFeedbackSlot()); |
+ VectorSlotPair pair = CreateVectorSlotPair(expr->VariableFeedbackSlot()); |
FrameStateBeforeAndAfter states(this, BeforeId(expr)); |
- Node* value = BuildVariableLoad(expr->var(), expr->id(), states, slot, |
+ Node* value = BuildVariableLoad(expr->var(), expr->id(), states, pair, |
ast_context()->GetStateCombine()); |
ast_context()->ProduceValue(value); |
} |
@@ -1758,17 +1759,18 @@ void AstGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) { |
FrameStateBeforeAndAfter states(this, property->value()->id()); |
Node* value = environment()->Pop(); |
Handle<Name> name = key->AsPropertyName(); |
- ResolvedFeedbackSlot slot = |
+ VectorSlotPair feedback = |
FLAG_vector_stores |
- ? ResolveFeedbackSlot(expr->GetNthSlot(store_slot_index++)) |
- : ResolvedFeedbackSlot(); |
- Node* store = BuildNamedStore(literal, name, value, slot, |
+ ? CreateVectorSlotPair(expr->GetNthSlot(store_slot_index++)) |
+ : VectorSlotPair(); |
+ Node* store = BuildNamedStore(literal, name, value, feedback, |
TypeFeedbackId::None()); |
states.AddToNode(store, key->id(), |
OutputFrameStateCombine::Ignore()); |
- ResolvedFeedbackSlot home_slot = ResolveFeedbackSlot( |
+ VectorSlotPair home_feedback = CreateVectorSlotPair( |
expr->SlotForHomeObject(property->value(), &store_slot_index)); |
- BuildSetHomeObject(value, literal, property->value(), home_slot); |
+ BuildSetHomeObject(value, literal, property->value(), |
+ home_feedback); |
} else { |
VisitForEffect(property->value()); |
} |
@@ -1787,9 +1789,9 @@ void AstGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) { |
Node* set_property = NewNode(op, receiver, key, value, language); |
// SetProperty should not lazy deopt on an object literal. |
PrepareFrameState(set_property, BailoutId::None()); |
- ResolvedFeedbackSlot home_slot = ResolveFeedbackSlot( |
+ VectorSlotPair home_feedback = CreateVectorSlotPair( |
expr->SlotForHomeObject(property->value(), &store_slot_index)); |
- BuildSetHomeObject(value, receiver, property->value(), home_slot); |
+ BuildSetHomeObject(value, receiver, property->value(), home_feedback); |
} |
break; |
} |
@@ -1825,15 +1827,15 @@ void AstGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) { |
it != accessor_table.end(); ++it) { |
VisitForValue(it->first); |
VisitForValueOrNull(it->second->getter); |
- ResolvedFeedbackSlot slot_getter = ResolveFeedbackSlot( |
+ VectorSlotPair feedback_getter = CreateVectorSlotPair( |
expr->SlotForHomeObject(it->second->getter, &store_slot_index)); |
BuildSetHomeObject(environment()->Top(), literal, it->second->getter, |
- slot_getter); |
+ feedback_getter); |
VisitForValueOrNull(it->second->setter); |
- ResolvedFeedbackSlot slot_setter = ResolveFeedbackSlot( |
+ VectorSlotPair feedback_setter = CreateVectorSlotPair( |
expr->SlotForHomeObject(it->second->getter, &store_slot_index)); |
BuildSetHomeObject(environment()->Top(), literal, it->second->setter, |
- slot_setter); |
+ feedback_setter); |
Node* setter = environment()->Pop(); |
Node* getter = environment()->Pop(); |
Node* name = environment()->Pop(); |
@@ -1878,9 +1880,9 @@ void AstGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) { |
Node* value = environment()->Pop(); |
Node* key = environment()->Pop(); |
Node* receiver = environment()->Pop(); |
- ResolvedFeedbackSlot slot = ResolveFeedbackSlot( |
+ VectorSlotPair feedback = CreateVectorSlotPair( |
expr->SlotForHomeObject(property->value(), &store_slot_index)); |
- BuildSetHomeObject(value, receiver, property->value(), slot); |
+ BuildSetHomeObject(value, receiver, property->value(), feedback); |
switch (property->kind()) { |
case ObjectLiteral::Property::CONSTANT: |
case ObjectLiteral::Property::COMPUTED: |
@@ -1962,9 +1964,8 @@ void AstGraphBuilder::VisitArrayLiteral(ArrayLiteral* expr) { |
FrameStateBeforeAndAfter states(this, subexpr->id()); |
Node* value = environment()->Pop(); |
Node* index = jsgraph()->Constant(array_index); |
- Node* store = |
- BuildKeyedStore(literal, index, value, ResolvedFeedbackSlot(), |
- TypeFeedbackId::None()); |
+ Node* store = BuildKeyedStore(literal, index, value, VectorSlotPair(), |
+ TypeFeedbackId::None()); |
states.AddToNode(store, expr->GetIdForElement(array_index), |
OutputFrameStateCombine::Ignore()); |
} |
@@ -2008,7 +2009,7 @@ void AstGraphBuilder::VisitArrayLiteral(ArrayLiteral* expr) { |
void AstGraphBuilder::VisitForInAssignment(Expression* expr, Node* value, |
- const ResolvedFeedbackSlot& slot, |
+ const VectorSlotPair& feedback, |
BailoutId bailout_id) { |
DCHECK(expr->IsValidReferenceExpression()); |
@@ -2021,7 +2022,7 @@ void AstGraphBuilder::VisitForInAssignment(Expression* expr, Node* value, |
case VARIABLE: { |
Variable* var = expr->AsVariableProxy()->var(); |
FrameStateBeforeAndAfter states(this, BailoutId::None()); |
- BuildVariableAssignment(var, value, Token::ASSIGN, slot, bailout_id, |
+ BuildVariableAssignment(var, value, Token::ASSIGN, feedback, bailout_id, |
states); |
break; |
} |
@@ -2032,8 +2033,8 @@ void AstGraphBuilder::VisitForInAssignment(Expression* expr, Node* value, |
Node* object = environment()->Pop(); |
value = environment()->Pop(); |
Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); |
- Node* store = |
- BuildNamedStore(object, name, value, slot, TypeFeedbackId::None()); |
+ Node* store = BuildNamedStore(object, name, value, feedback, |
+ TypeFeedbackId::None()); |
states.AddToNode(store, bailout_id, OutputFrameStateCombine::Ignore()); |
break; |
} |
@@ -2046,7 +2047,7 @@ void AstGraphBuilder::VisitForInAssignment(Expression* expr, Node* value, |
Node* object = environment()->Pop(); |
value = environment()->Pop(); |
Node* store = |
- BuildKeyedStore(object, key, value, slot, TypeFeedbackId::None()); |
+ BuildKeyedStore(object, key, value, feedback, TypeFeedbackId::None()); |
states.AddToNode(store, bailout_id, OutputFrameStateCombine::Ignore()); |
break; |
} |
@@ -2128,21 +2129,21 @@ void AstGraphBuilder::VisitAssignment(Assignment* expr) { |
switch (assign_type) { |
case VARIABLE: { |
VariableProxy* proxy = expr->target()->AsVariableProxy(); |
- ResolvedFeedbackSlot slot = |
- ResolveFeedbackSlot(proxy->VariableFeedbackSlot()); |
+ VectorSlotPair pair = |
+ CreateVectorSlotPair(proxy->VariableFeedbackSlot()); |
FrameStateBeforeAndAfter states(this, BeforeId(proxy)); |
old_value = |
- BuildVariableLoad(proxy->var(), expr->target()->id(), states, slot, |
+ BuildVariableLoad(proxy->var(), expr->target()->id(), states, pair, |
OutputFrameStateCombine::Push()); |
break; |
} |
case NAMED_PROPERTY: { |
Node* object = environment()->Top(); |
Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); |
- ResolvedFeedbackSlot slot = |
- ResolveFeedbackSlot(property->PropertyFeedbackSlot()); |
+ VectorSlotPair pair = |
+ CreateVectorSlotPair(property->PropertyFeedbackSlot()); |
FrameStateBeforeAndAfter states(this, property->obj()->id()); |
- old_value = BuildNamedLoad(object, name, slot); |
+ old_value = BuildNamedLoad(object, name, pair); |
states.AddToNode(old_value, property->LoadId(), |
OutputFrameStateCombine::Push()); |
break; |
@@ -2150,10 +2151,10 @@ void AstGraphBuilder::VisitAssignment(Assignment* expr) { |
case KEYED_PROPERTY: { |
Node* key = environment()->Top(); |
Node* object = environment()->Peek(1); |
- ResolvedFeedbackSlot slot = |
- ResolveFeedbackSlot(property->PropertyFeedbackSlot()); |
+ VectorSlotPair pair = |
+ CreateVectorSlotPair(property->PropertyFeedbackSlot()); |
FrameStateBeforeAndAfter states(this, property->key()->id()); |
- old_value = BuildKeyedLoad(object, key, slot); |
+ old_value = BuildKeyedLoad(object, key, pair); |
states.AddToNode(old_value, property->LoadId(), |
OutputFrameStateCombine::Push()); |
break; |
@@ -2162,10 +2163,10 @@ void AstGraphBuilder::VisitAssignment(Assignment* expr) { |
Node* home_object = environment()->Top(); |
Node* receiver = environment()->Peek(1); |
Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); |
- ResolvedFeedbackSlot slot = |
- ResolveFeedbackSlot(property->PropertyFeedbackSlot()); |
+ VectorSlotPair pair = |
+ CreateVectorSlotPair(property->PropertyFeedbackSlot()); |
FrameStateBeforeAndAfter states(this, property->obj()->id()); |
- old_value = BuildNamedSuperLoad(receiver, home_object, name, slot); |
+ old_value = BuildNamedSuperLoad(receiver, home_object, name, pair); |
states.AddToNode(old_value, property->LoadId(), |
OutputFrameStateCombine::Push()); |
break; |
@@ -2174,10 +2175,10 @@ void AstGraphBuilder::VisitAssignment(Assignment* expr) { |
Node* key = environment()->Top(); |
Node* home_object = environment()->Peek(1); |
Node* receiver = environment()->Peek(2); |
- ResolvedFeedbackSlot slot = |
- ResolveFeedbackSlot(property->PropertyFeedbackSlot()); |
+ VectorSlotPair pair = |
+ CreateVectorSlotPair(property->PropertyFeedbackSlot()); |
FrameStateBeforeAndAfter states(this, property->key()->id()); |
- old_value = BuildKeyedSuperLoad(receiver, home_object, key, slot); |
+ old_value = BuildKeyedSuperLoad(receiver, home_object, key, pair); |
states.AddToNode(old_value, property->LoadId(), |
OutputFrameStateCombine::Push()); |
break; |
@@ -2208,18 +2209,18 @@ void AstGraphBuilder::VisitAssignment(Assignment* expr) { |
FrameStateBeforeAndAfter store_states(this, before_store_id); |
// Store the value. |
Node* value = environment()->Pop(); |
- ResolvedFeedbackSlot slot = ResolveFeedbackSlot(expr->AssignmentSlot()); |
+ VectorSlotPair feedback = CreateVectorSlotPair(expr->AssignmentSlot()); |
switch (assign_type) { |
case VARIABLE: { |
Variable* variable = expr->target()->AsVariableProxy()->var(); |
- BuildVariableAssignment(variable, value, expr->op(), slot, expr->id(), |
+ BuildVariableAssignment(variable, value, expr->op(), feedback, expr->id(), |
store_states, ast_context()->GetStateCombine()); |
break; |
} |
case NAMED_PROPERTY: { |
Node* object = environment()->Pop(); |
Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); |
- Node* store = BuildNamedStore(object, name, value, slot, |
+ Node* store = BuildNamedStore(object, name, value, feedback, |
expr->AssignmentFeedbackId()); |
store_states.AddToNode(store, expr->id(), |
ast_context()->GetStateCombine()); |
@@ -2228,7 +2229,7 @@ void AstGraphBuilder::VisitAssignment(Assignment* expr) { |
case KEYED_PROPERTY: { |
Node* key = environment()->Pop(); |
Node* object = environment()->Pop(); |
- Node* store = BuildKeyedStore(object, key, value, slot, |
+ Node* store = BuildKeyedStore(object, key, value, feedback, |
expr->AssignmentFeedbackId()); |
store_states.AddToNode(store, expr->id(), |
ast_context()->GetStateCombine()); |
@@ -2278,7 +2279,7 @@ void AstGraphBuilder::VisitThrow(Throw* expr) { |
void AstGraphBuilder::VisitProperty(Property* expr) { |
Node* value = nullptr; |
LhsKind property_kind = Property::GetAssignType(expr); |
- ResolvedFeedbackSlot slot = ResolveFeedbackSlot(expr->PropertyFeedbackSlot()); |
+ VectorSlotPair pair = CreateVectorSlotPair(expr->PropertyFeedbackSlot()); |
switch (property_kind) { |
case VARIABLE: |
UNREACHABLE(); |
@@ -2288,7 +2289,7 @@ void AstGraphBuilder::VisitProperty(Property* expr) { |
FrameStateBeforeAndAfter states(this, expr->obj()->id()); |
Node* object = environment()->Pop(); |
Handle<Name> name = expr->key()->AsLiteral()->AsPropertyName(); |
- value = BuildNamedLoad(object, name, slot); |
+ value = BuildNamedLoad(object, name, pair); |
states.AddToNode(value, expr->id(), ast_context()->GetStateCombine()); |
break; |
} |
@@ -2298,7 +2299,7 @@ void AstGraphBuilder::VisitProperty(Property* expr) { |
FrameStateBeforeAndAfter states(this, expr->key()->id()); |
Node* key = environment()->Pop(); |
Node* object = environment()->Pop(); |
- value = BuildKeyedLoad(object, key, slot); |
+ value = BuildKeyedLoad(object, key, pair); |
states.AddToNode(value, expr->id(), ast_context()->GetStateCombine()); |
break; |
} |
@@ -2309,7 +2310,7 @@ void AstGraphBuilder::VisitProperty(Property* expr) { |
Node* home_object = environment()->Pop(); |
Node* receiver = environment()->Pop(); |
Handle<Name> name = expr->key()->AsLiteral()->AsPropertyName(); |
- value = BuildNamedSuperLoad(receiver, home_object, name, slot); |
+ value = BuildNamedSuperLoad(receiver, home_object, name, pair); |
states.AddToNode(value, expr->id(), ast_context()->GetStateCombine()); |
break; |
} |
@@ -2321,7 +2322,7 @@ void AstGraphBuilder::VisitProperty(Property* expr) { |
Node* key = environment()->Pop(); |
Node* home_object = environment()->Pop(); |
Node* receiver = environment()->Pop(); |
- value = BuildKeyedSuperLoad(receiver, home_object, key, slot); |
+ value = BuildKeyedSuperLoad(receiver, home_object, key, pair); |
states.AddToNode(value, expr->id(), ast_context()->GetStateCombine()); |
break; |
} |
@@ -2343,12 +2344,11 @@ void AstGraphBuilder::VisitCall(Call* expr) { |
switch (call_type) { |
case Call::GLOBAL_CALL: { |
VariableProxy* proxy = callee->AsVariableProxy(); |
- ResolvedFeedbackSlot slot = |
- ResolveFeedbackSlot(proxy->VariableFeedbackSlot()); |
+ VectorSlotPair pair = CreateVectorSlotPair(proxy->VariableFeedbackSlot()); |
FrameStateBeforeAndAfter states(this, BeforeId(proxy)); |
callee_value = |
BuildVariableLoad(proxy->var(), expr->expression()->id(), states, |
- slot, OutputFrameStateCombine::Push()); |
+ pair, OutputFrameStateCombine::Push()); |
receiver_value = jsgraph()->UndefinedConstant(); |
break; |
} |
@@ -2368,8 +2368,8 @@ void AstGraphBuilder::VisitCall(Call* expr) { |
} |
case Call::PROPERTY_CALL: { |
Property* property = callee->AsProperty(); |
- ResolvedFeedbackSlot slot = |
- ResolveFeedbackSlot(property->PropertyFeedbackSlot()); |
+ VectorSlotPair pair = |
+ CreateVectorSlotPair(property->PropertyFeedbackSlot()); |
if (!property->IsSuperAccess()) { |
VisitForValue(property->obj()); |
Node* object = environment()->Top(); |
@@ -2377,14 +2377,14 @@ void AstGraphBuilder::VisitCall(Call* expr) { |
if (property->key()->IsPropertyName()) { |
FrameStateBeforeAndAfter states(this, property->obj()->id()); |
Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); |
- callee_value = BuildNamedLoad(object, name, slot); |
+ callee_value = BuildNamedLoad(object, name, pair); |
states.AddToNode(callee_value, property->LoadId(), |
OutputFrameStateCombine::Push()); |
} else { |
VisitForValue(property->key()); |
FrameStateBeforeAndAfter states(this, property->key()->id()); |
Node* key = environment()->Pop(); |
- callee_value = BuildKeyedLoad(object, key, slot); |
+ callee_value = BuildKeyedLoad(object, key, pair); |
states.AddToNode(callee_value, property->LoadId(), |
OutputFrameStateCombine::Push()); |
} |
@@ -2405,7 +2405,7 @@ void AstGraphBuilder::VisitCall(Call* expr) { |
FrameStateBeforeAndAfter states(this, property->obj()->id()); |
Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); |
callee_value = |
- BuildNamedSuperLoad(receiver_value, home_object, name, slot); |
+ BuildNamedSuperLoad(receiver_value, home_object, name, pair); |
states.AddToNode(callee_value, property->LoadId(), |
OutputFrameStateCombine::Push()); |
@@ -2414,7 +2414,7 @@ void AstGraphBuilder::VisitCall(Call* expr) { |
FrameStateBeforeAndAfter states(this, property->key()->id()); |
Node* key = environment()->Pop(); |
callee_value = |
- BuildKeyedSuperLoad(receiver_value, home_object, key, slot); |
+ BuildKeyedSuperLoad(receiver_value, home_object, key, pair); |
states.AddToNode(callee_value, property->LoadId(), |
OutputFrameStateCombine::Push()); |
} |
@@ -2473,8 +2473,9 @@ void AstGraphBuilder::VisitCall(Call* expr) { |
} |
// Create node to perform the function call. |
- const Operator* call = |
- javascript()->CallFunction(args->length() + 2, flags, language_mode()); |
+ VectorSlotPair feedback = CreateVectorSlotPair(expr->CallFeedbackICSlot()); |
+ const Operator* call = javascript()->CallFunction(args->length() + 2, flags, |
+ language_mode(), feedback); |
Node* value = ProcessArguments(call, args->length() + 2); |
PrepareFrameState(value, expr->id(), ast_context()->GetStateCombine()); |
ast_context()->ProduceValue(value); |
@@ -2503,11 +2504,10 @@ void AstGraphBuilder::VisitCallJSRuntime(CallRuntime* expr) { |
// before arguments are being evaluated. |
CallFunctionFlags flags = NO_CALL_FUNCTION_FLAGS; |
Node* receiver_value = BuildLoadBuiltinsObject(); |
- ResolvedFeedbackSlot slot = |
- ResolveFeedbackSlot(expr->CallRuntimeFeedbackSlot()); |
+ VectorSlotPair pair = CreateVectorSlotPair(expr->CallRuntimeFeedbackSlot()); |
// TODO(jarin): bailout ids for runtime calls. |
FrameStateBeforeAndAfter states(this, BailoutId::None()); |
- Node* callee_value = BuildNamedLoad(receiver_value, name, slot); |
+ Node* callee_value = BuildNamedLoad(receiver_value, name, pair); |
states.AddToNode(callee_value, BailoutId::None(), |
OutputFrameStateCombine::Push()); |
environment()->Push(callee_value); |
@@ -2585,12 +2585,11 @@ void AstGraphBuilder::VisitCountOperation(CountOperation* expr) { |
switch (assign_type) { |
case VARIABLE: { |
VariableProxy* proxy = expr->expression()->AsVariableProxy(); |
- ResolvedFeedbackSlot slot = |
- ResolveFeedbackSlot(proxy->VariableFeedbackSlot()); |
+ VectorSlotPair pair = CreateVectorSlotPair(proxy->VariableFeedbackSlot()); |
FrameStateBeforeAndAfter states(this, BeforeId(proxy)); |
old_value = |
BuildVariableLoad(proxy->var(), expr->expression()->id(), states, |
- slot, OutputFrameStateCombine::Push()); |
+ pair, OutputFrameStateCombine::Push()); |
stack_depth = 0; |
break; |
} |
@@ -2599,9 +2598,9 @@ void AstGraphBuilder::VisitCountOperation(CountOperation* expr) { |
FrameStateBeforeAndAfter states(this, property->obj()->id()); |
Node* object = environment()->Top(); |
Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); |
- ResolvedFeedbackSlot slot = |
- ResolveFeedbackSlot(property->PropertyFeedbackSlot()); |
- old_value = BuildNamedLoad(object, name, slot); |
+ VectorSlotPair pair = |
+ CreateVectorSlotPair(property->PropertyFeedbackSlot()); |
+ old_value = BuildNamedLoad(object, name, pair); |
states.AddToNode(old_value, property->LoadId(), |
OutputFrameStateCombine::Push()); |
stack_depth = 1; |
@@ -2613,9 +2612,9 @@ void AstGraphBuilder::VisitCountOperation(CountOperation* expr) { |
FrameStateBeforeAndAfter states(this, property->key()->id()); |
Node* key = environment()->Top(); |
Node* object = environment()->Peek(1); |
- ResolvedFeedbackSlot slot = |
- ResolveFeedbackSlot(property->PropertyFeedbackSlot()); |
- old_value = BuildKeyedLoad(object, key, slot); |
+ VectorSlotPair pair = |
+ CreateVectorSlotPair(property->PropertyFeedbackSlot()); |
+ old_value = BuildKeyedLoad(object, key, pair); |
states.AddToNode(old_value, property->LoadId(), |
OutputFrameStateCombine::Push()); |
stack_depth = 2; |
@@ -2628,9 +2627,9 @@ void AstGraphBuilder::VisitCountOperation(CountOperation* expr) { |
Node* home_object = environment()->Top(); |
Node* receiver = environment()->Peek(1); |
Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); |
- ResolvedFeedbackSlot slot = |
- ResolveFeedbackSlot(property->PropertyFeedbackSlot()); |
- old_value = BuildNamedSuperLoad(receiver, home_object, name, slot); |
+ VectorSlotPair pair = |
+ CreateVectorSlotPair(property->PropertyFeedbackSlot()); |
+ old_value = BuildNamedSuperLoad(receiver, home_object, name, pair); |
states.AddToNode(old_value, property->LoadId(), |
OutputFrameStateCombine::Push()); |
stack_depth = 2; |
@@ -2644,9 +2643,9 @@ void AstGraphBuilder::VisitCountOperation(CountOperation* expr) { |
Node* key = environment()->Top(); |
Node* home_object = environment()->Peek(1); |
Node* receiver = environment()->Peek(2); |
- ResolvedFeedbackSlot slot = |
- ResolveFeedbackSlot(property->PropertyFeedbackSlot()); |
- old_value = BuildKeyedSuperLoad(receiver, home_object, key, slot); |
+ VectorSlotPair pair = |
+ CreateVectorSlotPair(property->PropertyFeedbackSlot()); |
+ old_value = BuildKeyedSuperLoad(receiver, home_object, key, pair); |
states.AddToNode(old_value, property->LoadId(), |
OutputFrameStateCombine::Push()); |
stack_depth = 3; |
@@ -2680,12 +2679,12 @@ void AstGraphBuilder::VisitCountOperation(CountOperation* expr) { |
} |
// Store the value. |
- ResolvedFeedbackSlot slot = ResolveFeedbackSlot(expr->CountSlot()); |
+ VectorSlotPair feedback = CreateVectorSlotPair(expr->CountSlot()); |
switch (assign_type) { |
case VARIABLE: { |
Variable* variable = expr->expression()->AsVariableProxy()->var(); |
environment()->Push(value); |
- BuildVariableAssignment(variable, value, expr->op(), slot, |
+ BuildVariableAssignment(variable, value, expr->op(), feedback, |
expr->AssignmentId(), store_states); |
environment()->Pop(); |
break; |
@@ -2693,7 +2692,7 @@ void AstGraphBuilder::VisitCountOperation(CountOperation* expr) { |
case NAMED_PROPERTY: { |
Node* object = environment()->Pop(); |
Handle<Name> name = property->key()->AsLiteral()->AsPropertyName(); |
- Node* store = BuildNamedStore(object, name, value, slot, |
+ Node* store = BuildNamedStore(object, name, value, feedback, |
expr->CountStoreFeedbackId()); |
environment()->Push(value); |
store_states.AddToNode(store, expr->AssignmentId(), |
@@ -2704,7 +2703,7 @@ void AstGraphBuilder::VisitCountOperation(CountOperation* expr) { |
case KEYED_PROPERTY: { |
Node* key = environment()->Pop(); |
Node* object = environment()->Pop(); |
- Node* store = BuildKeyedStore(object, key, value, slot, |
+ Node* store = BuildKeyedStore(object, key, value, feedback, |
expr->CountStoreFeedbackId()); |
environment()->Push(value); |
store_states.AddToNode(store, expr->AssignmentId(), |
@@ -2927,11 +2926,10 @@ void AstGraphBuilder::VisitTypeof(UnaryOperation* expr) { |
// Typeof does not throw a reference error on global variables, hence we |
// perform a non-contextual load in case the operand is a variable proxy. |
VariableProxy* proxy = expr->expression()->AsVariableProxy(); |
- ResolvedFeedbackSlot slot = |
- ResolveFeedbackSlot(proxy->VariableFeedbackSlot()); |
+ VectorSlotPair pair = CreateVectorSlotPair(proxy->VariableFeedbackSlot()); |
FrameStateBeforeAndAfter states(this, BeforeId(proxy)); |
operand = |
- BuildVariableLoad(proxy->var(), expr->expression()->id(), states, slot, |
+ BuildVariableLoad(proxy->var(), expr->expression()->id(), states, pair, |
OutputFrameStateCombine::Push(), NOT_CONTEXTUAL); |
} else { |
VisitForValue(expr->expression()); |
@@ -2992,10 +2990,9 @@ LanguageMode AstGraphBuilder::language_mode() const { |
} |
-ResolvedFeedbackSlot AstGraphBuilder::ResolveFeedbackSlot( |
+VectorSlotPair AstGraphBuilder::CreateVectorSlotPair( |
FeedbackVectorICSlot slot) const { |
- return ResolvedFeedbackSlot(handle(info()->shared_info()->feedback_vector()), |
- slot); |
+ return VectorSlotPair(handle(info()->shared_info()->feedback_vector()), slot); |
} |
@@ -3146,8 +3143,8 @@ Node* AstGraphBuilder::BuildArgumentsObject(Variable* arguments) { |
DCHECK(arguments->IsContextSlot() || arguments->IsStackAllocated()); |
// This should never lazy deopt, so it is fine to send invalid bailout id. |
FrameStateBeforeAndAfter states(this, BailoutId::None()); |
- ResolvedFeedbackSlot slot; |
- BuildVariableAssignment(arguments, object, Token::ASSIGN, slot, |
+ VectorSlotPair feedback; |
+ BuildVariableAssignment(arguments, object, Token::ASSIGN, feedback, |
BailoutId::None(), states); |
return object; |
@@ -3166,9 +3163,9 @@ Node* AstGraphBuilder::BuildRestArgumentsArray(Variable* rest, int index) { |
DCHECK(rest->IsContextSlot() || rest->IsStackAllocated()); |
// This should never lazy deopt, so it is fine to send invalid bailout id. |
FrameStateBeforeAndAfter states(this, BailoutId::None()); |
- ResolvedFeedbackSlot slot; |
- BuildVariableAssignment(rest, object, Token::ASSIGN, slot, BailoutId::None(), |
- states); |
+ VectorSlotPair feedback; |
+ BuildVariableAssignment(rest, object, Token::ASSIGN, feedback, |
+ BailoutId::None(), states); |
return object; |
} |
@@ -3179,9 +3176,9 @@ Node* AstGraphBuilder::BuildThisFunctionVar(Variable* this_function_var) { |
Node* this_function = GetFunctionClosure(); |
FrameStateBeforeAndAfter states(this, BailoutId::None()); |
- ResolvedFeedbackSlot slot; |
+ VectorSlotPair feedback; |
BuildVariableAssignment(this_function_var, this_function, Token::INIT_CONST, |
- slot, BailoutId::None(), states); |
+ feedback, BailoutId::None(), states); |
return this_function; |
} |
@@ -3232,7 +3229,7 @@ Node* AstGraphBuilder::BuildThrowIfStaticPrototype(Node* name, |
Node* AstGraphBuilder::BuildVariableLoad(Variable* variable, |
BailoutId bailout_id, |
FrameStateBeforeAndAfter& states, |
- const ResolvedFeedbackSlot& feedback, |
+ const VectorSlotPair& feedback, |
OutputFrameStateCombine combine, |
ContextualMode contextual_mode) { |
Node* the_hole = jsgraph()->TheHoleConstant(); |
@@ -3367,7 +3364,7 @@ Node* AstGraphBuilder::BuildVariableDelete(Variable* variable, |
Node* AstGraphBuilder::BuildVariableAssignment( |
Variable* variable, Node* value, Token::Value op, |
- const ResolvedFeedbackSlot& slot, BailoutId bailout_id, |
+ const VectorSlotPair& feedback, BailoutId bailout_id, |
FrameStateBeforeAndAfter& states, OutputFrameStateCombine combine) { |
Node* the_hole = jsgraph()->TheHoleConstant(); |
VariableMode mode = variable->mode(); |
@@ -3376,8 +3373,8 @@ Node* AstGraphBuilder::BuildVariableAssignment( |
// Global var, const, or let variable. |
Node* global = BuildLoadGlobalObject(); |
Handle<Name> name = variable->name(); |
- Node* store = |
- BuildNamedStore(global, name, value, slot, TypeFeedbackId::None()); |
+ Node* store = BuildNamedStore(global, name, value, feedback, |
+ TypeFeedbackId::None()); |
states.AddToNode(store, bailout_id, combine); |
return store; |
} |
@@ -3492,7 +3489,7 @@ static inline Node* Record(JSTypeFeedbackTable* js_type_feedback, Node* node, |
Node* AstGraphBuilder::BuildKeyedLoad(Node* object, Node* key, |
- const ResolvedFeedbackSlot& feedback) { |
+ const VectorSlotPair& feedback) { |
const Operator* op = javascript()->LoadProperty(feedback); |
return Record(js_type_feedback_, |
NewNode(op, object, key, GetFeedbackVector()), feedback.slot()); |
@@ -3500,7 +3497,7 @@ Node* AstGraphBuilder::BuildKeyedLoad(Node* object, Node* key, |
Node* AstGraphBuilder::BuildNamedLoad(Node* object, Handle<Name> name, |
- const ResolvedFeedbackSlot& feedback, |
+ const VectorSlotPair& feedback, |
ContextualMode mode) { |
const Operator* op = |
javascript()->LoadNamed(MakeUnique(name), feedback, mode); |
@@ -3510,7 +3507,7 @@ Node* AstGraphBuilder::BuildNamedLoad(Node* object, Handle<Name> name, |
Node* AstGraphBuilder::BuildKeyedStore(Node* object, Node* key, Node* value, |
- const ResolvedFeedbackSlot& feedback, |
+ const VectorSlotPair& feedback, |
TypeFeedbackId id) { |
const Operator* op = javascript()->StoreProperty(language_mode(), feedback); |
return Record(js_type_feedback_, NewNode(op, object, key, value), id); |
@@ -3519,7 +3516,7 @@ Node* AstGraphBuilder::BuildKeyedStore(Node* object, Node* key, Node* value, |
Node* AstGraphBuilder::BuildNamedStore(Node* object, Handle<Name> name, |
Node* value, |
- const ResolvedFeedbackSlot& feedback, |
+ const VectorSlotPair& feedback, |
TypeFeedbackId id) { |
const Operator* op = |
javascript()->StoreNamed(language_mode(), MakeUnique(name), feedback); |
@@ -3527,9 +3524,9 @@ Node* AstGraphBuilder::BuildNamedStore(Node* object, Handle<Name> name, |
} |
-Node* AstGraphBuilder::BuildNamedSuperLoad( |
- Node* receiver, Node* home_object, Handle<Name> name, |
- const ResolvedFeedbackSlot& feedback) { |
+Node* AstGraphBuilder::BuildNamedSuperLoad(Node* receiver, Node* home_object, |
+ Handle<Name> name, |
+ const VectorSlotPair& feedback) { |
Node* name_node = jsgraph()->Constant(name); |
const Operator* op = javascript()->CallRuntime(Runtime::kLoadFromSuper, 3); |
Node* value = NewNode(op, receiver, home_object, name_node); |
@@ -3537,9 +3534,9 @@ Node* AstGraphBuilder::BuildNamedSuperLoad( |
} |
-Node* AstGraphBuilder::BuildKeyedSuperLoad( |
- Node* receiver, Node* home_object, Node* key, |
- const ResolvedFeedbackSlot& feedback) { |
+Node* AstGraphBuilder::BuildKeyedSuperLoad(Node* receiver, Node* home_object, |
+ Node* key, |
+ const VectorSlotPair& feedback) { |
const Operator* op = |
javascript()->CallRuntime(Runtime::kLoadKeyedFromSuper, 3); |
Node* value = NewNode(op, receiver, home_object, key); |
@@ -3668,12 +3665,12 @@ Node* AstGraphBuilder::BuildToObject(Node* input, BailoutId bailout_id) { |
Node* AstGraphBuilder::BuildSetHomeObject(Node* value, Node* home_object, |
Expression* expr, |
- const ResolvedFeedbackSlot& slot) { |
+ const VectorSlotPair& feedback) { |
if (!FunctionLiteral::NeedsHomeObject(expr)) return value; |
Handle<Name> name = isolate()->factory()->home_object_symbol(); |
FrameStateBeforeAndAfter states(this, BailoutId::None()); |
- Node* store = |
- BuildNamedStore(value, name, home_object, slot, TypeFeedbackId::None()); |
+ Node* store = BuildNamedStore(value, name, home_object, feedback, |
+ TypeFeedbackId::None()); |
states.AddToNode(store, BailoutId::None(), OutputFrameStateCombine::Ignore()); |
return store; |
} |