Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: src/crankshaft/hydrogen-instructions.h

Issue 1493983004: [crankshaft] Loads and stores to typed arrays have to reference the backing store holder (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: updates Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/crankshaft/hydrogen.cc ('k') | src/crankshaft/hydrogen-instructions.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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_
OLDNEW
« no previous file with comments | « src/crankshaft/hydrogen.cc ('k') | src/crankshaft/hydrogen-instructions.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698