| Index: src/ic/ic.cc | 
| diff --git a/src/ic/ic.cc b/src/ic/ic.cc | 
| index 964f1d876d5ec9671e7f1e37a48e6f37f33e114a..7f87345901445b0dca0076f0f699cf8899277928 100644 | 
| --- a/src/ic/ic.cc | 
| +++ b/src/ic/ic.cc | 
| @@ -117,13 +117,10 @@ void IC::TraceIC(const char* type, Handle<Object> name, State old_state, | 
| stdout, true); | 
| } | 
|  | 
| -    ExtraICState extra_state = new_target->extra_ic_state(); | 
| const char* modifier = ""; | 
| if (new_target->kind() == Code::KEYED_STORE_IC) { | 
| KeyedAccessStoreMode mode = | 
| -          FLAG_vector_stores | 
| -              ? casted_nexus<KeyedStoreICNexus>()->GetKeyedAccessStoreMode() | 
| -              : KeyedStoreIC::GetKeyedAccessStoreMode(extra_state); | 
| +          casted_nexus<KeyedStoreICNexus>()->GetKeyedAccessStoreMode(); | 
| modifier = GetTransitionMarkModifier(mode); | 
| } | 
| PrintF(" (%c->%c%s) ", TransitionMarkFromState(old_state), | 
| @@ -470,13 +467,9 @@ void IC::Clear(Isolate* isolate, Address address, Address constant_pool) { | 
| switch (target->kind()) { | 
| case Code::LOAD_IC: | 
| case Code::KEYED_LOAD_IC: | 
| -      return; | 
| case Code::STORE_IC: | 
| -      if (FLAG_vector_stores) return; | 
| -      return StoreIC::Clear(isolate, address, target, constant_pool); | 
| case Code::KEYED_STORE_IC: | 
| -      if (FLAG_vector_stores) return; | 
| -      return KeyedStoreIC::Clear(isolate, address, target, constant_pool); | 
| +      return; | 
| case Code::COMPARE_IC: | 
| return CompareIC::Clear(isolate, address, target, constant_pool); | 
| case Code::COMPARE_NIL_IC: | 
| @@ -810,12 +803,7 @@ bool IC::UpdatePolymorphicIC(Handle<Name> name, Handle<Code> code) { | 
| if (number_of_valid_maps > 1 && target()->is_keyed_stub()) return false; | 
| Handle<Code> ic; | 
| if (number_of_valid_maps == 1) { | 
| -    if (UseVector()) { | 
| -      ConfigureVectorState(name, receiver_map(), code); | 
| -    } else { | 
| -      ic = PropertyICCompiler::ComputeMonomorphic(kind(), name, map, code, | 
| -                                                  extra_ic_state()); | 
| -    } | 
| +    ConfigureVectorState(name, receiver_map(), code); | 
| } else { | 
| if (handler_to_overwrite >= 0) { | 
| handlers.Set(handler_to_overwrite, code); | 
| @@ -827,13 +815,7 @@ bool IC::UpdatePolymorphicIC(Handle<Name> name, Handle<Code> code) { | 
| handlers.Add(code); | 
| } | 
|  | 
| -    if (UseVector()) { | 
| -      ConfigureVectorState(name, &maps, &handlers); | 
| -    } else { | 
| -      ic = PropertyICCompiler::ComputePolymorphic(kind(), &maps, &handlers, | 
| -                                                  number_of_valid_maps, name, | 
| -                                                  extra_ic_state()); | 
| -    } | 
| +    ConfigureVectorState(name, &maps, &handlers); | 
| } | 
|  | 
| if (!UseVector()) set_target(*ic); | 
| @@ -843,13 +825,7 @@ bool IC::UpdatePolymorphicIC(Handle<Name> name, Handle<Code> code) { | 
|  | 
| void IC::UpdateMonomorphicIC(Handle<Code> handler, Handle<Name> name) { | 
| DCHECK(handler->is_handler()); | 
| -  if (UseVector()) { | 
| -    ConfigureVectorState(name, receiver_map(), handler); | 
| -  } else { | 
| -    Handle<Code> ic = PropertyICCompiler::ComputeMonomorphic( | 
| -        kind(), name, receiver_map(), handler, extra_ic_state()); | 
| -    set_target(*ic); | 
| -  } | 
| +  ConfigureVectorState(name, receiver_map(), handler); | 
| } | 
|  | 
|  | 
| @@ -973,7 +949,7 @@ static Handle<Code> KeyedStoreICInitializeStubHelper( | 
| Handle<Code> KeyedStoreIC::initialize_stub(Isolate* isolate, | 
| LanguageMode language_mode, | 
| State initialization_state) { | 
| -  if (FLAG_vector_stores && initialization_state != MEGAMORPHIC) { | 
| +  if (initialization_state != MEGAMORPHIC) { | 
| VectorKeyedStoreICTrampolineStub stub(isolate, StoreICState(language_mode)); | 
| return stub.GetCode(); | 
| } | 
| @@ -985,7 +961,7 @@ Handle<Code> KeyedStoreIC::initialize_stub(Isolate* isolate, | 
|  | 
| Handle<Code> KeyedStoreIC::initialize_stub_in_optimized_code( | 
| Isolate* isolate, LanguageMode language_mode, State initialization_state) { | 
| -  if (FLAG_vector_stores && initialization_state != MEGAMORPHIC) { | 
| +  if (initialization_state != MEGAMORPHIC) { | 
| VectorKeyedStoreICStub stub(isolate, StoreICState(language_mode)); | 
| return stub.GetCode(); | 
| } | 
| @@ -1620,13 +1596,8 @@ Handle<Code> StoreIC::initialize_stub(Isolate* isolate, | 
| DCHECK(initialization_state == UNINITIALIZED || | 
| initialization_state == PREMONOMORPHIC || | 
| initialization_state == MEGAMORPHIC); | 
| -  if (FLAG_vector_stores) { | 
| -    VectorStoreICTrampolineStub stub(isolate, StoreICState(language_mode)); | 
| -    return stub.GetCode(); | 
| -  } | 
| - | 
| -  return StoreICInitializeStubHelper( | 
| -      isolate, ComputeExtraICState(language_mode), initialization_state); | 
| +  VectorStoreICTrampolineStub stub(isolate, StoreICState(language_mode)); | 
| +  return stub.GetCode(); | 
| } | 
|  | 
|  | 
| @@ -1635,7 +1606,7 @@ Handle<Code> StoreIC::initialize_stub_in_optimized_code( | 
| DCHECK(initialization_state == UNINITIALIZED || | 
| initialization_state == PREMONOMORPHIC || | 
| initialization_state == MEGAMORPHIC); | 
| -  if (FLAG_vector_stores && initialization_state != MEGAMORPHIC) { | 
| +  if (initialization_state != MEGAMORPHIC) { | 
| VectorStoreICStub stub(isolate, StoreICState(language_mode)); | 
| return stub.GetCode(); | 
| } | 
| @@ -1682,11 +1653,7 @@ void StoreIC::UpdateCaches(LookupIterator* lookup, Handle<Object> value, | 
| if (state() == UNINITIALIZED) { | 
| // This is the first time we execute this inline cache. Set the target to | 
| // the pre monomorphic stub to delay setting the monomorphic state. | 
| -    if (FLAG_vector_stores) { | 
| -      ConfigureVectorState(PREMONOMORPHIC); | 
| -    } else { | 
| -      set_target(*pre_monomorphic_stub()); | 
| -    } | 
| +    ConfigureVectorState(PREMONOMORPHIC); | 
| TRACE_IC("StoreIC", lookup->name()); | 
| return; | 
| } | 
| @@ -1882,25 +1849,18 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<Map> receiver_map, | 
| Handle<Map> monomorphic_map = | 
| ComputeTransitionedMap(receiver_map, store_mode); | 
| store_mode = GetNonTransitioningStoreMode(store_mode); | 
| -    if (FLAG_vector_stores) { | 
| -      Handle<Code> handler = | 
| -          PropertyICCompiler::ComputeKeyedStoreMonomorphicHandler( | 
| -              monomorphic_map, language_mode(), store_mode); | 
| -      ConfigureVectorState(Handle<Name>::null(), monomorphic_map, handler); | 
| -      return null_handle; | 
| -    } | 
| -    return PropertyICCompiler::ComputeKeyedStoreMonomorphic( | 
| -        monomorphic_map, language_mode(), store_mode); | 
| +    Handle<Code> handler = | 
| +        PropertyICCompiler::ComputeKeyedStoreMonomorphicHandler( | 
| +            monomorphic_map, language_mode(), store_mode); | 
| +    ConfigureVectorState(Handle<Name>::null(), monomorphic_map, handler); | 
| +    return null_handle; | 
| } | 
|  | 
| // There are several special cases where an IC that is MONOMORPHIC can still | 
| // transition to a different GetNonTransitioningStoreMode IC that handles a | 
| // superset of the original IC. Handle those here if the receiver map hasn't | 
| // changed or it has transitioned to a more general kind. | 
| -  KeyedAccessStoreMode old_store_mode = | 
| -      FLAG_vector_stores | 
| -          ? GetKeyedAccessStoreMode() | 
| -          : KeyedStoreIC::GetKeyedAccessStoreMode(target()->extra_ic_state()); | 
| +  KeyedAccessStoreMode old_store_mode = GetKeyedAccessStoreMode(); | 
| Handle<Map> previous_receiver_map = target_receiver_maps.at(0); | 
| if (state() == MONOMORPHIC) { | 
| Handle<Map> transitioned_receiver_map = receiver_map; | 
| @@ -1916,16 +1876,12 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<Map> receiver_map, | 
| // if they at least come from the same origin for a transitioning store, | 
| // stay MONOMORPHIC and use the map for the most generic ElementsKind. | 
| store_mode = GetNonTransitioningStoreMode(store_mode); | 
| -      if (FLAG_vector_stores) { | 
| -        Handle<Code> handler = | 
| -            PropertyICCompiler::ComputeKeyedStoreMonomorphicHandler( | 
| -                transitioned_receiver_map, language_mode(), store_mode); | 
| -        ConfigureVectorState(Handle<Name>::null(), transitioned_receiver_map, | 
| -                             handler); | 
| -        return null_handle; | 
| -      } | 
| -      return PropertyICCompiler::ComputeKeyedStoreMonomorphic( | 
| -          transitioned_receiver_map, language_mode(), store_mode); | 
| +      Handle<Code> handler = | 
| +          PropertyICCompiler::ComputeKeyedStoreMonomorphicHandler( | 
| +              transitioned_receiver_map, language_mode(), store_mode); | 
| +      ConfigureVectorState(Handle<Name>::null(), transitioned_receiver_map, | 
| +                           handler); | 
| +      return null_handle; | 
| } else if (receiver_map.is_identical_to(previous_receiver_map) && | 
| old_store_mode == STANDARD_STORE && | 
| (store_mode == STORE_AND_GROW_NO_TRANSITION || | 
| @@ -1934,15 +1890,11 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<Map> receiver_map, | 
| // 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. | 
| -      if (FLAG_vector_stores) { | 
| -        Handle<Code> handler = | 
| -            PropertyICCompiler::ComputeKeyedStoreMonomorphicHandler( | 
| -                receiver_map, language_mode(), store_mode); | 
| -        ConfigureVectorState(Handle<Name>::null(), receiver_map, handler); | 
| -        return null_handle; | 
| -      } | 
| -      return PropertyICCompiler::ComputeKeyedStoreMonomorphic( | 
| -          receiver_map, language_mode(), store_mode); | 
| +      Handle<Code> handler = | 
| +          PropertyICCompiler::ComputeKeyedStoreMonomorphicHandler( | 
| +              receiver_map, language_mode(), store_mode); | 
| +      ConfigureVectorState(Handle<Name>::null(), receiver_map, handler); | 
| +      return null_handle; | 
| } | 
| } | 
|  | 
| @@ -2001,18 +1953,13 @@ Handle<Code> KeyedStoreIC::StoreElementStub(Handle<Map> receiver_map, | 
| } | 
| } | 
|  | 
| -  if (FLAG_vector_stores) { | 
| -    MapHandleList transitioned_maps(target_receiver_maps.length()); | 
| -    CodeHandleList handlers(target_receiver_maps.length()); | 
| -    PropertyICCompiler::ComputeKeyedStorePolymorphicHandlers( | 
| -        &target_receiver_maps, &transitioned_maps, &handlers, store_mode, | 
| -        language_mode()); | 
| -    ConfigureVectorState(&target_receiver_maps, &transitioned_maps, &handlers); | 
| -    return null_handle; | 
| -  } | 
| - | 
| -  return PropertyICCompiler::ComputeKeyedStorePolymorphic( | 
| -      &target_receiver_maps, store_mode, language_mode()); | 
| +  MapHandleList transitioned_maps(target_receiver_maps.length()); | 
| +  CodeHandleList handlers(target_receiver_maps.length()); | 
| +  PropertyICCompiler::ComputeKeyedStorePolymorphicHandlers( | 
| +      &target_receiver_maps, &transitioned_maps, &handlers, store_mode, | 
| +      language_mode()); | 
| +  ConfigureVectorState(&target_receiver_maps, &transitioned_maps, &handlers); | 
| +  return null_handle; | 
| } | 
|  | 
|  | 
| @@ -2106,44 +2053,6 @@ static KeyedAccessStoreMode GetStoreMode(Handle<JSObject> receiver, | 
| } | 
|  | 
|  | 
| -void KeyedStoreIC::ValidateStoreMode(Handle<Code> stub) { | 
| -#ifdef DEBUG | 
| -  DCHECK(!FLAG_vector_stores); | 
| -  if (stub.is_null() || *stub == *megamorphic_stub() || *stub == *slow_stub()) { | 
| -    return; | 
| -  } | 
| - | 
| -  // Query the keyed store mode. | 
| -  ExtraICState state = stub->extra_ic_state(); | 
| -  KeyedAccessStoreMode stub_mode = GetKeyedAccessStoreMode(state); | 
| - | 
| -  MapHandleList map_list; | 
| -  stub->FindAllMaps(&map_list); | 
| -  CodeHandleList list; | 
| -  stub->FindHandlers(&list, map_list.length()); | 
| -  for (int i = 0; i < list.length(); i++) { | 
| -    Handle<Code> handler = list.at(i); | 
| -    CHECK(handler->is_handler()); | 
| -    CodeStub::Major major_key = CodeStub::MajorKeyFromKey(handler->stub_key()); | 
| -    uint32_t minor_key = CodeStub::MinorKeyFromKey(handler->stub_key()); | 
| -    // Ensure that we only see handlers we know have the store mode embedded. | 
| -    CHECK(major_key == CodeStub::KeyedStoreSloppyArguments || | 
| -          major_key == CodeStub::StoreFastElement || | 
| -          major_key == CodeStub::StoreElement || | 
| -          major_key == CodeStub::ElementsTransitionAndStore || | 
| -          *handler == *isolate()->builtins()->KeyedStoreIC_Slow()); | 
| -    // Ensure that the store mode matches that of the IC. | 
| -    CHECK(major_key == CodeStub::NoCache || | 
| -          stub_mode == CommonStoreModeBits::decode(minor_key)); | 
| -    // The one exception is the keyed store slow builtin, which doesn't include | 
| -    // store mode. | 
| -    CHECK(major_key != CodeStub::NoCache || | 
| -          *handler == *isolate()->builtins()->KeyedStoreIC_Slow()); | 
| -  } | 
| -#endif  // DEBUG | 
| -} | 
| - | 
| - | 
| MaybeHandle<Object> KeyedStoreIC::Store(Handle<Object> object, | 
| Handle<Object> key, | 
| Handle<Object> value) { | 
| @@ -2174,20 +2083,11 @@ MaybeHandle<Object> KeyedStoreIC::Store(Handle<Object> object, | 
| StoreIC::Store(object, Handle<Name>::cast(key), value, | 
| JSReceiver::MAY_BE_STORE_FROM_KEYED), | 
| Object); | 
| -    if (FLAG_vector_stores) { | 
| -      if (!is_vector_set()) { | 
| -        ConfigureVectorState(MEGAMORPHIC); | 
| -        TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", | 
| -                         "unhandled internalized string key"); | 
| -        TRACE_IC("StoreIC", key); | 
| -      } | 
| -    } else { | 
| -      if (!is_target_set()) { | 
| -        TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", | 
| -                         "unhandled internalized string key"); | 
| -        TRACE_IC("StoreIC", key); | 
| -        set_target(*stub); | 
| -      } | 
| +    if (!is_vector_set()) { | 
| +      ConfigureVectorState(MEGAMORPHIC); | 
| +      TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", | 
| +                       "unhandled internalized string key"); | 
| +      TRACE_IC("StoreIC", key); | 
| } | 
| return store_handle; | 
| } | 
| @@ -2244,10 +2144,6 @@ MaybeHandle<Object> KeyedStoreIC::Store(Handle<Object> object, | 
| // from fast path keyed stores. | 
| if (!old_receiver_map->DictionaryElementsInPrototypeChainOnly()) { | 
| stub = StoreElementStub(old_receiver_map, store_mode); | 
| - | 
| -          // Validate that the store_mode in the stub can also be derived | 
| -          // from peeking in the code bits of the handlers. | 
| -          if (!FLAG_vector_stores) ValidateStoreMode(stub); | 
| } else { | 
| TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", | 
| "dictionary or proxy prototype"); | 
| @@ -2260,27 +2156,12 @@ MaybeHandle<Object> KeyedStoreIC::Store(Handle<Object> object, | 
| } | 
| } | 
|  | 
| -  if (FLAG_vector_stores) { | 
| -    if (!is_vector_set() || stub.is_null()) { | 
| -      Code* megamorphic = *megamorphic_stub(); | 
| -      if (!stub.is_null() && (*stub == megamorphic || *stub == *slow_stub())) { | 
| -        ConfigureVectorState(MEGAMORPHIC); | 
| -        TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", | 
| -                         *stub == megamorphic ? "set generic" : "slow stub"); | 
| -      } | 
| -    } | 
| -  } else { | 
| -    DCHECK(!is_target_set()); | 
| +  if (!is_vector_set() || stub.is_null()) { | 
| Code* megamorphic = *megamorphic_stub(); | 
| -    if (*stub == megamorphic) { | 
| -      TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", "set generic"); | 
| -    } else if (*stub == *slow_stub()) { | 
| -      TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", "slow stub"); | 
| -    } | 
| - | 
| -    DCHECK(!stub.is_null()); | 
| -    if (!AddressIsDeoptimizedCode()) { | 
| -      set_target(*stub); | 
| +    if (!stub.is_null() && (*stub == megamorphic || *stub == *slow_stub())) { | 
| +      ConfigureVectorState(MEGAMORPHIC); | 
| +      TRACE_GENERIC_IC(isolate(), "KeyedStoreIC", | 
| +                       *stub == megamorphic ? "set generic" : "slow stub"); | 
| } | 
| } | 
| TRACE_IC("StoreIC", key); | 
| @@ -2436,29 +2317,21 @@ RUNTIME_FUNCTION(Runtime_StoreIC_Miss) { | 
| Handle<Object> value = args.at<Object>(2); | 
| Handle<Object> result; | 
|  | 
| -  if (FLAG_vector_stores) { | 
| -    DCHECK(args.length() == 5 || args.length() == 6); | 
| -    Handle<Smi> slot = args.at<Smi>(3); | 
| -    Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(4); | 
| -    FeedbackVectorSlot vector_slot = vector->ToSlot(slot->value()); | 
| -    if (vector->GetKind(vector_slot) == FeedbackVectorSlotKind::STORE_IC) { | 
| -      StoreICNexus nexus(vector, vector_slot); | 
| -      StoreIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); | 
| -      ic.UpdateState(receiver, key); | 
| -      ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, | 
| -                                         ic.Store(receiver, key, value)); | 
| -    } else { | 
| -      DCHECK_EQ(FeedbackVectorSlotKind::KEYED_STORE_IC, | 
| -                vector->GetKind(vector_slot)); | 
| -      KeyedStoreICNexus nexus(vector, vector_slot); | 
| -      KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); | 
| -      ic.UpdateState(receiver, key); | 
| -      ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, | 
| -                                         ic.Store(receiver, key, value)); | 
| -    } | 
| +  DCHECK(args.length() == 5 || args.length() == 6); | 
| +  Handle<Smi> slot = args.at<Smi>(3); | 
| +  Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(4); | 
| +  FeedbackVectorSlot vector_slot = vector->ToSlot(slot->value()); | 
| +  if (vector->GetKind(vector_slot) == FeedbackVectorSlotKind::STORE_IC) { | 
| +    StoreICNexus nexus(vector, vector_slot); | 
| +    StoreIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); | 
| +    ic.UpdateState(receiver, key); | 
| +    ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, | 
| +                                       ic.Store(receiver, key, value)); | 
| } else { | 
| -    DCHECK(args.length() == 3); | 
| -    StoreIC ic(IC::NO_EXTRA_FRAME, isolate); | 
| +    DCHECK_EQ(FeedbackVectorSlotKind::KEYED_STORE_IC, | 
| +              vector->GetKind(vector_slot)); | 
| +    KeyedStoreICNexus nexus(vector, vector_slot); | 
| +    KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); | 
| ic.UpdateState(receiver, key); | 
| ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, | 
| ic.Store(receiver, key, value)); | 
| @@ -2475,49 +2348,41 @@ RUNTIME_FUNCTION(Runtime_StoreIC_MissFromStubFailure) { | 
| Handle<Object> value = args.at<Object>(2); | 
| Handle<Object> result; | 
|  | 
| -  if (FLAG_vector_stores) { | 
| -    int length = args.length(); | 
| -    DCHECK(length == 5 || length == 6); | 
| -    // We might have slot and vector, for a normal miss (slot(3), vector(4)). | 
| -    // Or, map and vector for a transitioning store miss (map(3), vector(4)). | 
| -    // In this case, we need to recover the slot from a virtual register. | 
| -    // If length == 6, then a map is included (map(3), slot(4), vector(5)). | 
| -    Handle<Smi> slot; | 
| -    Handle<TypeFeedbackVector> vector; | 
| -    if (length == 5) { | 
| -      if (args.at<Object>(3)->IsMap()) { | 
| -        vector = args.at<TypeFeedbackVector>(4); | 
| -        slot = handle( | 
| -            *reinterpret_cast<Smi**>(isolate->virtual_slot_register_address()), | 
| -            isolate); | 
| -      } else { | 
| -        vector = args.at<TypeFeedbackVector>(4); | 
| -        slot = args.at<Smi>(3); | 
| -      } | 
| +  int length = args.length(); | 
| +  DCHECK(length == 5 || length == 6); | 
| +  // We might have slot and vector, for a normal miss (slot(3), vector(4)). | 
| +  // Or, map and vector for a transitioning store miss (map(3), vector(4)). | 
| +  // In this case, we need to recover the slot from a virtual register. | 
| +  // If length == 6, then a map is included (map(3), slot(4), vector(5)). | 
| +  Handle<Smi> slot; | 
| +  Handle<TypeFeedbackVector> vector; | 
| +  if (length == 5) { | 
| +    if (args.at<Object>(3)->IsMap()) { | 
| +      vector = args.at<TypeFeedbackVector>(4); | 
| +      slot = handle( | 
| +          *reinterpret_cast<Smi**>(isolate->virtual_slot_register_address()), | 
| +          isolate); | 
| } else { | 
| -      vector = args.at<TypeFeedbackVector>(5); | 
| -      slot = args.at<Smi>(4); | 
| +      vector = args.at<TypeFeedbackVector>(4); | 
| +      slot = args.at<Smi>(3); | 
| } | 
| +  } else { | 
| +    vector = args.at<TypeFeedbackVector>(5); | 
| +    slot = args.at<Smi>(4); | 
| +  } | 
|  | 
| -    FeedbackVectorSlot vector_slot = vector->ToSlot(slot->value()); | 
| -    if (vector->GetKind(vector_slot) == FeedbackVectorSlotKind::STORE_IC) { | 
| -      StoreICNexus nexus(vector, vector_slot); | 
| -      StoreIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); | 
| -      ic.UpdateState(receiver, key); | 
| -      ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, | 
| -                                         ic.Store(receiver, key, value)); | 
| -    } else { | 
| -      DCHECK_EQ(FeedbackVectorSlotKind::KEYED_STORE_IC, | 
| -                vector->GetKind(vector_slot)); | 
| -      KeyedStoreICNexus nexus(vector, vector_slot); | 
| -      KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); | 
| -      ic.UpdateState(receiver, key); | 
| -      ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, | 
| -                                         ic.Store(receiver, key, value)); | 
| -    } | 
| +  FeedbackVectorSlot vector_slot = vector->ToSlot(slot->value()); | 
| +  if (vector->GetKind(vector_slot) == FeedbackVectorSlotKind::STORE_IC) { | 
| +    StoreICNexus nexus(vector, vector_slot); | 
| +    StoreIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); | 
| +    ic.UpdateState(receiver, key); | 
| +    ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, | 
| +                                       ic.Store(receiver, key, value)); | 
| } else { | 
| -    DCHECK(args.length() == 3 || args.length() == 4); | 
| -    StoreIC ic(IC::EXTRA_CALL_FRAME, isolate); | 
| +    DCHECK_EQ(FeedbackVectorSlotKind::KEYED_STORE_IC, | 
| +              vector->GetKind(vector_slot)); | 
| +    KeyedStoreICNexus nexus(vector, vector_slot); | 
| +    KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); | 
| ic.UpdateState(receiver, key); | 
| ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, | 
| ic.Store(receiver, key, value)); | 
| @@ -2535,23 +2400,15 @@ RUNTIME_FUNCTION(Runtime_KeyedStoreIC_Miss) { | 
| Handle<Object> value = args.at<Object>(2); | 
| Handle<Object> result; | 
|  | 
| -  if (FLAG_vector_stores) { | 
| -    DCHECK(args.length() == 5); | 
| -    Handle<Smi> slot = args.at<Smi>(3); | 
| -    Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(4); | 
| -    FeedbackVectorSlot vector_slot = vector->ToSlot(slot->value()); | 
| -    KeyedStoreICNexus nexus(vector, vector_slot); | 
| -    KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); | 
| -    ic.UpdateState(receiver, key); | 
| -    ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, | 
| -                                       ic.Store(receiver, key, value)); | 
| -  } else { | 
| -    DCHECK(args.length() == 3); | 
| -    KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate); | 
| -    ic.UpdateState(receiver, key); | 
| -    ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, | 
| -                                       ic.Store(receiver, key, value)); | 
| -  } | 
| +  DCHECK(args.length() == 5); | 
| +  Handle<Smi> slot = args.at<Smi>(3); | 
| +  Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(4); | 
| +  FeedbackVectorSlot vector_slot = vector->ToSlot(slot->value()); | 
| +  KeyedStoreICNexus nexus(vector, vector_slot); | 
| +  KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); | 
| +  ic.UpdateState(receiver, key); | 
| +  ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, | 
| +                                     ic.Store(receiver, key, value)); | 
| return *result; | 
| } | 
|  | 
| @@ -2564,42 +2421,29 @@ RUNTIME_FUNCTION(Runtime_KeyedStoreIC_MissFromStubFailure) { | 
| Handle<Object> value = args.at<Object>(2); | 
| Handle<Object> result; | 
|  | 
| -  if (FLAG_vector_stores) { | 
| -    DCHECK(args.length() == 5); | 
| -    Handle<Smi> slot = args.at<Smi>(3); | 
| -    Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(4); | 
| -    FeedbackVectorSlot vector_slot = vector->ToSlot(slot->value()); | 
| -    KeyedStoreICNexus nexus(vector, vector_slot); | 
| -    KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); | 
| -    ic.UpdateState(receiver, key); | 
| -    ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, | 
| -                                       ic.Store(receiver, key, value)); | 
| -  } else { | 
| -    DCHECK(args.length() == 3); | 
| -    KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate); | 
| -    ic.UpdateState(receiver, key); | 
| -    ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 
| -        isolate, result, ic.Store(receiver, key, args.at<Object>(2))); | 
| -  } | 
| +  DCHECK(args.length() == 5); | 
| +  Handle<Smi> slot = args.at<Smi>(3); | 
| +  Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(4); | 
| +  FeedbackVectorSlot vector_slot = vector->ToSlot(slot->value()); | 
| +  KeyedStoreICNexus nexus(vector, vector_slot); | 
| +  KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); | 
| +  ic.UpdateState(receiver, key); | 
| +  ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, | 
| +                                     ic.Store(receiver, key, value)); | 
| return *result; | 
| } | 
|  | 
|  | 
| RUNTIME_FUNCTION(Runtime_StoreIC_Slow) { | 
| HandleScope scope(isolate); | 
| -  DCHECK(args.length() == (FLAG_vector_stores ? 5 : 3)); | 
| +  DCHECK(args.length() == 5); | 
| Handle<Object> object = args.at<Object>(0); | 
| Handle<Object> key = args.at<Object>(1); | 
| Handle<Object> value = args.at<Object>(2); | 
| LanguageMode language_mode; | 
| -  if (FLAG_vector_stores) { | 
| -    StoreICNexus nexus(isolate); | 
| -    StoreIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); | 
| -    language_mode = ic.language_mode(); | 
| -  } else { | 
| -    StoreIC ic(IC::NO_EXTRA_FRAME, isolate); | 
| -    language_mode = ic.language_mode(); | 
| -  } | 
| +  StoreICNexus nexus(isolate); | 
| +  StoreIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); | 
| +  language_mode = ic.language_mode(); | 
| Handle<Object> result; | 
| ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 
| isolate, result, | 
| @@ -2610,19 +2454,14 @@ RUNTIME_FUNCTION(Runtime_StoreIC_Slow) { | 
|  | 
| RUNTIME_FUNCTION(Runtime_KeyedStoreIC_Slow) { | 
| HandleScope scope(isolate); | 
| -  DCHECK(args.length() == (FLAG_vector_stores ? 5 : 3)); | 
| +  DCHECK(args.length() == 5); | 
| Handle<Object> object = args.at<Object>(0); | 
| Handle<Object> key = args.at<Object>(1); | 
| Handle<Object> value = args.at<Object>(2); | 
| LanguageMode language_mode; | 
| -  if (FLAG_vector_stores) { | 
| -    KeyedStoreICNexus nexus(isolate); | 
| -    KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); | 
| -    language_mode = ic.language_mode(); | 
| -  } else { | 
| -    KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate); | 
| -    language_mode = ic.language_mode(); | 
| -  } | 
| +  KeyedStoreICNexus nexus(isolate); | 
| +  KeyedStoreIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); | 
| +  language_mode = ic.language_mode(); | 
| Handle<Object> result; | 
| ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 
| isolate, result, | 
| @@ -2634,23 +2473,17 @@ RUNTIME_FUNCTION(Runtime_KeyedStoreIC_Slow) { | 
| RUNTIME_FUNCTION(Runtime_ElementsTransitionAndStoreIC_Miss) { | 
| TimerEventScope<TimerEventIcMiss> timer(isolate); | 
| HandleScope scope(isolate); | 
| -  // Without vector stores, length == 4. | 
| -  // With vector stores, length == 5 or 6, depending on whether the vector slot | 
| +  // Length == 5 or 6, depending on whether the vector slot | 
| // is passed in a virtual register or not. | 
| -  DCHECK(!FLAG_vector_stores || args.length() == 5 || args.length() == 6); | 
| +  DCHECK(args.length() == 5 || args.length() == 6); | 
| Handle<Object> object = args.at<Object>(0); | 
| Handle<Object> key = args.at<Object>(1); | 
| Handle<Object> value = args.at<Object>(2); | 
| Handle<Map> map = args.at<Map>(3); | 
| LanguageMode language_mode; | 
| -  if (FLAG_vector_stores) { | 
| -    KeyedStoreICNexus nexus(isolate); | 
| -    KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); | 
| -    language_mode = ic.language_mode(); | 
| -  } else { | 
| -    KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate); | 
| -    language_mode = ic.language_mode(); | 
| -  } | 
| +  KeyedStoreICNexus nexus(isolate); | 
| +  KeyedStoreIC ic(IC::EXTRA_CALL_FRAME, isolate, &nexus); | 
| +  language_mode = ic.language_mode(); | 
| if (object->IsJSObject()) { | 
| JSObject::TransitionElementsKind(Handle<JSObject>::cast(object), | 
| map->elements_kind()); | 
|  |