| OLD | NEW | 
|     1 // Copyright 2012 the V8 project authors. All rights reserved. |     1 // Copyright 2012 the V8 project authors. All rights reserved. | 
|     2 // Use of this source code is governed by a BSD-style license that can be |     2 // Use of this source code is governed by a BSD-style license that can be | 
|     3 // found in the LICENSE file. |     3 // found in the LICENSE file. | 
|     4  |     4  | 
|     5 #ifndef V8_CRANKSHAFT_HYDROGEN_INSTRUCTIONS_H_ |     5 #ifndef V8_CRANKSHAFT_HYDROGEN_INSTRUCTIONS_H_ | 
|     6 #define V8_CRANKSHAFT_HYDROGEN_INSTRUCTIONS_H_ |     6 #define V8_CRANKSHAFT_HYDROGEN_INSTRUCTIONS_H_ | 
|     7  |     7  | 
|     8 #include <cstring> |     8 #include <cstring> | 
|     9 #include <iosfwd> |     9 #include <iosfwd> | 
|    10  |    10  | 
| (...skipping 908 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   919                 P3 p3, P4 p4, P5 p5) {                                       \ |   919                 P3 p3, P4 p4, P5 p5) {                                       \ | 
|   920     return new (zone) I(p1, p2, p3, p4, p5);                                 \ |   920     return new (zone) I(p1, p2, p3, p4, p5);                                 \ | 
|   921   } |   921   } | 
|   922  |   922  | 
|   923 #define DECLARE_INSTRUCTION_FACTORY_P6(I, P1, P2, P3, P4, P5, P6)            \ |   923 #define DECLARE_INSTRUCTION_FACTORY_P6(I, P1, P2, P3, P4, P5, P6)            \ | 
|   924   static I* New(Isolate* isolate, Zone* zone, HValue* context, P1 p1, P2 p2, \ |   924   static I* New(Isolate* isolate, Zone* zone, HValue* context, P1 p1, P2 p2, \ | 
|   925                 P3 p3, P4 p4, P5 p5, P6 p6) {                                \ |   925                 P3 p3, P4 p4, P5 p5, P6 p6) {                                \ | 
|   926     return new (zone) I(p1, p2, p3, p4, p5, p6);                             \ |   926     return new (zone) I(p1, p2, p3, p4, p5, p6);                             \ | 
|   927   } |   927   } | 
|   928  |   928  | 
 |   929 #define DECLARE_INSTRUCTION_FACTORY_P7(I, P1, P2, P3, P4, P5, P6, P7)        \ | 
 |   930   static I* New(Isolate* isolate, Zone* zone, HValue* context, P1 p1, P2 p2, \ | 
 |   931                 P3 p3, P4 p4, P5 p5, P6 p6, P7 p7) {                         \ | 
 |   932     return new (zone) I(p1, p2, p3, p4, p5, p6, p7);                         \ | 
 |   933   } | 
 |   934  | 
|   929 #define DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P0(I)           \ |   935 #define DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P0(I)           \ | 
|   930   static I* New(Isolate* isolate, Zone* zone, HValue* context) { \ |   936   static I* New(Isolate* isolate, Zone* zone, HValue* context) { \ | 
|   931     return new (zone) I(context);                                \ |   937     return new (zone) I(context);                                \ | 
|   932   } |   938   } | 
|   933  |   939  | 
|   934 #define DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P1(I, P1)              \ |   940 #define DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P1(I, P1)              \ | 
|   935   static I* New(Isolate* isolate, Zone* zone, HValue* context, P1 p1) { \ |   941   static I* New(Isolate* isolate, Zone* zone, HValue* context, P1 p1) { \ | 
|   936     return new (zone) I(context, p1);                                   \ |   942     return new (zone) I(context, p1);                                   \ | 
|   937   } |   943   } | 
|   938  |   944  | 
| (...skipping 5561 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  6500  |  6506  | 
|  6501 static const int kDefaultKeyedHeaderOffsetSentinel = -1; |  6507 static const int kDefaultKeyedHeaderOffsetSentinel = -1; | 
|  6502  |  6508  | 
|  6503 enum LoadKeyedHoleMode { |  6509 enum LoadKeyedHoleMode { | 
|  6504   NEVER_RETURN_HOLE, |  6510   NEVER_RETURN_HOLE, | 
|  6505   ALLOW_RETURN_HOLE, |  6511   ALLOW_RETURN_HOLE, | 
|  6506   CONVERT_HOLE_TO_UNDEFINED |  6512   CONVERT_HOLE_TO_UNDEFINED | 
|  6507 }; |  6513 }; | 
|  6508  |  6514  | 
|  6509  |  6515  | 
|  6510 class HLoadKeyed final : public HTemplateInstruction<3>, |  6516 class HLoadKeyed final : public HTemplateInstruction<4>, | 
|  6511                          public ArrayInstructionInterface { |  6517                          public ArrayInstructionInterface { | 
|  6512  public: |  6518  public: | 
|  6513   DECLARE_INSTRUCTION_FACTORY_P4(HLoadKeyed, HValue*, HValue*, HValue*, |  6519   DECLARE_INSTRUCTION_FACTORY_P5(HLoadKeyed, HValue*, HValue*, HValue*, HValue*, | 
|  6514                                  ElementsKind); |  6520                                  ElementsKind); | 
|  6515   DECLARE_INSTRUCTION_FACTORY_P5(HLoadKeyed, HValue*, HValue*, HValue*, |  6521   DECLARE_INSTRUCTION_FACTORY_P6(HLoadKeyed, HValue*, HValue*, HValue*, HValue*, | 
|  6516                                  ElementsKind, LoadKeyedHoleMode); |  6522                                  ElementsKind, LoadKeyedHoleMode); | 
|  6517   DECLARE_INSTRUCTION_FACTORY_P6(HLoadKeyed, HValue*, HValue*, HValue*, |  6523   DECLARE_INSTRUCTION_FACTORY_P7(HLoadKeyed, HValue*, HValue*, HValue*, HValue*, | 
|  6518                                  ElementsKind, LoadKeyedHoleMode, int); |  6524                                  ElementsKind, LoadKeyedHoleMode, int); | 
|  6519  |  6525  | 
|  6520   bool is_fixed_typed_array() const { |  6526   bool is_fixed_typed_array() const { | 
|  6521     return IsFixedTypedArrayElementsKind(elements_kind()); |  6527     return IsFixedTypedArrayElementsKind(elements_kind()); | 
|  6522   } |  6528   } | 
|  6523   HValue* elements() const { return OperandAt(0); } |  6529   HValue* elements() const { return OperandAt(0); } | 
|  6524   HValue* key() const { return OperandAt(1); } |  6530   HValue* key() const { return OperandAt(1); } | 
|  6525   HValue* dependency() const { |  6531   HValue* dependency() const { | 
|  6526     DCHECK(HasDependency()); |  6532     DCHECK(HasDependency()); | 
|  6527     return OperandAt(2); |  6533     return OperandAt(2); | 
|  6528   } |  6534   } | 
|  6529   bool HasDependency() const { return OperandAt(0) != OperandAt(2); } |  6535   bool HasDependency() const { return OperandAt(0) != OperandAt(2); } | 
 |  6536   HValue* backing_store_owner() const { | 
 |  6537     DCHECK(HasBackingStoreOwner()); | 
 |  6538     return OperandAt(3); | 
 |  6539   } | 
 |  6540   bool HasBackingStoreOwner() const { return OperandAt(0) != OperandAt(3); } | 
|  6530   uint32_t base_offset() const { return BaseOffsetField::decode(bit_field_); } |  6541   uint32_t base_offset() const { return BaseOffsetField::decode(bit_field_); } | 
|  6531   bool TryIncreaseBaseOffset(uint32_t increase_by_value) override; |  6542   bool TryIncreaseBaseOffset(uint32_t increase_by_value) override; | 
|  6532   HValue* GetKey() override { return key(); } |  6543   HValue* GetKey() override { return key(); } | 
|  6533   void SetKey(HValue* key) override { SetOperandAt(1, key); } |  6544   void SetKey(HValue* key) override { SetOperandAt(1, key); } | 
|  6534   bool IsDehoisted() const override { |  6545   bool IsDehoisted() const override { | 
|  6535     return IsDehoistedField::decode(bit_field_); |  6546     return IsDehoistedField::decode(bit_field_); | 
|  6536   } |  6547   } | 
|  6537   void SetDehoisted(bool is_dehoisted) override { |  6548   void SetDehoisted(bool is_dehoisted) override { | 
|  6538     bit_field_ = IsDehoistedField::update(bit_field_, is_dehoisted); |  6549     bit_field_ = IsDehoistedField::update(bit_field_, is_dehoisted); | 
|  6539   } |  6550   } | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
|  6550     // kind_fixed_typed_array:    external[int32] (none) |  6561     // kind_fixed_typed_array:    external[int32] (none) | 
|  6551     // kind_external:             external[int32] (none) |  6562     // kind_external:             external[int32] (none) | 
|  6552     if (index == 0) { |  6563     if (index == 0) { | 
|  6553       return is_fixed_typed_array() ? Representation::External() |  6564       return is_fixed_typed_array() ? Representation::External() | 
|  6554                                     : Representation::Tagged(); |  6565                                     : Representation::Tagged(); | 
|  6555     } |  6566     } | 
|  6556     if (index == 1) { |  6567     if (index == 1) { | 
|  6557       return ArrayInstructionInterface::KeyedAccessIndexRequirement( |  6568       return ArrayInstructionInterface::KeyedAccessIndexRequirement( | 
|  6558           OperandAt(1)->representation()); |  6569           OperandAt(1)->representation()); | 
|  6559     } |  6570     } | 
|  6560     return Representation::None(); |  6571     if (index == 2) { | 
 |  6572       return Representation::None(); | 
 |  6573     } | 
 |  6574     DCHECK_EQ(3, index); | 
 |  6575     return HasBackingStoreOwner() ? Representation::Tagged() | 
 |  6576                                   : Representation::None(); | 
|  6561   } |  6577   } | 
|  6562  |  6578  | 
|  6563   Representation observed_input_representation(int index) override { |  6579   Representation observed_input_representation(int index) override { | 
|  6564     return RequiredInputRepresentation(index); |  6580     return RequiredInputRepresentation(index); | 
|  6565   } |  6581   } | 
|  6566  |  6582  | 
|  6567   std::ostream& PrintDataTo(std::ostream& os) const override;  // NOLINT |  6583   std::ostream& PrintDataTo(std::ostream& os) const override;  // NOLINT | 
|  6568  |  6584  | 
|  6569   bool UsesMustHandleHole() const; |  6585   bool UsesMustHandleHole() const; | 
|  6570   bool AllUsesCanTreatHoleAsNaN() const; |  6586   bool AllUsesCanTreatHoleAsNaN() const; | 
|  6571   bool RequiresHoleCheck() const; |  6587   bool RequiresHoleCheck() const; | 
|  6572  |  6588  | 
|  6573   Range* InferRange(Zone* zone) override; |  6589   Range* InferRange(Zone* zone) override; | 
|  6574  |  6590  | 
|  6575   DECLARE_CONCRETE_INSTRUCTION(LoadKeyed) |  6591   DECLARE_CONCRETE_INSTRUCTION(LoadKeyed) | 
|  6576  |  6592  | 
|  6577  protected: |  6593  protected: | 
|  6578   bool DataEquals(HValue* other) override { |  6594   bool DataEquals(HValue* other) override { | 
|  6579     if (!other->IsLoadKeyed()) return false; |  6595     if (!other->IsLoadKeyed()) return false; | 
|  6580     HLoadKeyed* other_load = HLoadKeyed::cast(other); |  6596     HLoadKeyed* other_load = HLoadKeyed::cast(other); | 
|  6581  |  6597  | 
|  6582     if (base_offset() != other_load->base_offset()) return false; |  6598     if (base_offset() != other_load->base_offset()) return false; | 
|  6583     return elements_kind() == other_load->elements_kind(); |  6599     return elements_kind() == other_load->elements_kind(); | 
|  6584   } |  6600   } | 
|  6585  |  6601  | 
|  6586  private: |  6602  private: | 
|  6587   HLoadKeyed(HValue* obj, HValue* key, HValue* dependency, |  6603   HLoadKeyed(HValue* obj, HValue* key, HValue* dependency, | 
|  6588              ElementsKind elements_kind, |  6604              HValue* backing_store_owner, ElementsKind elements_kind, | 
|  6589              LoadKeyedHoleMode mode = NEVER_RETURN_HOLE, |  6605              LoadKeyedHoleMode mode = NEVER_RETURN_HOLE, | 
|  6590              int offset = kDefaultKeyedHeaderOffsetSentinel) |  6606              int offset = kDefaultKeyedHeaderOffsetSentinel) | 
|  6591       : bit_field_(0) { |  6607       : bit_field_(0) { | 
|  6592     offset = offset == kDefaultKeyedHeaderOffsetSentinel |  6608     offset = offset == kDefaultKeyedHeaderOffsetSentinel | 
|  6593         ? GetDefaultHeaderSizeForElementsKind(elements_kind) |  6609         ? GetDefaultHeaderSizeForElementsKind(elements_kind) | 
|  6594         : offset; |  6610         : offset; | 
|  6595     bit_field_ = ElementsKindField::encode(elements_kind) | |  6611     bit_field_ = ElementsKindField::encode(elements_kind) | | 
|  6596         HoleModeField::encode(mode) | |  6612         HoleModeField::encode(mode) | | 
|  6597         BaseOffsetField::encode(offset); |  6613         BaseOffsetField::encode(offset); | 
|  6598  |  6614  | 
|  6599     SetOperandAt(0, obj); |  6615     SetOperandAt(0, obj); | 
|  6600     SetOperandAt(1, key); |  6616     SetOperandAt(1, key); | 
|  6601     SetOperandAt(2, dependency != NULL ? dependency : obj); |  6617     SetOperandAt(2, dependency != nullptr ? dependency : obj); | 
 |  6618     SetOperandAt(3, backing_store_owner != nullptr ? backing_store_owner : obj); | 
 |  6619     DCHECK_EQ(HasBackingStoreOwner(), is_fixed_typed_array()); | 
|  6602  |  6620  | 
|  6603     if (!is_fixed_typed_array()) { |  6621     if (!is_fixed_typed_array()) { | 
|  6604       // I can detect the case between storing double (holey and fast) and |  6622       // I can detect the case between storing double (holey and fast) and | 
|  6605       // smi/object by looking at elements_kind_. |  6623       // smi/object by looking at elements_kind_. | 
|  6606       DCHECK(IsFastSmiOrObjectElementsKind(elements_kind) || |  6624       DCHECK(IsFastSmiOrObjectElementsKind(elements_kind) || | 
|  6607              IsFastDoubleElementsKind(elements_kind)); |  6625              IsFastDoubleElementsKind(elements_kind)); | 
|  6608  |  6626  | 
|  6609       if (IsFastSmiOrObjectElementsKind(elements_kind)) { |  6627       if (IsFastSmiOrObjectElementsKind(elements_kind)) { | 
|  6610         if (IsFastSmiElementsKind(elements_kind) && |  6628         if (IsFastSmiElementsKind(elements_kind) && | 
|  6611             (!IsHoleyElementsKind(elements_kind) || |  6629             (!IsHoleyElementsKind(elements_kind) || | 
| (...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  6944   } |  6962   } | 
|  6945  |  6963  | 
|  6946   Handle<Name> name_; |  6964   Handle<Name> name_; | 
|  6947   Handle<TypeFeedbackVector> feedback_vector_; |  6965   Handle<TypeFeedbackVector> feedback_vector_; | 
|  6948   FeedbackVectorSlot slot_; |  6966   FeedbackVectorSlot slot_; | 
|  6949   LanguageMode language_mode_; |  6967   LanguageMode language_mode_; | 
|  6950   InlineCacheState initialization_state_; |  6968   InlineCacheState initialization_state_; | 
|  6951 }; |  6969 }; | 
|  6952  |  6970  | 
|  6953  |  6971  | 
|  6954 class HStoreKeyed final : public HTemplateInstruction<3>, |  6972 class HStoreKeyed final : public HTemplateInstruction<4>, | 
|  6955                           public ArrayInstructionInterface { |  6973                           public ArrayInstructionInterface { | 
|  6956  public: |  6974  public: | 
|  6957   DECLARE_INSTRUCTION_FACTORY_P4(HStoreKeyed, HValue*, HValue*, HValue*, |  | 
|  6958                                  ElementsKind); |  | 
|  6959   DECLARE_INSTRUCTION_FACTORY_P5(HStoreKeyed, HValue*, HValue*, HValue*, |  6975   DECLARE_INSTRUCTION_FACTORY_P5(HStoreKeyed, HValue*, HValue*, HValue*, | 
|  6960                                  ElementsKind, StoreFieldOrKeyedMode); |  6976                                  HValue*, ElementsKind); | 
|  6961   DECLARE_INSTRUCTION_FACTORY_P6(HStoreKeyed, HValue*, HValue*, HValue*, |  6977   DECLARE_INSTRUCTION_FACTORY_P6(HStoreKeyed, HValue*, HValue*, HValue*, | 
|  6962                                  ElementsKind, StoreFieldOrKeyedMode, int); |  6978                                  HValue*, ElementsKind, StoreFieldOrKeyedMode); | 
 |  6979   DECLARE_INSTRUCTION_FACTORY_P7(HStoreKeyed, HValue*, HValue*, HValue*, | 
 |  6980                                  HValue*, ElementsKind, StoreFieldOrKeyedMode, | 
 |  6981                                  int); | 
|  6963  |  6982  | 
|  6964   Representation RequiredInputRepresentation(int index) override { |  6983   Representation RequiredInputRepresentation(int index) override { | 
|  6965     // kind_fast:               tagged[int32] = tagged |  6984     // kind_fast:               tagged[int32] = tagged | 
|  6966     // kind_double:             tagged[int32] = double |  6985     // kind_double:             tagged[int32] = double | 
|  6967     // kind_smi   :             tagged[int32] = smi |  6986     // kind_smi   :             tagged[int32] = smi | 
|  6968     // kind_fixed_typed_array:  tagged[int32] = (double | int32) |  6987     // kind_fixed_typed_array:  tagged[int32] = (double | int32) | 
|  6969     // kind_external:           external[int32] = (double | int32) |  6988     // kind_external:           external[int32] = (double | int32) | 
|  6970     if (index == 0) { |  6989     if (index == 0) { | 
|  6971       return is_fixed_typed_array() ? Representation::External() |  6990       return is_fixed_typed_array() ? Representation::External() | 
|  6972                                     : Representation::Tagged(); |  6991                                     : Representation::Tagged(); | 
|  6973     } else if (index == 1) { |  6992     } else if (index == 1) { | 
|  6974       return ArrayInstructionInterface::KeyedAccessIndexRequirement( |  6993       return ArrayInstructionInterface::KeyedAccessIndexRequirement( | 
|  6975           OperandAt(1)->representation()); |  6994           OperandAt(1)->representation()); | 
 |  6995     } else if (index == 2) { | 
 |  6996       return RequiredValueRepresentation(elements_kind(), store_mode()); | 
|  6976     } |  6997     } | 
|  6977  |  6998  | 
|  6978     DCHECK_EQ(index, 2); |  6999     DCHECK_EQ(3, index); | 
|  6979     return RequiredValueRepresentation(elements_kind(), store_mode()); |  7000     return HasBackingStoreOwner() ? Representation::Tagged() | 
 |  7001                                   : Representation::None(); | 
|  6980   } |  7002   } | 
|  6981  |  7003  | 
|  6982   static Representation RequiredValueRepresentation( |  7004   static Representation RequiredValueRepresentation( | 
|  6983       ElementsKind kind, StoreFieldOrKeyedMode mode) { |  7005       ElementsKind kind, StoreFieldOrKeyedMode mode) { | 
|  6984     if (IsDoubleOrFloatElementsKind(kind)) { |  7006     if (IsDoubleOrFloatElementsKind(kind)) { | 
|  6985       return Representation::Double(); |  7007       return Representation::Double(); | 
|  6986     } |  7008     } | 
|  6987  |  7009  | 
|  6988     if (kind == FAST_SMI_ELEMENTS && SmiValuesAre32Bits() && |  7010     if (kind == FAST_SMI_ELEMENTS && SmiValuesAre32Bits() && | 
|  6989         mode == STORE_TO_INITIALIZED_ENTRY) { |  7011         mode == STORE_TO_INITIALIZED_ENTRY) { | 
|  6990       return Representation::Integer32(); |  7012       return Representation::Integer32(); | 
|  6991     } |  7013     } | 
|  6992  |  7014  | 
|  6993     if (IsFastSmiElementsKind(kind)) { |  7015     if (IsFastSmiElementsKind(kind)) { | 
|  6994       return Representation::Smi(); |  7016       return Representation::Smi(); | 
|  6995     } |  7017     } | 
|  6996  |  7018  | 
|  6997     if (IsFixedTypedArrayElementsKind(kind)) { |  7019     if (IsFixedTypedArrayElementsKind(kind)) { | 
|  6998       return Representation::Integer32(); |  7020       return Representation::Integer32(); | 
|  6999     } |  7021     } | 
|  7000     return Representation::Tagged(); |  7022     return Representation::Tagged(); | 
|  7001   } |  7023   } | 
|  7002  |  7024  | 
|  7003   bool is_fixed_typed_array() const { |  7025   bool is_fixed_typed_array() const { | 
|  7004     return IsFixedTypedArrayElementsKind(elements_kind()); |  7026     return IsFixedTypedArrayElementsKind(elements_kind()); | 
|  7005   } |  7027   } | 
|  7006  |  7028  | 
|  7007   Representation observed_input_representation(int index) override { |  7029   Representation observed_input_representation(int index) override { | 
|  7008     if (index < 2) return RequiredInputRepresentation(index); |  7030     if (index != 2) return RequiredInputRepresentation(index); | 
|  7009     if (IsUninitialized()) { |  7031     if (IsUninitialized()) { | 
|  7010       return Representation::None(); |  7032       return Representation::None(); | 
|  7011     } |  7033     } | 
|  7012     Representation r = |  7034     Representation r = | 
|  7013         RequiredValueRepresentation(elements_kind(), store_mode()); |  7035         RequiredValueRepresentation(elements_kind(), store_mode()); | 
|  7014     // For fast object elements kinds, don't assume anything. |  7036     // For fast object elements kinds, don't assume anything. | 
|  7015     if (r.IsTagged()) return Representation::None(); |  7037     if (r.IsTagged()) return Representation::None(); | 
|  7016     return r; |  7038     return r; | 
|  7017   } |  7039   } | 
|  7018  |  7040  | 
|  7019   HValue* elements() const { return OperandAt(0); } |  7041   HValue* elements() const { return OperandAt(0); } | 
|  7020   HValue* key() const { return OperandAt(1); } |  7042   HValue* key() const { return OperandAt(1); } | 
|  7021   HValue* value() const { return OperandAt(2); } |  7043   HValue* value() const { return OperandAt(2); } | 
 |  7044   HValue* backing_store_owner() const { | 
 |  7045     DCHECK(HasBackingStoreOwner()); | 
 |  7046     return OperandAt(3); | 
 |  7047   } | 
 |  7048   bool HasBackingStoreOwner() const { return OperandAt(0) != OperandAt(3); } | 
|  7022   bool value_is_smi() const { return IsFastSmiElementsKind(elements_kind()); } |  7049   bool value_is_smi() const { return IsFastSmiElementsKind(elements_kind()); } | 
|  7023   StoreFieldOrKeyedMode store_mode() const { |  7050   StoreFieldOrKeyedMode store_mode() const { | 
|  7024     return StoreModeField::decode(bit_field_); |  7051     return StoreModeField::decode(bit_field_); | 
|  7025   } |  7052   } | 
|  7026   ElementsKind elements_kind() const override { |  7053   ElementsKind elements_kind() const override { | 
|  7027     return ElementsKindField::decode(bit_field_); |  7054     return ElementsKindField::decode(bit_field_); | 
|  7028   } |  7055   } | 
|  7029   uint32_t base_offset() const { return base_offset_; } |  7056   uint32_t base_offset() const { return base_offset_; } | 
|  7030   bool TryIncreaseBaseOffset(uint32_t increase_by_value) override; |  7057   bool TryIncreaseBaseOffset(uint32_t increase_by_value) override; | 
|  7031   HValue* GetKey() override { return key(); } |  7058   HValue* GetKey() override { return key(); } | 
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  7067     return PointersToHereCheckForObject(value(), dominator()); |  7094     return PointersToHereCheckForObject(value(), dominator()); | 
|  7068   } |  7095   } | 
|  7069  |  7096  | 
|  7070   bool NeedsCanonicalization(); |  7097   bool NeedsCanonicalization(); | 
|  7071  |  7098  | 
|  7072   std::ostream& PrintDataTo(std::ostream& os) const override;  // NOLINT |  7099   std::ostream& PrintDataTo(std::ostream& os) const override;  // NOLINT | 
|  7073  |  7100  | 
|  7074   DECLARE_CONCRETE_INSTRUCTION(StoreKeyed) |  7101   DECLARE_CONCRETE_INSTRUCTION(StoreKeyed) | 
|  7075  |  7102  | 
|  7076  private: |  7103  private: | 
|  7077   HStoreKeyed(HValue* obj, HValue* key, HValue* val, ElementsKind elements_kind, |  7104   HStoreKeyed(HValue* obj, HValue* key, HValue* val, | 
 |  7105               HValue* backing_store_owner, ElementsKind elements_kind, | 
|  7078               StoreFieldOrKeyedMode store_mode = INITIALIZING_STORE, |  7106               StoreFieldOrKeyedMode store_mode = INITIALIZING_STORE, | 
|  7079               int offset = kDefaultKeyedHeaderOffsetSentinel) |  7107               int offset = kDefaultKeyedHeaderOffsetSentinel) | 
|  7080       : base_offset_(offset == kDefaultKeyedHeaderOffsetSentinel |  7108       : base_offset_(offset == kDefaultKeyedHeaderOffsetSentinel | 
|  7081                          ? GetDefaultHeaderSizeForElementsKind(elements_kind) |  7109                          ? GetDefaultHeaderSizeForElementsKind(elements_kind) | 
|  7082                          : offset), |  7110                          : offset), | 
|  7083         bit_field_(IsDehoistedField::encode(false) | |  7111         bit_field_(IsDehoistedField::encode(false) | | 
|  7084                    IsUninitializedField::encode(false) | |  7112                    IsUninitializedField::encode(false) | | 
|  7085                    StoreModeField::encode(store_mode) | |  7113                    StoreModeField::encode(store_mode) | | 
|  7086                    ElementsKindField::encode(elements_kind)), |  7114                    ElementsKindField::encode(elements_kind)), | 
|  7087         dominator_(NULL) { |  7115         dominator_(NULL) { | 
|  7088     SetOperandAt(0, obj); |  7116     SetOperandAt(0, obj); | 
|  7089     SetOperandAt(1, key); |  7117     SetOperandAt(1, key); | 
|  7090     SetOperandAt(2, val); |  7118     SetOperandAt(2, val); | 
 |  7119     SetOperandAt(3, backing_store_owner != nullptr ? backing_store_owner : obj); | 
 |  7120     DCHECK_EQ(HasBackingStoreOwner(), is_fixed_typed_array()); | 
|  7091  |  7121  | 
|  7092     if (IsFastObjectElementsKind(elements_kind)) { |  7122     if (IsFastObjectElementsKind(elements_kind)) { | 
|  7093       SetFlag(kTrackSideEffectDominators); |  7123       SetFlag(kTrackSideEffectDominators); | 
|  7094       SetDependsOnFlag(kNewSpacePromotion); |  7124       SetDependsOnFlag(kNewSpacePromotion); | 
|  7095     } |  7125     } | 
|  7096     if (IsFastDoubleElementsKind(elements_kind)) { |  7126     if (IsFastDoubleElementsKind(elements_kind)) { | 
|  7097       SetChangesFlag(kDoubleArrayElements); |  7127       SetChangesFlag(kDoubleArrayElements); | 
|  7098     } else if (IsFastSmiElementsKind(elements_kind)) { |  7128     } else if (IsFastSmiElementsKind(elements_kind)) { | 
|  7099       SetChangesFlag(kArrayElements); |  7129       SetChangesFlag(kArrayElements); | 
|  7100     } else if (is_fixed_typed_array()) { |  7130     } else if (is_fixed_typed_array()) { | 
| (...skipping 710 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  7811  |  7841  | 
|  7812  |  7842  | 
|  7813  |  7843  | 
|  7814 #undef DECLARE_INSTRUCTION |  7844 #undef DECLARE_INSTRUCTION | 
|  7815 #undef DECLARE_CONCRETE_INSTRUCTION |  7845 #undef DECLARE_CONCRETE_INSTRUCTION | 
|  7816  |  7846  | 
|  7817 }  // namespace internal |  7847 }  // namespace internal | 
|  7818 }  // namespace v8 |  7848 }  // namespace v8 | 
|  7819  |  7849  | 
|  7820 #endif  // V8_CRANKSHAFT_HYDROGEN_INSTRUCTIONS_H_ |  7850 #endif  // V8_CRANKSHAFT_HYDROGEN_INSTRUCTIONS_H_ | 
| OLD | NEW |