| Index: src/ic.cc
|
| diff --git a/src/ic.cc b/src/ic.cc
|
| index 9e30aeaf3a77e8c9fda86b37b02b5b23dac0d40d..db3e0c789d4f60b686842d4c41840cdacf9f6518 100644
|
| --- a/src/ic.cc
|
| +++ b/src/ic.cc
|
| @@ -1435,22 +1435,22 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<JSObject> receiver,
|
| KeyedStoreIC::GetKeyedAccessStoreMode(target()->extra_ic_state());
|
| Handle<Map> previous_receiver_map = target_receiver_maps.at(0);
|
| if (state() == MONOMORPHIC) {
|
| + Handle<Map> transitioned_receiver_map = receiver_map;
|
| if (IsTransitionStoreMode(store_mode)) {
|
| + transitioned_receiver_map = ComputeTransitionedMap(receiver, store_mode);
|
| + }
|
| + if (receiver_map.is_identical_to(previous_receiver_map) ||
|
| + IsTransitionOfMonomorphicTarget(
|
| + MapToType<HeapType>(transitioned_receiver_map, isolate()))) {
|
| // If the "old" and "new" maps are in the same elements map family, or
|
| // if they at least come from the same origin for a transitioning store,
|
| // stay MONOMORPHIC and use the map for the most generic ElementsKind.
|
| - Handle<Map> transitioned_receiver_map =
|
| - ComputeTransitionedMap(receiver, store_mode);
|
| - if (*previous_receiver_map == receiver->map() ||
|
| - IsTransitionOfMonomorphicTarget(
|
| - MapToType<HeapType>(transitioned_receiver_map, isolate()))) {
|
| - store_mode = GetNonTransitioningStoreMode(store_mode);
|
| - return isolate()->stub_cache()->ComputeKeyedStoreElement(
|
| - transitioned_receiver_map, strict_mode(), store_mode);
|
| - }
|
| + store_mode = GetNonTransitioningStoreMode(store_mode);
|
| + return isolate()->stub_cache()->ComputeKeyedStoreElement(
|
| + transitioned_receiver_map, strict_mode(), store_mode);
|
| } else if (*previous_receiver_map == receiver->map() &&
|
| old_store_mode == STANDARD_STORE &&
|
| - (IsGrowStoreMode(store_mode) ||
|
| + (store_mode == STORE_AND_GROW_NO_TRANSITION ||
|
| 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
|
|
|