| Index: src/type-feedback-vector.cc
|
| diff --git a/src/type-feedback-vector.cc b/src/type-feedback-vector.cc
|
| index ac584ad8a79dcbc42200258f8887f72f502b183a..76c5abf891c43d3ee37accb37f1441e10d37a1c0 100644
|
| --- a/src/type-feedback-vector.cc
|
| +++ b/src/type-feedback-vector.cc
|
| @@ -161,6 +161,8 @@ const char* TypeFeedbackMetadata::Kind2String(FeedbackVectorSlotKind kind) {
|
| return "INTERPRETER_BINARYOP_IC";
|
| case FeedbackVectorSlotKind::INTERPRETER_COMPARE_IC:
|
| return "INTERPRETER_COMPARE_IC";
|
| + case FeedbackVectorSlotKind::STORE_DATA_PROPERTY_IN_LITERAL_IC:
|
| + return "STORE_DATA_PROPERTY_IN_LITERAL_IC";
|
| case FeedbackVectorSlotKind::GENERAL:
|
| return "STUB";
|
| case FeedbackVectorSlotKind::KINDS_NUMBER:
|
| @@ -316,6 +318,11 @@ void TypeFeedbackVector::ClearSlotsImpl(SharedFunctionInfo* shared,
|
| }
|
| break;
|
| }
|
| + case FeedbackVectorSlotKind::STORE_DATA_PROPERTY_IN_LITERAL_IC: {
|
| + StoreDataPropertyInLiteralICNexus nexus(this, slot);
|
| + nexus.Clear(shared->code());
|
| + break;
|
| + }
|
| case FeedbackVectorSlotKind::INVALID:
|
| case FeedbackVectorSlotKind::KINDS_NUMBER:
|
| UNREACHABLE();
|
| @@ -987,5 +994,27 @@ CompareOperationHint CompareICNexus::GetCompareOperationFeedback() const {
|
| return CompareOperationHintFromFeedback(feedback);
|
| }
|
|
|
| +InlineCacheState StoreDataPropertyInLiteralICNexus::StateFromFeedback() const {
|
| + Isolate* isolate = GetIsolate();
|
| + Object* feedback = GetFeedback();
|
| +
|
| + if (feedback == *TypeFeedbackVector::UninitializedSentinel(isolate)) {
|
| + return UNINITIALIZED;
|
| + } else if (feedback->IsWeakCell()) {
|
| + // Don't check if the map is cleared.
|
| + return MONOMORPHIC;
|
| + }
|
| +
|
| + return MEGAMORPHIC;
|
| +}
|
| +
|
| +void StoreDataPropertyInLiteralICNexus::ConfigureMonomorphic(
|
| + Handle<Name> name, Handle<Map> receiver_map) {
|
| + Handle<WeakCell> cell = Map::WeakCellForMap(receiver_map);
|
| +
|
| + SetFeedback(*cell);
|
| + SetFeedbackExtra(*name);
|
| +}
|
| +
|
| } // namespace internal
|
| } // namespace v8
|
|
|