| Index: src/crankshaft/hydrogen-instructions.h
 | 
| diff --git a/src/crankshaft/hydrogen-instructions.h b/src/crankshaft/hydrogen-instructions.h
 | 
| index fdb1fd6d46c5cea8a8f77458d8297f5e8980b51d..898539b21d59d5925292d50bd9e1b9fa5f580e47 100644
 | 
| --- a/src/crankshaft/hydrogen-instructions.h
 | 
| +++ b/src/crankshaft/hydrogen-instructions.h
 | 
| @@ -4875,8 +4875,10 @@ class HUnknownOSRValue final : public HTemplateInstruction<0> {
 | 
|  
 | 
|  class HLoadGlobalGeneric final : public HTemplateInstruction<2> {
 | 
|   public:
 | 
| -  DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HLoadGlobalGeneric, HValue*,
 | 
| -                                              Handle<String>, TypeofMode);
 | 
| +  DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P5(HLoadGlobalGeneric, HValue*,
 | 
| +                                              Handle<String>, TypeofMode,
 | 
| +                                              Handle<TypeFeedbackVector>,
 | 
| +                                              FeedbackVectorSlot);
 | 
|  
 | 
|    HValue* context() { return OperandAt(0); }
 | 
|    HValue* global_object() { return OperandAt(1); }
 | 
| @@ -4886,12 +4888,6 @@ class HLoadGlobalGeneric final : public HTemplateInstruction<2> {
 | 
|    Handle<TypeFeedbackVector> feedback_vector() const {
 | 
|      return feedback_vector_;
 | 
|    }
 | 
| -  bool HasVectorAndSlot() const { return true; }
 | 
| -  void SetVectorAndSlot(Handle<TypeFeedbackVector> vector,
 | 
| -                        FeedbackVectorSlot slot) {
 | 
| -    feedback_vector_ = vector;
 | 
| -    slot_ = slot;
 | 
| -  }
 | 
|  
 | 
|    std::ostream& PrintDataTo(std::ostream& os) const override;  // NOLINT
 | 
|  
 | 
| @@ -4903,8 +4899,12 @@ class HLoadGlobalGeneric final : public HTemplateInstruction<2> {
 | 
|  
 | 
|   private:
 | 
|    HLoadGlobalGeneric(HValue* context, HValue* global_object,
 | 
| -                     Handle<String> name, TypeofMode typeof_mode)
 | 
| -      : name_(name), typeof_mode_(typeof_mode) {
 | 
| +                     Handle<String> name, TypeofMode typeof_mode,
 | 
| +                     Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot)
 | 
| +      : name_(name),
 | 
| +        typeof_mode_(typeof_mode),
 | 
| +        feedback_vector_(vector),
 | 
| +        slot_(slot) {
 | 
|      SetOperandAt(0, context);
 | 
|      SetOperandAt(1, global_object);
 | 
|      set_representation(Representation::Tagged());
 | 
| @@ -5887,26 +5887,19 @@ class HLoadNamedField final : public HTemplateInstruction<2> {
 | 
|  
 | 
|  class HLoadNamedGeneric final : public HTemplateInstruction<2> {
 | 
|   public:
 | 
| -  DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HLoadNamedGeneric, HValue*,
 | 
| -                                              Handle<Name>, InlineCacheState);
 | 
| +  DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P4(HLoadNamedGeneric, HValue*,
 | 
| +                                              Handle<Name>,
 | 
| +                                              Handle<TypeFeedbackVector>,
 | 
| +                                              FeedbackVectorSlot);
 | 
|  
 | 
|    HValue* context() const { return OperandAt(0); }
 | 
|    HValue* object() const { return OperandAt(1); }
 | 
|    Handle<Name> name() const { return name_; }
 | 
|  
 | 
| -  InlineCacheState initialization_state() const {
 | 
| -    return initialization_state_;
 | 
| -  }
 | 
|    FeedbackVectorSlot slot() const { return slot_; }
 | 
|    Handle<TypeFeedbackVector> feedback_vector() const {
 | 
|      return feedback_vector_;
 | 
|    }
 | 
| -  bool HasVectorAndSlot() const { return true; }
 | 
| -  void SetVectorAndSlot(Handle<TypeFeedbackVector> vector,
 | 
| -                        FeedbackVectorSlot slot) {
 | 
| -    feedback_vector_ = vector;
 | 
| -    slot_ = slot;
 | 
| -  }
 | 
|  
 | 
|    Representation RequiredInputRepresentation(int index) override {
 | 
|      return Representation::Tagged();
 | 
| @@ -5918,9 +5911,8 @@ class HLoadNamedGeneric final : public HTemplateInstruction<2> {
 | 
|  
 | 
|   private:
 | 
|    HLoadNamedGeneric(HValue* context, HValue* object, Handle<Name> name,
 | 
| -                    InlineCacheState initialization_state)
 | 
| -      : name_(name),
 | 
| -        initialization_state_(initialization_state) {
 | 
| +                    Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot)
 | 
| +      : name_(name), feedback_vector_(vector), slot_(slot) {
 | 
|      SetOperandAt(0, context);
 | 
|      SetOperandAt(1, object);
 | 
|      set_representation(Representation::Tagged());
 | 
| @@ -5930,7 +5922,6 @@ class HLoadNamedGeneric final : public HTemplateInstruction<2> {
 | 
|    Handle<Name> name_;
 | 
|    Handle<TypeFeedbackVector> feedback_vector_;
 | 
|    FeedbackVectorSlot slot_;
 | 
| -  InlineCacheState initialization_state_;
 | 
|  };
 | 
|  
 | 
|  
 | 
| @@ -6172,27 +6163,17 @@ class HLoadKeyed final : public HTemplateInstruction<4>,
 | 
|  
 | 
|  class HLoadKeyedGeneric final : public HTemplateInstruction<3> {
 | 
|   public:
 | 
| -  DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HLoadKeyedGeneric, HValue*,
 | 
| -                                              HValue*, InlineCacheState);
 | 
| +  DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P4(HLoadKeyedGeneric, HValue*,
 | 
| +                                              HValue*,
 | 
| +                                              Handle<TypeFeedbackVector>,
 | 
| +                                              FeedbackVectorSlot);
 | 
|    HValue* object() const { return OperandAt(0); }
 | 
|    HValue* key() const { return OperandAt(1); }
 | 
|    HValue* context() const { return OperandAt(2); }
 | 
| -  InlineCacheState initialization_state() const {
 | 
| -    return initialization_state_;
 | 
| -  }
 | 
|    FeedbackVectorSlot slot() const { return slot_; }
 | 
|    Handle<TypeFeedbackVector> feedback_vector() const {
 | 
|      return feedback_vector_;
 | 
|    }
 | 
| -  bool HasVectorAndSlot() const {
 | 
| -    DCHECK(initialization_state_ == MEGAMORPHIC || !feedback_vector_.is_null());
 | 
| -    return !feedback_vector_.is_null();
 | 
| -  }
 | 
| -  void SetVectorAndSlot(Handle<TypeFeedbackVector> vector,
 | 
| -                        FeedbackVectorSlot slot) {
 | 
| -    feedback_vector_ = vector;
 | 
| -    slot_ = slot;
 | 
| -  }
 | 
|  
 | 
|    std::ostream& PrintDataTo(std::ostream& os) const override;  // NOLINT
 | 
|  
 | 
| @@ -6207,8 +6188,8 @@ class HLoadKeyedGeneric final : public HTemplateInstruction<3> {
 | 
|  
 | 
|   private:
 | 
|    HLoadKeyedGeneric(HValue* context, HValue* obj, HValue* key,
 | 
| -                    InlineCacheState initialization_state)
 | 
| -      : initialization_state_(initialization_state) {
 | 
| +                    Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot)
 | 
| +      : feedback_vector_(vector), slot_(slot) {
 | 
|      set_representation(Representation::Tagged());
 | 
|      SetOperandAt(0, obj);
 | 
|      SetOperandAt(1, key);
 | 
| @@ -6218,7 +6199,6 @@ class HLoadKeyedGeneric final : public HTemplateInstruction<3> {
 | 
|  
 | 
|    Handle<TypeFeedbackVector> feedback_vector_;
 | 
|    FeedbackVectorSlot slot_;
 | 
| -  InlineCacheState initialization_state_;
 | 
|  };
 | 
|  
 | 
|  
 | 
| @@ -6380,20 +6360,18 @@ class HStoreNamedField final : public HTemplateInstruction<3> {
 | 
|    uint32_t bit_field_;
 | 
|  };
 | 
|  
 | 
| -
 | 
|  class HStoreNamedGeneric final : public HTemplateInstruction<3> {
 | 
|   public:
 | 
| -  DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P5(HStoreNamedGeneric, HValue*,
 | 
| +  DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P6(HStoreNamedGeneric, HValue*,
 | 
|                                                Handle<Name>, HValue*,
 | 
| -                                              LanguageMode, InlineCacheState);
 | 
| +                                              LanguageMode,
 | 
| +                                              Handle<TypeFeedbackVector>,
 | 
| +                                              FeedbackVectorSlot);
 | 
|    HValue* object() const { return OperandAt(0); }
 | 
|    HValue* value() const { return OperandAt(1); }
 | 
|    HValue* context() const { return OperandAt(2); }
 | 
|    Handle<Name> name() const { return name_; }
 | 
|    LanguageMode language_mode() const { return language_mode_; }
 | 
| -  InlineCacheState initialization_state() const {
 | 
| -    return initialization_state_;
 | 
| -  }
 | 
|  
 | 
|    std::ostream& PrintDataTo(std::ostream& os) const override;  // NOLINT
 | 
|  
 | 
| @@ -6405,22 +6383,17 @@ class HStoreNamedGeneric final : public HTemplateInstruction<3> {
 | 
|    Handle<TypeFeedbackVector> feedback_vector() const {
 | 
|      return feedback_vector_;
 | 
|    }
 | 
| -  bool HasVectorAndSlot() const { return true; }
 | 
| -  void SetVectorAndSlot(Handle<TypeFeedbackVector> vector,
 | 
| -                        FeedbackVectorSlot slot) {
 | 
| -    feedback_vector_ = vector;
 | 
| -    slot_ = slot;
 | 
| -  }
 | 
|  
 | 
|    DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric)
 | 
|  
 | 
|   private:
 | 
|    HStoreNamedGeneric(HValue* context, HValue* object, Handle<Name> name,
 | 
|                       HValue* value, LanguageMode language_mode,
 | 
| -                     InlineCacheState initialization_state)
 | 
| +                     Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot)
 | 
|        : name_(name),
 | 
| -        language_mode_(language_mode),
 | 
| -        initialization_state_(initialization_state) {
 | 
| +        feedback_vector_(vector),
 | 
| +        slot_(slot),
 | 
| +        language_mode_(language_mode) {
 | 
|      SetOperandAt(0, object);
 | 
|      SetOperandAt(1, value);
 | 
|      SetOperandAt(2, context);
 | 
| @@ -6431,10 +6404,8 @@ class HStoreNamedGeneric final : public HTemplateInstruction<3> {
 | 
|    Handle<TypeFeedbackVector> feedback_vector_;
 | 
|    FeedbackVectorSlot slot_;
 | 
|    LanguageMode language_mode_;
 | 
| -  InlineCacheState initialization_state_;
 | 
|  };
 | 
|  
 | 
| -
 | 
|  class HStoreKeyed final : public HTemplateInstruction<4>,
 | 
|                            public ArrayInstructionInterface {
 | 
|   public:
 | 
| @@ -6617,21 +6588,18 @@ class HStoreKeyed final : public HTemplateInstruction<4>,
 | 
|    HValue* dominator_;
 | 
|  };
 | 
|  
 | 
| -
 | 
|  class HStoreKeyedGeneric final : public HTemplateInstruction<4> {
 | 
|   public:
 | 
| -  DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P5(HStoreKeyedGeneric, HValue*,
 | 
| +  DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P6(HStoreKeyedGeneric, HValue*,
 | 
|                                                HValue*, HValue*, LanguageMode,
 | 
| -                                              InlineCacheState);
 | 
| +                                              Handle<TypeFeedbackVector>,
 | 
| +                                              FeedbackVectorSlot);
 | 
|  
 | 
|    HValue* object() const { return OperandAt(0); }
 | 
|    HValue* key() const { return OperandAt(1); }
 | 
|    HValue* value() const { return OperandAt(2); }
 | 
|    HValue* context() const { return OperandAt(3); }
 | 
|    LanguageMode language_mode() const { return language_mode_; }
 | 
| -  InlineCacheState initialization_state() const {
 | 
| -    return initialization_state_;
 | 
| -  }
 | 
|  
 | 
|    Representation RequiredInputRepresentation(int index) override {
 | 
|      // tagged[tagged] = tagged
 | 
| @@ -6642,14 +6610,6 @@ class HStoreKeyedGeneric final : public HTemplateInstruction<4> {
 | 
|    Handle<TypeFeedbackVector> feedback_vector() const {
 | 
|      return feedback_vector_;
 | 
|    }
 | 
| -  bool HasVectorAndSlot() const {
 | 
| -    return !feedback_vector_.is_null();
 | 
| -  }
 | 
| -  void SetVectorAndSlot(Handle<TypeFeedbackVector> vector,
 | 
| -                        FeedbackVectorSlot slot) {
 | 
| -    feedback_vector_ = vector;
 | 
| -    slot_ = slot;
 | 
| -  }
 | 
|  
 | 
|    std::ostream& PrintDataTo(std::ostream& os) const override;  // NOLINT
 | 
|  
 | 
| @@ -6658,9 +6618,8 @@ class HStoreKeyedGeneric final : public HTemplateInstruction<4> {
 | 
|   private:
 | 
|    HStoreKeyedGeneric(HValue* context, HValue* object, HValue* key,
 | 
|                       HValue* value, LanguageMode language_mode,
 | 
| -                     InlineCacheState initialization_state)
 | 
| -      : language_mode_(language_mode),
 | 
| -        initialization_state_(initialization_state) {
 | 
| +                     Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot)
 | 
| +      : feedback_vector_(vector), slot_(slot), language_mode_(language_mode) {
 | 
|      SetOperandAt(0, object);
 | 
|      SetOperandAt(1, key);
 | 
|      SetOperandAt(2, value);
 | 
| @@ -6671,10 +6630,8 @@ class HStoreKeyedGeneric final : public HTemplateInstruction<4> {
 | 
|    Handle<TypeFeedbackVector> feedback_vector_;
 | 
|    FeedbackVectorSlot slot_;
 | 
|    LanguageMode language_mode_;
 | 
| -  InlineCacheState initialization_state_;
 | 
|  };
 | 
|  
 | 
| -
 | 
|  class HTransitionElementsKind final : public HTemplateInstruction<2> {
 | 
|   public:
 | 
|    inline static HTransitionElementsKind* New(Isolate* isolate, Zone* zone,
 | 
| 
 |