| Index: src/ic/ic.cc | 
| diff --git a/src/ic/ic.cc b/src/ic/ic.cc | 
| index b65682f70e053c21c52b5c24e5740677e18396b0..310deb03e870282562d6d7fccb9004c0f896d9f3 100644 | 
| --- a/src/ic/ic.cc | 
| +++ b/src/ic/ic.cc | 
| @@ -2552,7 +2552,7 @@ RUNTIME_FUNCTION(Runtime_LoadGlobalIC_Miss) { | 
|  | 
| RUNTIME_FUNCTION(Runtime_LoadGlobalIC_Slow) { | 
| HandleScope scope(isolate); | 
| -  DCHECK_EQ(1, args.length()); | 
| +  DCHECK_EQ(3, args.length()); | 
| CONVERT_ARG_HANDLE_CHECKED(String, name, 0); | 
|  | 
| Handle<Context> native_context = isolate->native_context(); | 
| @@ -2579,11 +2579,13 @@ RUNTIME_FUNCTION(Runtime_LoadGlobalIC_Slow) { | 
| isolate, result, | 
| Runtime::GetObjectProperty(isolate, global, name, &is_found)); | 
| if (!is_found) { | 
| -    LoadICNexus nexus(isolate); | 
| -    LoadIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); | 
| +    Handle<Smi> slot = args.at<Smi>(1); | 
| +    Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(2); | 
| +    FeedbackVectorSlot vector_slot = vector->ToSlot(slot->value()); | 
| +    FeedbackVectorSlotKind kind = vector->GetKind(vector_slot); | 
| // It is actually a LoadGlobalICs here but the predicate handles this case | 
| // properly. | 
| -    if (ic.ShouldThrowReferenceError()) { | 
| +    if (LoadIC::ShouldThrowReferenceError(kind)) { | 
| THROW_NEW_ERROR_RETURN_FAILURE( | 
| isolate, NewReferenceError(MessageTemplate::kNotDefined, name)); | 
| } | 
| @@ -3030,7 +3032,7 @@ RUNTIME_FUNCTION(Runtime_LoadPropertyWithInterceptorOnly) { | 
| */ | 
| RUNTIME_FUNCTION(Runtime_LoadPropertyWithInterceptor) { | 
| HandleScope scope(isolate); | 
| -  DCHECK(args.length() == NamedLoadHandlerCompiler::kInterceptorArgsLength); | 
| +  DCHECK(args.length() == NamedLoadHandlerCompiler::kInterceptorArgsLength + 2); | 
| Handle<Name> name = | 
| args.at<Name>(NamedLoadHandlerCompiler::kInterceptorArgsNameIndex); | 
| Handle<Object> receiver = | 
| @@ -3069,11 +3071,13 @@ RUNTIME_FUNCTION(Runtime_LoadPropertyWithInterceptor) { | 
|  | 
| if (it.IsFound()) return *result; | 
|  | 
| -  LoadICNexus nexus(isolate); | 
| -  LoadIC ic(IC::NO_EXTRA_FRAME, isolate, &nexus); | 
| -  // It could actually be any kind of LoadICs here but the predicate handles | 
| -  // all the cases properly. | 
| -  if (!ic.ShouldThrowReferenceError()) { | 
| +  Handle<Smi> slot = args.at<Smi>(3); | 
| +  Handle<TypeFeedbackVector> vector = args.at<TypeFeedbackVector>(4); | 
| +  FeedbackVectorSlot vector_slot = vector->ToSlot(slot->value()); | 
| +  FeedbackVectorSlotKind slot_kind = vector->GetKind(vector_slot); | 
| +  // It could actually be any kind of load IC slot here but the predicate | 
| +  // handles all the cases properly. | 
| +  if (!LoadIC::ShouldThrowReferenceError(slot_kind)) { | 
| return isolate->heap()->undefined_value(); | 
| } | 
|  | 
|  |