diff options
Diffstat (limited to 'chromium/v8/src/ic/binary-op-assembler.cc')
-rw-r--r-- | chromium/v8/src/ic/binary-op-assembler.cc | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/chromium/v8/src/ic/binary-op-assembler.cc b/chromium/v8/src/ic/binary-op-assembler.cc index 25c2181ab2d..8cba7172a2e 100644 --- a/chromium/v8/src/ic/binary-op-assembler.cc +++ b/chromium/v8/src/ic/binary-op-assembler.cc @@ -69,6 +69,8 @@ TNode<Object> BinaryOpAssembler::Generate_AddWithFeedback( // Not overflowed. { var_type_feedback = SmiConstant(BinaryOperationFeedback::kSignedSmall); + UpdateFeedback(var_type_feedback.value(), maybe_feedback_vector, + slot_id); var_result = smi_result; Goto(&end); } @@ -116,6 +118,7 @@ TNode<Object> BinaryOpAssembler::Generate_AddWithFeedback( BIND(&do_fadd); { var_type_feedback = SmiConstant(BinaryOperationFeedback::kNumber); + UpdateFeedback(var_type_feedback.value(), maybe_feedback_vector, slot_id); TNode<Float64T> value = Float64Add(var_fadd_lhs.value(), var_fadd_rhs.value()); TNode<HeapNumber> result = AllocateHeapNumberWithValue(value); @@ -166,6 +169,8 @@ TNode<Object> BinaryOpAssembler::Generate_AddWithFeedback( &call_with_any_feedback); var_type_feedback = SmiConstant(BinaryOperationFeedback::kString); + UpdateFeedback(var_type_feedback.value(), maybe_feedback_vector, + slot_id); var_result = CallBuiltin(Builtins::kStringAdd_CheckNone, context, lhs, rhs); @@ -194,6 +199,7 @@ TNode<Object> BinaryOpAssembler::Generate_AddWithFeedback( GotoIf(TaggedIsSmi(var_result.value()), &bigint_too_big); var_type_feedback = SmiConstant(BinaryOperationFeedback::kBigInt); + UpdateFeedback(var_type_feedback.value(), maybe_feedback_vector, slot_id); Goto(&end); BIND(&bigint_too_big); @@ -219,12 +225,12 @@ TNode<Object> BinaryOpAssembler::Generate_AddWithFeedback( BIND(&call_add_stub); { + UpdateFeedback(var_type_feedback.value(), maybe_feedback_vector, slot_id); var_result = CallBuiltin(Builtins::kAdd, context, lhs, rhs); Goto(&end); } BIND(&end); - UpdateFeedback(var_type_feedback.value(), maybe_feedback_vector, slot_id); return var_result.value(); } @@ -279,6 +285,7 @@ TNode<Object> BinaryOpAssembler::Generate_BinaryOperationWithFeedback( { Comment("perform smi operation"); var_result = smiOperation(lhs_smi, CAST(rhs), &var_type_feedback); + UpdateFeedback(var_type_feedback.value(), maybe_feedback_vector, slot_id); Goto(&end); } } @@ -321,6 +328,7 @@ TNode<Object> BinaryOpAssembler::Generate_BinaryOperationWithFeedback( BIND(&do_float_operation); { var_type_feedback = SmiConstant(BinaryOperationFeedback::kNumber); + UpdateFeedback(var_type_feedback.value(), maybe_feedback_vector, slot_id); TNode<Float64T> lhs_value = var_float_lhs.value(); TNode<Float64T> rhs_value = var_float_rhs.value(); TNode<Float64T> value = floatOperation(lhs_value, rhs_value); @@ -384,6 +392,7 @@ TNode<Object> BinaryOpAssembler::Generate_BinaryOperationWithFeedback( BIND(&if_both_bigint); { var_type_feedback = SmiConstant(BinaryOperationFeedback::kBigInt); + UpdateFeedback(var_type_feedback.value(), maybe_feedback_vector, slot_id); if (op == Operation::kSubtract) { Label bigint_too_big(this); var_result = @@ -415,6 +424,7 @@ TNode<Object> BinaryOpAssembler::Generate_BinaryOperationWithFeedback( BIND(&call_stub); { + UpdateFeedback(var_type_feedback.value(), maybe_feedback_vector, slot_id); TNode<Object> result; switch (op) { case Operation::kSubtract: @@ -437,7 +447,6 @@ TNode<Object> BinaryOpAssembler::Generate_BinaryOperationWithFeedback( } BIND(&end); - UpdateFeedback(var_type_feedback.value(), maybe_feedback_vector, slot_id); return var_result.value(); } |