| Index: src/code-stubs-hydrogen.cc | 
| diff --git a/src/code-stubs-hydrogen.cc b/src/code-stubs-hydrogen.cc | 
| index c5f8836c3ac51e9ab191bd12a17ea806a213d882..43752cbf84160c4e40e36e37a7a970990e82fe1e 100644 | 
| --- a/src/code-stubs-hydrogen.cc | 
| +++ b/src/code-stubs-hydrogen.cc | 
| @@ -93,6 +93,8 @@ class CodeStubGraphBuilderBase : public HGraphBuilder { | 
| IfBuilder* builder, | 
| HValue* optimized_map, | 
| HValue* map_index); | 
| +  void BuildInstallOptimizedCode(HValue* js_function, HValue* native_context, | 
| +                                 HValue* code_object, HValue* literals); | 
| void BuildInstallCode(HValue* js_function, HValue* shared_info); | 
|  | 
| HInstruction* LoadFromOptimizedCodeMap(HValue* optimized_map, | 
| @@ -1651,6 +1653,16 @@ void CodeStubGraphBuilderBase::BuildCheckAndInstallOptimizedCode( | 
| HValue* literals = LoadFromOptimizedCodeMap(optimized_map, | 
| map_index, SharedFunctionInfo::kLiteralsOffset); | 
|  | 
| +  BuildInstallOptimizedCode(js_function, native_context, code_object, literals); | 
| + | 
| +  // The builder continues in the "then" after this function. | 
| +} | 
| + | 
| + | 
| +void CodeStubGraphBuilderBase::BuildInstallOptimizedCode(HValue* js_function, | 
| +                                                         HValue* native_context, | 
| +                                                         HValue* code_object, | 
| +                                                         HValue* literals) { | 
| Counters* counters = isolate()->counters(); | 
| AddIncrementCounter(counters->fast_new_closure_install_optimized()); | 
|  | 
| @@ -1673,8 +1685,6 @@ void CodeStubGraphBuilderBase::BuildCheckAndInstallOptimizedCode( | 
| Add<HStoreNamedField>(native_context, | 
| HObjectAccess::ForContextSlot(Context::OPTIMIZED_FUNCTIONS_LIST), | 
| js_function); | 
| - | 
| -  // The builder continues in the "then" after this function. | 
| } | 
|  | 
|  | 
| @@ -1712,6 +1722,7 @@ void CodeStubGraphBuilderBase::BuildInstallFromOptimizedCodeMap( | 
| HValue* shared_info, | 
| HValue* native_context) { | 
| Counters* counters = isolate()->counters(); | 
| +  Factory* factory = isolate()->factory(); | 
| IfBuilder is_optimized(this); | 
| HInstruction* optimized_map = Add<HLoadNamedField>( | 
| shared_info, nullptr, HObjectAccess::ForOptimizedCodeMap()); | 
| @@ -1764,15 +1775,31 @@ void CodeStubGraphBuilderBase::BuildInstallFromOptimizedCodeMap( | 
| } | 
| loop_builder.EndBody(); | 
|  | 
| -      // If slot_iterator equals first entry index, then we failed to find and | 
| -      // install optimized code | 
| +      // If slot_iterator equals first entry index, then we failed to find a | 
| +      // context-dependent code and try context-independent code next. | 
| IfBuilder no_optimized_code_check(this); | 
| no_optimized_code_check.If<HCompareNumericAndBranch>( | 
| slot_iterator, first_entry_index, Token::EQ); | 
| no_optimized_code_check.Then(); | 
| { | 
| -        // Store the unoptimized code | 
| -        BuildInstallCode(js_function, shared_info); | 
| +        IfBuilder shared_code_check(this); | 
| +        HValue* shared_code = Add<HLoadNamedField>( | 
| +            optimized_map, nullptr, | 
| +            HObjectAccess::ForOptimizedCodeMapSharedCode()); | 
| +        shared_code_check.IfNot<HCompareObjectEqAndBranch>( | 
| +            shared_code, graph()->GetConstantUndefined()); | 
| +        shared_code_check.Then(); | 
| +        { | 
| +          // Store the context-independent optimized code. | 
| +          HValue* literals = Add<HConstant>(factory->empty_fixed_array()); | 
| +          BuildInstallOptimizedCode(js_function, native_context, shared_code, | 
| +                                    literals); | 
| +        } | 
| +        shared_code_check.Else(); | 
| +        { | 
| +          // Store the unoptimized code. | 
| +          BuildInstallCode(js_function, shared_info); | 
| +        } | 
| } | 
| } | 
| } | 
|  |