| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index 7d0e228e8eeae3e88bc930be8d518966713afa99..900fa271729e7f7b545402e1cccf0f7c77d3f293 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -4369,7 +4369,8 @@ void HGraphBuilder::VisitForInStatement(ForInStatement* stmt) {
|
| HValue* key = AddInstruction(
|
| new(zone()) HLoadKeyedFastElement(
|
| environment()->ExpressionStackAt(2), // Enum cache.
|
| - environment()->ExpressionStackAt(0))); // Iteration index.
|
| + environment()->ExpressionStackAt(0), // Iteration index.
|
| + environment()->ExpressionStackAt(0)));
|
|
|
| // Check if the expected map still matches that of the enumerable.
|
| // If not just deoptimize.
|
| @@ -5709,6 +5710,7 @@ HInstruction* HGraphBuilder::BuildExternalArrayElementAccess(
|
| HValue* external_elements,
|
| HValue* checked_key,
|
| HValue* val,
|
| + HValue* dependency,
|
| ElementsKind elements_kind,
|
| bool is_store) {
|
| if (is_store) {
|
| @@ -5752,7 +5754,7 @@ HInstruction* HGraphBuilder::BuildExternalArrayElementAccess(
|
| } else {
|
| ASSERT(val == NULL);
|
| return new(zone()) HLoadKeyedSpecializedArrayElement(
|
| - external_elements, checked_key, elements_kind);
|
| + external_elements, checked_key, dependency, elements_kind);
|
| }
|
| }
|
|
|
| @@ -5760,6 +5762,7 @@ HInstruction* HGraphBuilder::BuildExternalArrayElementAccess(
|
| HInstruction* HGraphBuilder::BuildFastElementAccess(HValue* elements,
|
| HValue* checked_key,
|
| HValue* val,
|
| + HValue* load_dependency,
|
| ElementsKind elements_kind,
|
| bool is_store) {
|
| if (is_store) {
|
| @@ -5788,10 +5791,11 @@ HInstruction* HGraphBuilder::BuildFastElementAccess(HValue* elements,
|
| OMIT_HOLE_CHECK :
|
| PERFORM_HOLE_CHECK;
|
| if (IsFastDoubleElementsKind(elements_kind)) {
|
| - return new(zone()) HLoadKeyedFastDoubleElement(elements, checked_key, mode);
|
| + return new(zone()) HLoadKeyedFastDoubleElement(elements, checked_key,
|
| + load_dependency, mode);
|
| } else { // Smi or Object elements.
|
| return new(zone()) HLoadKeyedFastElement(elements, checked_key,
|
| - elements_kind);
|
| + load_dependency, elements_kind);
|
| }
|
| }
|
|
|
| @@ -5847,8 +5851,9 @@ HInstruction* HGraphBuilder::BuildUncheckedMonomorphicElementAccess(
|
| HLoadExternalArrayPointer* external_elements =
|
| new(zone()) HLoadExternalArrayPointer(elements);
|
| AddInstruction(external_elements);
|
| - return BuildExternalArrayElementAccess(external_elements, checked_key,
|
| - val, map->elements_kind(), is_store);
|
| + return BuildExternalArrayElementAccess(
|
| + external_elements, checked_key, val, mapcheck,
|
| + map->elements_kind(), is_store);
|
| }
|
| ASSERT(fast_smi_only_elements ||
|
| fast_elements ||
|
| @@ -5860,7 +5865,7 @@ HInstruction* HGraphBuilder::BuildUncheckedMonomorphicElementAccess(
|
| length = AddInstruction(new(zone()) HFixedArrayBaseLength(elements));
|
| }
|
| checked_key = AddInstruction(new(zone()) HBoundsCheck(key, length));
|
| - return BuildFastElementAccess(elements, checked_key, val,
|
| + return BuildFastElementAccess(elements, checked_key, val, mapcheck,
|
| map->elements_kind(), is_store);
|
| }
|
|
|
| @@ -6080,7 +6085,8 @@ HValue* HGraphBuilder::HandlePolymorphicElementAccess(HValue* object,
|
| HType::Smi()));
|
| checked_key = AddInstruction(new(zone()) HBoundsCheck(key, length));
|
| access = AddInstruction(BuildFastElementAccess(
|
| - elements, checked_key, val, elements_kind, is_store));
|
| + elements, checked_key, val, elements_kind_branch,
|
| + elements_kind, is_store));
|
| if (!is_store) {
|
| Push(access);
|
| }
|
| @@ -6095,7 +6101,8 @@ HValue* HGraphBuilder::HandlePolymorphicElementAccess(HValue* object,
|
| length = AddInstruction(new(zone()) HFixedArrayBaseLength(elements));
|
| checked_key = AddInstruction(new(zone()) HBoundsCheck(key, length));
|
| access = AddInstruction(BuildFastElementAccess(
|
| - elements, checked_key, val, elements_kind, is_store));
|
| + elements, checked_key, val, elements_kind_branch,
|
| + elements_kind, is_store));
|
| } else if (elements_kind == DICTIONARY_ELEMENTS) {
|
| if (is_store) {
|
| access = AddInstruction(BuildStoreKeyedGeneric(object, key, val));
|
| @@ -6104,7 +6111,8 @@ HValue* HGraphBuilder::HandlePolymorphicElementAccess(HValue* object,
|
| }
|
| } else { // External array elements.
|
| access = AddInstruction(BuildExternalArrayElementAccess(
|
| - external_elements, checked_key, val, elements_kind, is_store));
|
| + external_elements, checked_key, val, elements_kind_branch,
|
| + elements_kind, is_store));
|
| }
|
| *has_side_effects |= access->HasObservableSideEffects();
|
| if (position != RelocInfo::kNoPosition) access->set_position(position);
|
|
|