Index: src/hydrogen.cc |
diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
index 6e6eb9c7d686ee0183844508c5936afa7af4bfc9..c79a8170b64ddfa0b8b3125fb6f4977db993ae6d 100644 |
--- a/src/hydrogen.cc |
+++ b/src/hydrogen.cc |
@@ -5406,8 +5406,11 @@ |
variable->name(), |
ast_context()->is_for_typeof()); |
if (FLAG_vector_ics) { |
- instr->SetVectorAndSlot(handle(current_feedback_vector(), isolate()), |
- expr->VariableFeedbackSlot()); |
+ Handle<SharedFunctionInfo> current_shared = |
+ function_state()->compilation_info()->shared_info(); |
+ instr->SetVectorAndSlot( |
+ handle(current_shared->feedback_vector(), isolate()), |
+ expr->VariableFeedbackSlot()); |
} |
return ast_context()->ReturnInstruction(instr, expr->id()); |
} |
@@ -6898,8 +6901,10 @@ |
HLoadNamedGeneric* result = |
New<HLoadNamedGeneric>(object, name, PREMONOMORPHIC); |
if (FLAG_vector_ics) { |
+ Handle<SharedFunctionInfo> current_shared = |
+ function_state()->compilation_info()->shared_info(); |
Handle<TypeFeedbackVector> vector = |
- handle(current_feedback_vector(), isolate()); |
+ handle(current_shared->feedback_vector(), isolate()); |
FeedbackVectorICSlot slot = expr->AsProperty()->PropertyFeedbackSlot(); |
result->SetVectorAndSlot(vector, slot); |
} |
@@ -6919,10 +6924,16 @@ |
HValue* key, |
HValue* value) { |
if (access_type == LOAD) { |
- // HLoadKeyedGeneric with vector ics benefits from being encoded as |
- // MEGAMORPHIC because the vector/slot combo becomes unnecessary. |
- HLoadKeyedGeneric* result = New<HLoadKeyedGeneric>( |
- object, key, FLAG_vector_ics ? MEGAMORPHIC : PREMONOMORPHIC); |
+ HLoadKeyedGeneric* result = |
+ New<HLoadKeyedGeneric>(object, key, PREMONOMORPHIC); |
+ if (FLAG_vector_ics) { |
+ Handle<SharedFunctionInfo> current_shared = |
+ function_state()->compilation_info()->shared_info(); |
+ Handle<TypeFeedbackVector> vector = |
+ handle(current_shared->feedback_vector(), isolate()); |
+ FeedbackVectorICSlot slot = expr->AsProperty()->PropertyFeedbackSlot(); |
+ result->SetVectorAndSlot(vector, slot); |
+ } |
return result; |
} else { |
return New<HStoreKeyedGeneric>(object, key, value, function_language_mode(), |
@@ -9314,8 +9325,10 @@ |
expr->IsUsingCallFeedbackICSlot(isolate())) { |
// We've never seen this call before, so let's have Crankshaft learn |
// through the type vector. |
+ Handle<SharedFunctionInfo> current_shared = |
+ function_state()->compilation_info()->shared_info(); |
Handle<TypeFeedbackVector> vector = |
- handle(current_feedback_vector(), isolate()); |
+ handle(current_shared->feedback_vector(), isolate()); |
FeedbackVectorICSlot slot = expr->CallFeedbackICSlot(); |
call_function->SetVectorAndSlot(vector, slot); |
} |