| Index: src/hydrogen.cc | 
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc | 
| index 04567637f9f3a98b288e251cf53088feb7aead13..df4d8fc99c650a0192a8782db7cbf302e311802e 100644 | 
| --- a/src/hydrogen.cc | 
| +++ b/src/hydrogen.cc | 
| @@ -4368,7 +4368,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. | 
| @@ -5708,6 +5709,7 @@ HInstruction* HGraphBuilder::BuildExternalArrayElementAccess( | 
| HValue* external_elements, | 
| HValue* checked_key, | 
| HValue* val, | 
| +    HValue* dependency, | 
| ElementsKind elements_kind, | 
| bool is_store) { | 
| if (is_store) { | 
| @@ -5751,7 +5753,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); | 
| } | 
| } | 
|  | 
| @@ -5759,6 +5761,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) { | 
| @@ -5787,10 +5790,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); | 
| } | 
|  | 
| @@ -6081,7 +6086,8 @@ HValue* HGraphBuilder::HandlePolymorphicElementAccess(HValue* object, | 
| checked_key = AddInstruction(new(zone()) HBoundsCheck(key, length, | 
| ALLOW_SMI_KEY)); | 
| 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); | 
| } | 
| @@ -6097,7 +6103,8 @@ HValue* HGraphBuilder::HandlePolymorphicElementAccess(HValue* object, | 
| checked_key = AddInstruction(new(zone()) HBoundsCheck(key, length, | 
| ALLOW_SMI_KEY)); | 
| 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)); | 
| @@ -6106,7 +6113,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); | 
|  |