| Index: src/snapshot/serialize.cc | 
| diff --git a/src/snapshot/serialize.cc b/src/snapshot/serialize.cc | 
| index fceec47fae6daab3b74a9896905c0f3d552c1cb5..5d3f624da8b7d9e56690588aa592f12dd367012a 100644 | 
| --- a/src/snapshot/serialize.cc | 
| +++ b/src/snapshot/serialize.cc | 
| @@ -500,16 +500,19 @@ void Deserializer::DecodeReservation( | 
| } | 
|  | 
|  | 
| -void Deserializer::FlushICacheForNewCodeObjects() { | 
| -  if (!deserializing_user_code_) { | 
| -    // The entire isolate is newly deserialized. Simply flush all code pages. | 
| -    PageIterator it(isolate_->heap()->code_space()); | 
| -    while (it.has_next()) { | 
| -      Page* p = it.next(); | 
| -      CpuFeatures::FlushICache(p->area_start(), | 
| -                               p->area_end() - p->area_start()); | 
| -    } | 
| +void Deserializer::FlushICacheForNewIsolate() { | 
| +  DCHECK(!deserializing_user_code_); | 
| +  // The entire isolate is newly deserialized. Simply flush all code pages. | 
| +  PageIterator it(isolate_->heap()->code_space()); | 
| +  while (it.has_next()) { | 
| +    Page* p = it.next(); | 
| +    CpuFeatures::FlushICache(p->area_start(), p->area_end() - p->area_start()); | 
| } | 
| +} | 
| + | 
| + | 
| +void Deserializer::FlushICacheForNewCodeObjects() { | 
| +  DCHECK(deserializing_user_code_); | 
| for (Code* code : new_code_objects_) { | 
| CpuFeatures::FlushICache(code->instruction_start(), | 
| code->instruction_size()); | 
| @@ -557,6 +560,7 @@ void Deserializer::Deserialize(Isolate* isolate) { | 
| isolate_->heap()->RepairFreeListsAfterDeserialization(); | 
| isolate_->heap()->IterateWeakRoots(this, VISIT_ALL); | 
| DeserializeDeferredObjects(); | 
| +    FlushICacheForNewIsolate(); | 
| } | 
|  | 
| isolate_->heap()->set_native_contexts_list( | 
| @@ -574,8 +578,6 @@ void Deserializer::Deserialize(Isolate* isolate) { | 
| ExtraNatives::UpdateSourceCache(isolate_->heap()); | 
| CodeStubNatives::UpdateSourceCache(isolate_->heap()); | 
|  | 
| -  FlushICacheForNewCodeObjects(); | 
| - | 
| // Issue code events for newly deserialized code objects. | 
| LOG_CODE_EVENT(isolate_, LogCodeObjects()); | 
| LOG_CODE_EVENT(isolate_, LogCompiledFunctions()); | 
| @@ -631,6 +633,7 @@ MaybeHandle<SharedFunctionInfo> Deserializer::DeserializeCode( | 
| Object* root; | 
| VisitPointer(&root); | 
| DeserializeDeferredObjects(); | 
| +      FlushICacheForNewCodeObjects(); | 
| result = Handle<SharedFunctionInfo>(SharedFunctionInfo::cast(root)); | 
| } | 
| CommitPostProcessedObjects(isolate); | 
| @@ -2626,7 +2629,6 @@ MaybeHandle<SharedFunctionInfo> CodeSerializer::Deserialize( | 
| if (FLAG_profile_deserialization) PrintF("[Deserializing failed]\n"); | 
| return MaybeHandle<SharedFunctionInfo>(); | 
| } | 
| -  deserializer.FlushICacheForNewCodeObjects(); | 
|  | 
| if (FLAG_profile_deserialization) { | 
| double ms = timer.Elapsed().InMillisecondsF(); | 
|  |