| 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++;
|
| }
|
|
|