| Index: src/hydrogen-instructions.h
|
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
|
| index f1720f444247d83635c84d00a99cf2457ee0022e..47ce499481d5784a9f8e32604d3b9f81a9213dfc 100644
|
| --- a/src/hydrogen-instructions.h
|
| +++ b/src/hydrogen-instructions.h
|
| @@ -6906,19 +6906,28 @@ class HStoreKeyed V8_FINAL
|
| }
|
|
|
| ASSERT_EQ(index, 2);
|
| - if (IsDoubleOrFloatElementsKind(elements_kind())) {
|
| + return RequiredValueRepresentation(elements_kind_, store_mode_);
|
| + }
|
| +
|
| + static Representation RequiredValueRepresentation(
|
| + ElementsKind kind, StoreFieldOrKeyedMode mode) {
|
| + if (IsDoubleOrFloatElementsKind(kind)) {
|
| return Representation::Double();
|
| }
|
| - if (SmiValuesAre32Bits() && store_mode_ == STORE_TO_INITIALIZED_ENTRY) {
|
| +
|
| + if (kind == FAST_SMI_ELEMENTS && SmiValuesAre32Bits() &&
|
| + mode == STORE_TO_INITIALIZED_ENTRY) {
|
| return Representation::Integer32();
|
| }
|
| - if (IsFastSmiElementsKind(elements_kind())) {
|
| +
|
| + if (IsFastSmiElementsKind(kind)) {
|
| return Representation::Smi();
|
| }
|
|
|
| - return is_external() || is_fixed_typed_array()
|
| - ? Representation::Integer32()
|
| - : Representation::Tagged();
|
| + return IsExternalArrayElementsKind(kind) ||
|
| + IsFixedTypedArrayElementsKind(kind)
|
| + ? Representation::Integer32()
|
| + : Representation::Tagged();
|
| }
|
|
|
| bool is_external() const {
|
| @@ -6938,20 +6947,10 @@ class HStoreKeyed V8_FINAL
|
| if (IsUninitialized()) {
|
| return Representation::None();
|
| }
|
| - if (IsDoubleOrFloatElementsKind(elements_kind())) {
|
| - return Representation::Double();
|
| - }
|
| - if (SmiValuesAre32Bits() && store_mode_ == STORE_TO_INITIALIZED_ENTRY) {
|
| - return Representation::Integer32();
|
| - }
|
| - if (IsFastSmiElementsKind(elements_kind())) {
|
| - return Representation::Smi();
|
| - }
|
| - if (is_typed_elements()) {
|
| - return Representation::Integer32();
|
| - }
|
| + Representation r = RequiredValueRepresentation(elements_kind_, store_mode_);
|
| // For fast object elements kinds, don't assume anything.
|
| - return Representation::None();
|
| + if (r.IsTagged()) return Representation::None();
|
| + return r;
|
| }
|
|
|
| HValue* elements() const { return OperandAt(0); }
|
| @@ -7031,9 +7030,6 @@ class HStoreKeyed V8_FINAL
|
| SetOperandAt(1, key);
|
| SetOperandAt(2, val);
|
|
|
| - ASSERT(store_mode != STORE_TO_INITIALIZED_ENTRY ||
|
| - elements_kind == FAST_SMI_ELEMENTS);
|
| -
|
| if (IsFastObjectElementsKind(elements_kind)) {
|
| SetFlag(kTrackSideEffectDominators);
|
| SetDependsOnFlag(kNewSpacePromotion);
|
|
|