| Index: src/ic.cc | 
| diff --git a/src/ic.cc b/src/ic.cc | 
| index f42b9f410f02db121959fd5500a4c8af53f6b637..43d162c84ae8ea593debafc9851844fff6a54fc5 100644 | 
| --- a/src/ic.cc | 
| +++ b/src/ic.cc | 
| @@ -403,7 +403,7 @@ void IC::Clear(Isolate* isolate, Address address) { | 
|  | 
|  | 
| void CallICBase::Clear(Address address, Code* target) { | 
| -  if (target->ic_state() == UNINITIALIZED) return; | 
| +  if (IsCleared(target)) return; | 
| bool contextual = CallICBase::Contextual::decode(target->extra_ic_state()); | 
| Code* code = | 
| target->GetIsolate()->stub_cache()->FindCallInitialize( | 
| @@ -415,35 +415,35 @@ void CallICBase::Clear(Address address, Code* target) { | 
|  | 
|  | 
| void KeyedLoadIC::Clear(Isolate* isolate, Address address, Code* target) { | 
| -  if (target->ic_state() == UNINITIALIZED) return; | 
| +  if (IsCleared(target)) return; | 
| // Make sure to also clear the map used in inline fast cases.  If we | 
| // do not clear these maps, cached code can keep objects alive | 
| // through the embedded maps. | 
| -  SetTargetAtAddress(address, *initialize_stub(isolate)); | 
| +  SetTargetAtAddress(address, *pre_monomorphic_stub(isolate)); | 
| } | 
|  | 
|  | 
| void LoadIC::Clear(Isolate* isolate, Address address, Code* target) { | 
| -  if (target->ic_state() == UNINITIALIZED) return; | 
| -  SetTargetAtAddress(address, *initialize_stub(isolate)); | 
| +  if (IsCleared(target)) return; | 
| +  SetTargetAtAddress(address, *pre_monomorphic_stub(isolate)); | 
| } | 
|  | 
|  | 
| void StoreIC::Clear(Isolate* isolate, Address address, Code* target) { | 
| -  if (target->ic_state() == UNINITIALIZED) return; | 
| +  if (IsCleared(target)) return; | 
| SetTargetAtAddress(address, | 
| (Code::GetStrictMode(target->extra_ic_state()) == kStrictMode) | 
| -        ? *initialize_stub_strict(isolate) | 
| -        : *initialize_stub(isolate)); | 
| +        ? *pre_monomorphic_stub_strict(isolate) | 
| +        : *pre_monomorphic_stub(isolate)); | 
| } | 
|  | 
|  | 
| void KeyedStoreIC::Clear(Isolate* isolate, Address address, Code* target) { | 
| -  if (target->ic_state() == UNINITIALIZED) return; | 
| +  if (IsCleared(target)) return; | 
| SetTargetAtAddress(address, | 
| (Code::GetStrictMode(target->extra_ic_state()) == kStrictMode) | 
| -        ? *initialize_stub_strict(isolate) | 
| -        : *initialize_stub(isolate)); | 
| +        ? *pre_monomorphic_stub_strict(isolate) | 
| +        : *pre_monomorphic_stub(isolate)); | 
| } | 
|  | 
|  | 
|  |