| Index: src/ic.cc
|
| diff --git a/src/ic.cc b/src/ic.cc
|
| index 64f2e89cfe7982206fd359dd4b5878db625c8aa3..f464c2043b2372a35e0fe90d93f5731574c9bf77 100644
|
| --- a/src/ic.cc
|
| +++ b/src/ic.cc
|
| @@ -1871,7 +1871,7 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver,
|
| KeyedAccessStoreMode old_store_mode =
|
| Code::GetKeyedAccessStoreMode(target()->extra_ic_state());
|
| Handle<Map> previous_receiver_map = target_receiver_maps.at(0);
|
| - if (ic_state == MONOMORPHIC && old_store_mode == STANDARD_STORE) {
|
| + if (ic_state == MONOMORPHIC) {
|
| // If the "old" and "new" maps are in the same elements map family, stay
|
| // MONOMORPHIC and use the map for the most generic ElementsKind.
|
| Handle<Map> transitioned_receiver_map = receiver_map;
|
| @@ -1884,16 +1884,16 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver,
|
| store_mode = GetNonTransitioningStoreMode(store_mode);
|
| return isolate()->stub_cache()->ComputeKeyedStoreElement(
|
| transitioned_receiver_map, strict_mode, store_mode);
|
| - } else if (*previous_receiver_map == receiver->map()) {
|
| - if (IsGrowStoreMode(store_mode) ||
|
| - store_mode == STORE_NO_TRANSITION_IGNORE_OUT_OF_BOUNDS ||
|
| - store_mode == STORE_NO_TRANSITION_HANDLE_COW) {
|
| - // A "normal" IC that handles stores can switch to a version that can
|
| - // grow at the end of the array, handle OOB accesses or copy COW arrays
|
| - // and still stay MONOMORPHIC.
|
| - return isolate()->stub_cache()->ComputeKeyedStoreElement(
|
| - receiver_map, strict_mode, store_mode);
|
| - }
|
| + } else if (*previous_receiver_map == receiver->map() &&
|
| + old_store_mode == STANDARD_STORE &&
|
| + (IsGrowStoreMode(store_mode) ||
|
| + store_mode == STORE_NO_TRANSITION_IGNORE_OUT_OF_BOUNDS ||
|
| + store_mode == STORE_NO_TRANSITION_HANDLE_COW)) {
|
| + // A "normal" IC that handles stores can switch to a version that can
|
| + // grow at the end of the array, handle OOB accesses or copy COW arrays
|
| + // and still stay MONOMORPHIC.
|
| + return isolate()->stub_cache()->ComputeKeyedStoreElement(
|
| + receiver_map, strict_mode, store_mode);
|
| }
|
| }
|
|
|
|
|