Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(22)

Unified Diff: src/type-feedback-vector.cc

Issue 2662113005: [ic] Introduce IsXyzIC() predicates. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/type-feedback-vector.h ('k') | src/type-feedback-vector-inl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/type-feedback-vector.cc
diff --git a/src/type-feedback-vector.cc b/src/type-feedback-vector.cc
index fcb1787411b063955c77b46f3a5092ffdd39aacb..c808fb9bfefa5055a2e7a9ff21ed086f55f58c2d 100644
--- a/src/type-feedback-vector.cc
+++ b/src/type-feedback-vector.cc
@@ -197,19 +197,6 @@ Handle<TypeFeedbackVector> TypeFeedbackVector::New(
array->set_map_no_write_barrier(isolate->heap()->type_feedback_vector_map());
array->set(kMetadataIndex, *metadata);
array->set(kInvocationCountIndex, Smi::kZero);
- for (int i = 0; i < slot_count;) {
mvstanton 2017/02/01 15:57:12 Actually if you can keep this here I'd prefer it,
Igor Sheludko 2017/02/01 16:10:01 As discussed offline, we should better remove the
- FeedbackVectorSlot slot(i);
- FeedbackVectorSlotKind kind = metadata->GetKind(slot);
- int index = TypeFeedbackVector::GetIndex(slot);
- int entry_size = TypeFeedbackMetadata::GetSlotSize(kind);
-
- if (kind == FeedbackVectorSlotKind::CREATE_CLOSURE) {
- // TODO(mvstanton): Root feedback vectors in this location.
- array->set(index, *factory->empty_type_feedback_vector(),
- SKIP_WRITE_BARRIER);
- }
- i += entry_size;
- }
DisallowHeapAllocation no_gc;
@@ -224,24 +211,44 @@ Handle<TypeFeedbackVector> TypeFeedbackVector::New(
int entry_size = TypeFeedbackMetadata::GetSlotSize(kind);
Object* value;
- if (kind == FeedbackVectorSlotKind::LOAD_GLOBAL_IC) {
- value = isolate->heap()->empty_weak_cell();
- } else if (kind == FeedbackVectorSlotKind::INTERPRETER_COMPARE_IC ||
- kind == FeedbackVectorSlotKind::INTERPRETER_BINARYOP_IC) {
- value = Smi::kZero;
- } else if (kind == FeedbackVectorSlotKind::LITERAL) {
- value = *undefined_value;
- } else {
- value = *uninitialized_sentinel;
+ Object* extra_value = *uninitialized_sentinel;
+ switch (kind) {
+ case FeedbackVectorSlotKind::LOAD_GLOBAL_IC:
+ value = isolate->heap()->empty_weak_cell();
+ break;
+ case FeedbackVectorSlotKind::INTERPRETER_COMPARE_IC:
+ case FeedbackVectorSlotKind::INTERPRETER_BINARYOP_IC:
+ value = Smi::kZero;
+ break;
+ case FeedbackVectorSlotKind::CREATE_CLOSURE:
+ // TODO(mvstanton): Root feedback vectors in this location.
+ value = isolate->heap()->empty_type_feedback_vector();
+ break;
+ case FeedbackVectorSlotKind::LITERAL:
+ value = *undefined_value;
+ break;
+ case FeedbackVectorSlotKind::CALL_IC:
+ value = *uninitialized_sentinel;
+ extra_value = Smi::kZero;
+ break;
+ case FeedbackVectorSlotKind::LOAD_IC:
+ case FeedbackVectorSlotKind::KEYED_LOAD_IC:
+ case FeedbackVectorSlotKind::STORE_IC:
+ case FeedbackVectorSlotKind::KEYED_STORE_IC:
+ case FeedbackVectorSlotKind::STORE_DATA_PROPERTY_IN_LITERAL_IC:
+ case FeedbackVectorSlotKind::GENERAL:
+ value = *uninitialized_sentinel;
+ break;
+
+ case FeedbackVectorSlotKind::INVALID:
+ case FeedbackVectorSlotKind::KINDS_NUMBER:
+ UNREACHABLE();
+ value = Smi::kZero;
+ break;
}
-
- if (kind != FeedbackVectorSlotKind::CREATE_CLOSURE) {
- array->set(index, value, SKIP_WRITE_BARRIER);
- value = kind == FeedbackVectorSlotKind::CALL_IC ? Smi::kZero
- : *uninitialized_sentinel;
- for (int j = 1; j < entry_size; j++) {
- array->set(index + j, value, SKIP_WRITE_BARRIER);
- }
+ array->set(index, value, SKIP_WRITE_BARRIER);
+ for (int j = 1; j < entry_size; j++) {
+ array->set(index + j, extra_value, SKIP_WRITE_BARRIER);
}
i += entry_size;
}
@@ -418,8 +425,8 @@ void FeedbackNexus::ConfigurePremonomorphic() {
void FeedbackNexus::ConfigureMegamorphic() {
// Keyed ICs must use ConfigureMegamorphicKeyed.
- DCHECK_NE(FeedbackVectorSlotKind::KEYED_LOAD_IC, vector()->GetKind(slot()));
- DCHECK_NE(FeedbackVectorSlotKind::KEYED_STORE_IC, vector()->GetKind(slot()));
+ DCHECK(!vector()->IsKeyedLoadIC(slot()));
+ DCHECK(!vector()->IsKeyedStoreIC(slot()));
Isolate* isolate = GetIsolate();
SetFeedback(*TypeFeedbackVector::MegamorphicSentinel(isolate),
« no previous file with comments | « src/type-feedback-vector.h ('k') | src/type-feedback-vector-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698