| Index: src/ast.cc
|
| diff --git a/src/ast.cc b/src/ast.cc
|
| index 3292b1d50bd333203820cc9b1b1a1642f8bd76e4..91b5c30dff26266a422addb6f75f2f59e8559563 100644
|
| --- a/src/ast.cc
|
| +++ b/src/ast.cc
|
| @@ -71,7 +71,6 @@ VariableProxy::VariableProxy(Zone* zone, Variable* var, int start_position,
|
| bit_field_(IsThisField::encode(var->is_this()) |
|
| IsAssignedField::encode(false) |
|
| IsResolvedField::encode(false)),
|
| - variable_feedback_slot_(FeedbackVectorICSlot::Invalid()),
|
| raw_name_(var->raw_name()),
|
| end_position_(end_position) {
|
| BindTo(var);
|
| @@ -85,7 +84,6 @@ VariableProxy::VariableProxy(Zone* zone, const AstRawString* name,
|
| bit_field_(IsThisField::encode(variable_kind == Variable::THIS) |
|
| IsAssignedField::encode(false) |
|
| IsResolvedField::encode(false)),
|
| - variable_feedback_slot_(FeedbackVectorICSlot::Invalid()),
|
| raw_name_(name),
|
| end_position_(end_position) {}
|
|
|
| @@ -100,14 +98,14 @@ void VariableProxy::BindTo(Variable* var) {
|
|
|
| void VariableProxy::AssignFeedbackVectorSlots(Isolate* isolate,
|
| FeedbackVectorSpec* spec,
|
| - ICSlotCache* cache) {
|
| + FeedbackVectorSlotCache* cache) {
|
| if (UsesVariableFeedbackSlot()) {
|
| // VariableProxies that point to the same Variable within a function can
|
| // make their loads from the same IC slot.
|
| if (var()->IsUnallocated()) {
|
| ZoneHashMap::Entry* entry = cache->Get(var());
|
| if (entry != NULL) {
|
| - variable_feedback_slot_ = FeedbackVectorICSlot(
|
| + variable_feedback_slot_ = FeedbackVectorSlot(
|
| static_cast<int>(reinterpret_cast<intptr_t>(entry->value)));
|
| return;
|
| }
|
| @@ -121,7 +119,7 @@ void VariableProxy::AssignFeedbackVectorSlots(Isolate* isolate,
|
|
|
|
|
| static void AssignVectorSlots(Expression* expr, FeedbackVectorSpec* spec,
|
| - FeedbackVectorICSlot* out_slot) {
|
| + FeedbackVectorSlot* out_slot) {
|
| if (FLAG_vector_stores) {
|
| Property* property = expr->AsProperty();
|
| LhsKind assign_type = Property::GetAssignType(property);
|
| @@ -138,9 +136,9 @@ static void AssignVectorSlots(Expression* expr, FeedbackVectorSpec* spec,
|
| }
|
|
|
|
|
| -void ForEachStatement::AssignFeedbackVectorSlots(Isolate* isolate,
|
| - FeedbackVectorSpec* spec,
|
| - ICSlotCache* cache) {
|
| +void ForEachStatement::AssignFeedbackVectorSlots(
|
| + Isolate* isolate, FeedbackVectorSpec* spec,
|
| + FeedbackVectorSlotCache* cache) {
|
| AssignVectorSlots(each(), spec, &each_slot_);
|
| }
|
|
|
| @@ -153,20 +151,19 @@ Assignment::Assignment(Zone* zone, Token::Value op, Expression* target,
|
| StoreModeField::encode(STANDARD_STORE) | TokenField::encode(op)),
|
| target_(target),
|
| value_(value),
|
| - binary_operation_(NULL),
|
| - slot_(FeedbackVectorICSlot::Invalid()) {}
|
| + binary_operation_(NULL) {}
|
|
|
|
|
| void Assignment::AssignFeedbackVectorSlots(Isolate* isolate,
|
| FeedbackVectorSpec* spec,
|
| - ICSlotCache* cache) {
|
| + FeedbackVectorSlotCache* cache) {
|
| AssignVectorSlots(target(), spec, &slot_);
|
| }
|
|
|
|
|
| void CountOperation::AssignFeedbackVectorSlots(Isolate* isolate,
|
| FeedbackVectorSpec* spec,
|
| - ICSlotCache* cache) {
|
| + FeedbackVectorSlotCache* cache) {
|
| AssignVectorSlots(expression(), spec, &slot_);
|
| }
|
|
|
| @@ -227,7 +224,6 @@ ObjectLiteralProperty::ObjectLiteralProperty(Expression* key, Expression* value,
|
| bool is_computed_name)
|
| : key_(key),
|
| value_(value),
|
| - slot_(FeedbackVectorICSlot::Invalid()),
|
| kind_(kind),
|
| emit_store_(true),
|
| is_static_(is_static),
|
| @@ -240,7 +236,6 @@ ObjectLiteralProperty::ObjectLiteralProperty(AstValueFactory* ast_value_factory,
|
| bool is_computed_name)
|
| : key_(key),
|
| value_(value),
|
| - slot_(FeedbackVectorICSlot::Invalid()),
|
| emit_store_(true),
|
| is_static_(is_static),
|
| is_computed_name_(is_computed_name) {
|
| @@ -260,7 +255,7 @@ ObjectLiteralProperty::ObjectLiteralProperty(AstValueFactory* ast_value_factory,
|
|
|
| void ClassLiteral::AssignFeedbackVectorSlots(Isolate* isolate,
|
| FeedbackVectorSpec* spec,
|
| - ICSlotCache* cache) {
|
| + FeedbackVectorSlotCache* cache) {
|
| if (!FLAG_vector_stores) return;
|
|
|
| // This logic that computes the number of slots needed for vector store
|
| @@ -273,7 +268,7 @@ void ClassLiteral::AssignFeedbackVectorSlots(Isolate* isolate,
|
| ObjectLiteral::Property* property = properties()->at(i);
|
| Expression* value = property->value();
|
| if (FunctionLiteral::NeedsHomeObject(value)) {
|
| - property->set_slot(spec->AddStoreICSlot());
|
| + property->SetSlot(spec->AddStoreICSlot());
|
| }
|
| }
|
| }
|
| @@ -298,7 +293,7 @@ bool ObjectLiteral::Property::emit_store() {
|
|
|
| void ObjectLiteral::AssignFeedbackVectorSlots(Isolate* isolate,
|
| FeedbackVectorSpec* spec,
|
| - ICSlotCache* cache) {
|
| + FeedbackVectorSlotCache* cache) {
|
| if (!FLAG_vector_stores) return;
|
|
|
| // This logic that computes the number of slots needed for vector store
|
| @@ -321,27 +316,27 @@ void ObjectLiteral::AssignFeedbackVectorSlots(Isolate* isolate,
|
| // contains computed properties with an uninitialized value.
|
| if (key->value()->IsInternalizedString()) {
|
| if (property->emit_store()) {
|
| - property->set_slot(spec->AddStoreICSlot());
|
| + property->SetSlot(spec->AddStoreICSlot());
|
| if (FunctionLiteral::NeedsHomeObject(value)) {
|
| - spec->AddStoreICSlot();
|
| + property->SetSlot(spec->AddStoreICSlot(), 1);
|
| }
|
| }
|
| break;
|
| }
|
| if (property->emit_store() && FunctionLiteral::NeedsHomeObject(value)) {
|
| - property->set_slot(spec->AddStoreICSlot());
|
| + property->SetSlot(spec->AddStoreICSlot());
|
| }
|
| break;
|
| case ObjectLiteral::Property::PROTOTYPE:
|
| break;
|
| case ObjectLiteral::Property::GETTER:
|
| if (property->emit_store() && FunctionLiteral::NeedsHomeObject(value)) {
|
| - property->set_slot(spec->AddStoreICSlot());
|
| + property->SetSlot(spec->AddStoreICSlot());
|
| }
|
| break;
|
| case ObjectLiteral::Property::SETTER:
|
| if (property->emit_store() && FunctionLiteral::NeedsHomeObject(value)) {
|
| - property->set_slot(spec->AddStoreICSlot());
|
| + property->SetSlot(spec->AddStoreICSlot());
|
| }
|
| break;
|
| }
|
| @@ -353,7 +348,7 @@ void ObjectLiteral::AssignFeedbackVectorSlots(Isolate* isolate,
|
| Expression* value = property->value();
|
| if (property->kind() != ObjectLiteral::Property::PROTOTYPE) {
|
| if (FunctionLiteral::NeedsHomeObject(value)) {
|
| - property->set_slot(spec->AddStoreICSlot());
|
| + property->SetSlot(spec->AddStoreICSlot());
|
| }
|
| }
|
| }
|
| @@ -720,12 +715,12 @@ bool Call::IsUsingCallFeedbackSlot(Isolate* isolate) const {
|
|
|
|
|
| void Call::AssignFeedbackVectorSlots(Isolate* isolate, FeedbackVectorSpec* spec,
|
| - ICSlotCache* cache) {
|
| + FeedbackVectorSlotCache* cache) {
|
| if (IsUsingCallFeedbackICSlot(isolate)) {
|
| ic_slot_ = spec->AddCallICSlot();
|
| }
|
| if (IsUsingCallFeedbackSlot(isolate)) {
|
| - slot_ = spec->AddStubSlot();
|
| + stub_slot_ = spec->AddGeneralSlot();
|
| }
|
| }
|
|
|
|
|