| Index: src/hydrogen.cc | 
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc | 
| index 37ecb1b50613b84af9e9335b75108c145caa0a52..9e025f7964476b753224cc5e468cc0e5e61dd596 100644 | 
| --- a/src/hydrogen.cc | 
| +++ b/src/hydrogen.cc | 
| @@ -6436,8 +6436,8 @@ void HOptimizedGraphBuilder::BuildStore(Expression* expr, | 
| HValue* key = environment()->ExpressionStackAt(1); | 
| HValue* object = environment()->ExpressionStackAt(2); | 
| bool has_side_effects = false; | 
| -    HandleKeyedElementAccess(object, key, value, expr, | 
| -                             STORE, &has_side_effects); | 
| +    HandleKeyedElementAccess(object, key, value, expr, return_id, STORE, | 
| +                             &has_side_effects); | 
| Drop(3); | 
| Push(value); | 
| Add<HSimulate>(return_id, REMOVABLE_SIMULATE); | 
| @@ -7129,12 +7129,28 @@ HValue* HOptimizedGraphBuilder::HandlePolymorphicElementAccess( | 
|  | 
|  | 
| HValue* HOptimizedGraphBuilder::HandleKeyedElementAccess( | 
| -    HValue* obj, | 
| -    HValue* key, | 
| -    HValue* val, | 
| -    Expression* expr, | 
| -    PropertyAccessType access_type, | 
| +    HValue* obj, HValue* key, HValue* val, Expression* expr, | 
| +    BailoutId return_id, PropertyAccessType access_type, | 
| bool* has_side_effects) { | 
| +  if (key->ActualValue()->IsConstant()) { | 
| +    Handle<Object> constant = | 
| +        HConstant::cast(key->ActualValue())->handle(isolate()); | 
| +    uint32_t array_index; | 
| +    if (constant->IsString() && | 
| +        !Handle<String>::cast(constant)->AsArrayIndex(&array_index)) { | 
| +      HInstruction* instr = | 
| +          BuildNamedAccess(access_type, expr->id(), return_id, expr, obj, | 
| +                           Handle<String>::cast(constant), val, false); | 
| +      if (instr == NULL || instr->IsLinked()) { | 
| +        *has_side_effects = false; | 
| +      } else { | 
| +        AddInstruction(instr); | 
| +        *has_side_effects = instr->HasObservableSideEffects(); | 
| +      } | 
| +      return instr; | 
| +    } | 
| +  } | 
| + | 
| DCHECK(!expr->IsPropertyName()); | 
| HInstruction* instr = NULL; | 
|  | 
| @@ -7345,7 +7361,7 @@ void HOptimizedGraphBuilder::BuildLoad(Property* expr, | 
|  | 
| bool has_side_effects = false; | 
| HValue* load = HandleKeyedElementAccess( | 
| -        obj, key, NULL, expr, LOAD, &has_side_effects); | 
| +        obj, key, NULL, expr, expr->LoadId(), LOAD, &has_side_effects); | 
| if (has_side_effects) { | 
| if (ast_context()->IsEffect()) { | 
| Add<HSimulate>(ast_id, REMOVABLE_SIMULATE); | 
| @@ -7355,6 +7371,7 @@ void HOptimizedGraphBuilder::BuildLoad(Property* expr, | 
| Drop(1); | 
| } | 
| } | 
| +    if (load == NULL) return; | 
| return ast_context()->ReturnValue(load); | 
| } | 
| return ast_context()->ReturnInstruction(instr, ast_id); | 
|  |