Index: src/type-feedback-vector-inl.h |
diff --git a/src/type-feedback-vector-inl.h b/src/type-feedback-vector-inl.h |
index 5fdceed1852509999f7a8f2d491f42a8c586752f..31f78210020b4512bedb73e14d997ada157810b0 100644 |
--- a/src/type-feedback-vector-inl.h |
+++ b/src/type-feedback-vector-inl.h |
@@ -51,17 +51,29 @@ TypeFeedbackVector* TypeFeedbackVector::cast(Object* obj) { |
int TypeFeedbackMetadata::GetSlotSize(FeedbackVectorSlotKind kind) { |
- DCHECK_NE(FeedbackVectorSlotKind::INVALID, kind); |
- DCHECK_NE(FeedbackVectorSlotKind::KINDS_NUMBER, kind); |
- if (kind == FeedbackVectorSlotKind::GENERAL || |
- kind == FeedbackVectorSlotKind::INTERPRETER_BINARYOP_IC || |
- kind == FeedbackVectorSlotKind::INTERPRETER_COMPARE_IC || |
- kind == FeedbackVectorSlotKind::LITERAL || |
- kind == FeedbackVectorSlotKind::CREATE_CLOSURE) { |
- return 1; |
+ switch (kind) { |
+ case FeedbackVectorSlotKind::GENERAL: |
+ case FeedbackVectorSlotKind::INTERPRETER_COMPARE_IC: |
+ case FeedbackVectorSlotKind::INTERPRETER_BINARYOP_IC: |
+ case FeedbackVectorSlotKind::LITERAL: |
+ case FeedbackVectorSlotKind::CREATE_CLOSURE: |
+ return 1; |
+ |
+ case FeedbackVectorSlotKind::CALL_IC: |
+ case FeedbackVectorSlotKind::LOAD_IC: |
+ case FeedbackVectorSlotKind::LOAD_GLOBAL_IC: |
+ case FeedbackVectorSlotKind::KEYED_LOAD_IC: |
+ case FeedbackVectorSlotKind::STORE_IC: |
+ case FeedbackVectorSlotKind::KEYED_STORE_IC: |
+ case FeedbackVectorSlotKind::STORE_DATA_PROPERTY_IN_LITERAL_IC: |
+ return 2; |
+ |
+ case FeedbackVectorSlotKind::INVALID: |
+ case FeedbackVectorSlotKind::KINDS_NUMBER: |
+ UNREACHABLE(); |
+ break; |
} |
- |
- return 2; |
+ return 1; |
} |
bool TypeFeedbackVector::is_empty() const { |
@@ -174,6 +186,21 @@ void TypeFeedbackVector::ComputeCounts(int* with_type_info, int* generic, |
break; |
} |
case FeedbackVectorSlotKind::INTERPRETER_BINARYOP_IC: |
+ // If we are not running interpreted code, we need to ignore the special |
+ // IC slots for binaryop/compare used by the interpreter. |
+ // TODO(mvstanton): Remove code_is_interpreted when full code is retired |
+ // from service. |
+ if (code_is_interpreted) { |
+ int const feedback = Smi::cast(obj)->value(); |
+ BinaryOperationHint hint = BinaryOperationHintFromFeedback(feedback); |
+ if (hint == BinaryOperationHint::kAny) { |
+ gen++; |
+ } else if (hint != BinaryOperationHint::kNone) { |
+ with++; |
+ } |
+ total++; |
+ } |
+ break; |
case FeedbackVectorSlotKind::INTERPRETER_COMPARE_IC: { |
// If we are not running interpreted code, we need to ignore the special |
// IC slots for binaryop/compare used by the interpreter. |
@@ -181,23 +208,12 @@ void TypeFeedbackVector::ComputeCounts(int* with_type_info, int* generic, |
// from service. |
if (code_is_interpreted) { |
int const feedback = Smi::cast(obj)->value(); |
- if (kind == FeedbackVectorSlotKind::INTERPRETER_COMPARE_IC) { |
- CompareOperationHint hint = |
- CompareOperationHintFromFeedback(feedback); |
- if (hint == CompareOperationHint::kAny) { |
- gen++; |
- } else if (hint != CompareOperationHint::kNone) { |
- with++; |
- } |
- } else { |
- DCHECK_EQ(FeedbackVectorSlotKind::INTERPRETER_BINARYOP_IC, kind); |
- BinaryOperationHint hint = |
- BinaryOperationHintFromFeedback(feedback); |
- if (hint == BinaryOperationHint::kAny) { |
- gen++; |
- } else if (hint != BinaryOperationHint::kNone) { |
- with++; |
- } |
+ CompareOperationHint hint = |
+ CompareOperationHintFromFeedback(feedback); |
+ if (hint == CompareOperationHint::kAny) { |
+ gen++; |
+ } else if (hint != CompareOperationHint::kNone) { |
+ with++; |
} |
total++; |
} |