| Index: src/interpreter/interpreter-assembler.cc
|
| diff --git a/src/interpreter/interpreter-assembler.cc b/src/interpreter/interpreter-assembler.cc
|
| index dc71e559c429b122450f0b70fdc1746711d1c8e3..d5a7f59f2be4ba946333a79e7fe5517b2657aa0f 100644
|
| --- a/src/interpreter/interpreter-assembler.cc
|
| +++ b/src/interpreter/interpreter-assembler.cc
|
| @@ -587,6 +587,9 @@ Node* InterpreterAssembler::CallJSWithFeedback(
|
| Label call_function(this), extra_checks(this, Label::kDeferred), call(this),
|
| end(this);
|
|
|
| + // Increment the call count.
|
| + IncrementCallCount(feedback_vector, slot_id);
|
| +
|
| // The checks. First, does function match the recorded monomorphic target?
|
| Node* feedback_element = LoadFixedArrayElement(feedback_vector, slot_id);
|
| Node* feedback_value = LoadWeakCellValueUnchecked(feedback_element);
|
| @@ -600,9 +603,6 @@ Node* InterpreterAssembler::CallJSWithFeedback(
|
|
|
| BIND(&call_function);
|
| {
|
| - // Increment the call count.
|
| - IncrementCallCount(feedback_vector, slot_id);
|
| -
|
| // Call using call function builtin.
|
| Callable callable = CodeFactory::InterpreterPushArgsThenCall(
|
| isolate(), receiver_mode, tail_call_mode,
|
| @@ -640,9 +640,6 @@ Node* InterpreterAssembler::CallJSWithFeedback(
|
| Node* is_array_function = WordEqual(context_slot, function);
|
| GotoIfNot(is_array_function, &mark_megamorphic);
|
|
|
| - // It is a monomorphic Array function. Increment the call count.
|
| - IncrementCallCount(feedback_vector, slot_id);
|
| -
|
| // Call ArrayConstructorStub.
|
| Callable callable_call =
|
| CodeFactory::InterpreterPushArgsThenConstructArray(isolate());
|
| @@ -723,10 +720,7 @@ Node* InterpreterAssembler::CallJSWithFeedback(
|
|
|
| BIND(&call);
|
| {
|
| - Comment("Increment call count and call using Call builtin");
|
| - // Increment the call count.
|
| - IncrementCallCount(feedback_vector, slot_id);
|
| -
|
| + Comment("invoke using Call builtin");
|
| // Call using call builtin.
|
| Callable callable_call = CodeFactory::InterpreterPushArgsThenCall(
|
| isolate(), receiver_mode, tail_call_mode,
|
| @@ -782,10 +776,8 @@ Node* InterpreterAssembler::Construct(Node* constructor, Node* context,
|
| Label call_construct_function(this, &allocation_feedback),
|
| extra_checks(this, Label::kDeferred), call_construct(this), end(this);
|
|
|
| - // Slot id of 0 is used to indicate no type feedback is available.
|
| - STATIC_ASSERT(FeedbackVector::kReservedIndexCount > 0);
|
| - Node* is_feedback_unavailable = WordEqual(slot_id, IntPtrConstant(0));
|
| - GotoIf(is_feedback_unavailable, &call_construct);
|
| + // Increment the call count.
|
| + IncrementCallCount(feedback_vector, slot_id);
|
|
|
| // Check that the constructor is not a smi.
|
| Node* is_smi = TaggedIsSmi(constructor);
|
| @@ -806,8 +798,7 @@ Node* InterpreterAssembler::Construct(Node* constructor, Node* context,
|
|
|
| BIND(&call_construct_function);
|
| {
|
| - Comment("call using ConstructFunction");
|
| - IncrementCallCount(feedback_vector, slot_id);
|
| + Comment("construct using ConstructFunction");
|
| Callable callable_function = CodeFactory::InterpreterPushArgsThenConstruct(
|
| isolate(), InterpreterPushArgsMode::kJSFunction);
|
| return_value.Bind(CallStub(callable_function.descriptor(),
|
|
|