[CSA][cleanup] Renamed bool rhs_is_smi to rhs_known_smi

functionality is:
If rhs_is_smi is true, we are sure that rhs is a Smi.
If rhs_is_smi is false, rhs might or not be a Smi.

Therefore, rhs_known_smi fits better.

Change-Id: Ie6dd0446ef85ba0730189e2012a21c24d1731b74
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1796551
Reviewed-by: Mythri Alle <mythria@chromium.org>
Commit-Queue: Santiago Aboy Solanes <solanes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#63669}
This commit is contained in:
Santiago Aboy Solanes 2019-09-11 09:55:25 +01:00 committed by Commit Bot
parent 17d2b57700
commit 6376671c9c
3 changed files with 28 additions and 28 deletions

View File

@ -15,7 +15,7 @@ using TNode = compiler::TNode<T>;
TNode<Object> BinaryOpAssembler::Generate_AddWithFeedback( TNode<Object> BinaryOpAssembler::Generate_AddWithFeedback(
TNode<Context> context, TNode<Object> lhs, TNode<Object> rhs, TNode<Context> context, TNode<Object> lhs, TNode<Object> rhs,
TNode<UintPtrT> slot_id, TNode<HeapObject> maybe_feedback_vector, TNode<UintPtrT> slot_id, TNode<HeapObject> maybe_feedback_vector,
bool rhs_is_smi) { bool rhs_known_smi) {
// Shared entry for floating point addition. // Shared entry for floating point addition.
Label do_fadd(this), if_lhsisnotnumber(this, Label::kDeferred), Label do_fadd(this), if_lhsisnotnumber(this, Label::kDeferred),
check_rhsisoddball(this, Label::kDeferred), check_rhsisoddball(this, Label::kDeferred),
@ -33,14 +33,14 @@ TNode<Object> BinaryOpAssembler::Generate_AddWithFeedback(
// both Smi and Number operations, so this path should not be marked as // both Smi and Number operations, so this path should not be marked as
// Deferred. // Deferred.
Label if_lhsisnotsmi(this, Label if_lhsisnotsmi(this,
rhs_is_smi ? Label::kDeferred : Label::kNonDeferred); rhs_known_smi ? Label::kDeferred : Label::kNonDeferred);
Branch(TaggedIsNotSmi(lhs), &if_lhsisnotsmi, &if_lhsissmi); Branch(TaggedIsNotSmi(lhs), &if_lhsisnotsmi, &if_lhsissmi);
BIND(&if_lhsissmi); BIND(&if_lhsissmi);
{ {
Comment("lhs is Smi"); Comment("lhs is Smi");
TNode<Smi> lhs_smi = CAST(lhs); TNode<Smi> lhs_smi = CAST(lhs);
if (!rhs_is_smi) { if (!rhs_known_smi) {
// Check if the {rhs} is also a Smi. // Check if the {rhs} is also a Smi.
Label if_rhsissmi(this), if_rhsisnotsmi(this); Label if_rhsissmi(this), if_rhsisnotsmi(this);
Branch(TaggedIsSmi(rhs), &if_rhsissmi, &if_rhsisnotsmi); Branch(TaggedIsSmi(rhs), &if_rhsissmi, &if_rhsisnotsmi);
@ -67,7 +67,7 @@ TNode<Object> BinaryOpAssembler::Generate_AddWithFeedback(
// as Deferred. // as Deferred.
TNode<Smi> rhs_smi = CAST(rhs); TNode<Smi> rhs_smi = CAST(rhs);
Label if_overflow(this, Label if_overflow(this,
rhs_is_smi ? Label::kDeferred : Label::kNonDeferred); rhs_known_smi ? Label::kDeferred : Label::kNonDeferred);
TNode<Smi> smi_result = TrySmiAdd(lhs_smi, rhs_smi, &if_overflow); TNode<Smi> smi_result = TrySmiAdd(lhs_smi, rhs_smi, &if_overflow);
// Not overflowed. // Not overflowed.
{ {
@ -91,7 +91,7 @@ TNode<Object> BinaryOpAssembler::Generate_AddWithFeedback(
TNode<HeapObject> lhs_heap_object = CAST(lhs); TNode<HeapObject> lhs_heap_object = CAST(lhs);
GotoIfNot(IsHeapNumber(lhs_heap_object), &if_lhsisnotnumber); GotoIfNot(IsHeapNumber(lhs_heap_object), &if_lhsisnotnumber);
if (!rhs_is_smi) { if (!rhs_known_smi) {
// Check if the {rhs} is Smi. // Check if the {rhs} is Smi.
Label if_rhsissmi(this), if_rhsisnotsmi(this); Label if_rhsissmi(this), if_rhsisnotsmi(this);
Branch(TaggedIsSmi(rhs), &if_rhsissmi, &if_rhsisnotsmi); Branch(TaggedIsSmi(rhs), &if_rhsissmi, &if_rhsisnotsmi);
@ -235,7 +235,7 @@ TNode<Object> BinaryOpAssembler::Generate_BinaryOperationWithFeedback(
TNode<Context> context, TNode<Object> lhs, TNode<Object> rhs, TNode<Context> context, TNode<Object> lhs, TNode<Object> rhs,
TNode<UintPtrT> slot_id, TNode<HeapObject> maybe_feedback_vector, TNode<UintPtrT> slot_id, TNode<HeapObject> maybe_feedback_vector,
const SmiOperation& smiOperation, const FloatOperation& floatOperation, const SmiOperation& smiOperation, const FloatOperation& floatOperation,
Operation op, bool rhs_is_smi) { Operation op, bool rhs_known_smi) {
Label do_float_operation(this), end(this), call_stub(this), Label do_float_operation(this), end(this), call_stub(this),
check_rhsisoddball(this, Label::kDeferred), call_with_any_feedback(this), check_rhsisoddball(this, Label::kDeferred), call_with_any_feedback(this),
if_lhsisnotnumber(this, Label::kDeferred), if_lhsisnotnumber(this, Label::kDeferred),
@ -251,7 +251,7 @@ TNode<Object> BinaryOpAssembler::Generate_BinaryOperationWithFeedback(
// operation, we want to fast path both Smi and Number operations, so this // operation, we want to fast path both Smi and Number operations, so this
// path should not be marked as Deferred. // path should not be marked as Deferred.
Label if_lhsisnotsmi(this, Label if_lhsisnotsmi(this,
rhs_is_smi ? Label::kDeferred : Label::kNonDeferred); rhs_known_smi ? Label::kDeferred : Label::kNonDeferred);
Branch(TaggedIsNotSmi(lhs), &if_lhsisnotsmi, &if_lhsissmi); Branch(TaggedIsNotSmi(lhs), &if_lhsisnotsmi, &if_lhsissmi);
// Check if the {lhs} is a Smi or a HeapObject. // Check if the {lhs} is a Smi or a HeapObject.
@ -259,7 +259,7 @@ TNode<Object> BinaryOpAssembler::Generate_BinaryOperationWithFeedback(
{ {
Comment("lhs is Smi"); Comment("lhs is Smi");
TNode<Smi> lhs_smi = CAST(lhs); TNode<Smi> lhs_smi = CAST(lhs);
if (!rhs_is_smi) { if (!rhs_known_smi) {
// Check if the {rhs} is also a Smi. // Check if the {rhs} is also a Smi.
Label if_rhsissmi(this), if_rhsisnotsmi(this); Label if_rhsissmi(this), if_rhsisnotsmi(this);
Branch(TaggedIsSmi(rhs), &if_rhsissmi, &if_rhsisnotsmi); Branch(TaggedIsSmi(rhs), &if_rhsissmi, &if_rhsisnotsmi);
@ -293,7 +293,7 @@ TNode<Object> BinaryOpAssembler::Generate_BinaryOperationWithFeedback(
TNode<HeapObject> lhs_heap_object = CAST(lhs); TNode<HeapObject> lhs_heap_object = CAST(lhs);
GotoIfNot(IsHeapNumber(lhs_heap_object), &if_lhsisnotnumber); GotoIfNot(IsHeapNumber(lhs_heap_object), &if_lhsisnotnumber);
if (!rhs_is_smi) { if (!rhs_known_smi) {
// Check if the {rhs} is a Smi. // Check if the {rhs} is a Smi.
Label if_rhsissmi(this), if_rhsisnotsmi(this); Label if_rhsissmi(this), if_rhsisnotsmi(this);
Branch(TaggedIsSmi(rhs), &if_rhsissmi, &if_rhsisnotsmi); Branch(TaggedIsSmi(rhs), &if_rhsissmi, &if_rhsisnotsmi);
@ -435,7 +435,7 @@ TNode<Object> BinaryOpAssembler::Generate_BinaryOperationWithFeedback(
TNode<Object> BinaryOpAssembler::Generate_SubtractWithFeedback( TNode<Object> BinaryOpAssembler::Generate_SubtractWithFeedback(
TNode<Context> context, TNode<Object> lhs, TNode<Object> rhs, TNode<Context> context, TNode<Object> lhs, TNode<Object> rhs,
TNode<UintPtrT> slot_id, TNode<HeapObject> maybe_feedback_vector, TNode<UintPtrT> slot_id, TNode<HeapObject> maybe_feedback_vector,
bool rhs_is_smi) { bool rhs_known_smi) {
auto smiFunction = [=](TNode<Smi> lhs, TNode<Smi> rhs, auto smiFunction = [=](TNode<Smi> lhs, TNode<Smi> rhs,
TVariable<Smi>* var_type_feedback) { TVariable<Smi>* var_type_feedback) {
Label end(this); Label end(this);
@ -444,7 +444,7 @@ TNode<Object> BinaryOpAssembler::Generate_SubtractWithFeedback(
// operation. For the normal Sub operation, we want to fast path both // operation. For the normal Sub operation, we want to fast path both
// Smi and Number operations, so this path should not be marked as Deferred. // Smi and Number operations, so this path should not be marked as Deferred.
Label if_overflow(this, Label if_overflow(this,
rhs_is_smi ? Label::kDeferred : Label::kNonDeferred); rhs_known_smi ? Label::kDeferred : Label::kNonDeferred);
var_result = TrySmiSub(lhs, rhs, &if_overflow); var_result = TrySmiSub(lhs, rhs, &if_overflow);
*var_type_feedback = SmiConstant(BinaryOperationFeedback::kSignedSmall); *var_type_feedback = SmiConstant(BinaryOperationFeedback::kSignedSmall);
Goto(&end); Goto(&end);
@ -465,13 +465,13 @@ TNode<Object> BinaryOpAssembler::Generate_SubtractWithFeedback(
}; };
return Generate_BinaryOperationWithFeedback( return Generate_BinaryOperationWithFeedback(
context, lhs, rhs, slot_id, maybe_feedback_vector, smiFunction, context, lhs, rhs, slot_id, maybe_feedback_vector, smiFunction,
floatFunction, Operation::kSubtract, rhs_is_smi); floatFunction, Operation::kSubtract, rhs_known_smi);
} }
TNode<Object> BinaryOpAssembler::Generate_MultiplyWithFeedback( TNode<Object> BinaryOpAssembler::Generate_MultiplyWithFeedback(
TNode<Context> context, TNode<Object> lhs, TNode<Object> rhs, TNode<Context> context, TNode<Object> lhs, TNode<Object> rhs,
TNode<UintPtrT> slot_id, TNode<HeapObject> maybe_feedback_vector, TNode<UintPtrT> slot_id, TNode<HeapObject> maybe_feedback_vector,
bool rhs_is_smi) { bool rhs_known_smi) {
auto smiFunction = [=](TNode<Smi> lhs, TNode<Smi> rhs, auto smiFunction = [=](TNode<Smi> lhs, TNode<Smi> rhs,
TVariable<Smi>* var_type_feedback) { TVariable<Smi>* var_type_feedback) {
TNode<Number> result = SmiMul(lhs, rhs); TNode<Number> result = SmiMul(lhs, rhs);
@ -485,20 +485,20 @@ TNode<Object> BinaryOpAssembler::Generate_MultiplyWithFeedback(
}; };
return Generate_BinaryOperationWithFeedback( return Generate_BinaryOperationWithFeedback(
context, lhs, rhs, slot_id, maybe_feedback_vector, smiFunction, context, lhs, rhs, slot_id, maybe_feedback_vector, smiFunction,
floatFunction, Operation::kMultiply, rhs_is_smi); floatFunction, Operation::kMultiply, rhs_known_smi);
} }
TNode<Object> BinaryOpAssembler::Generate_DivideWithFeedback( TNode<Object> BinaryOpAssembler::Generate_DivideWithFeedback(
TNode<Context> context, TNode<Object> dividend, TNode<Object> divisor, TNode<Context> context, TNode<Object> dividend, TNode<Object> divisor,
TNode<UintPtrT> slot_id, TNode<HeapObject> maybe_feedback_vector, TNode<UintPtrT> slot_id, TNode<HeapObject> maybe_feedback_vector,
bool rhs_is_smi) { bool rhs_known_smi) {
auto smiFunction = [=](TNode<Smi> lhs, TNode<Smi> rhs, auto smiFunction = [=](TNode<Smi> lhs, TNode<Smi> rhs,
TVariable<Smi>* var_type_feedback) { TVariable<Smi>* var_type_feedback) {
TVARIABLE(Object, var_result); TVARIABLE(Object, var_result);
// If rhs is known to be an Smi (for DivSmi) we want to fast path Smi // If rhs is known to be an Smi (for DivSmi) we want to fast path Smi
// operation. For the normal Div operation, we want to fast path both // operation. For the normal Div operation, we want to fast path both
// Smi and Number operations, so this path should not be marked as Deferred. // Smi and Number operations, so this path should not be marked as Deferred.
Label bailout(this, rhs_is_smi ? Label::kDeferred : Label::kNonDeferred), Label bailout(this, rhs_known_smi ? Label::kDeferred : Label::kNonDeferred),
end(this); end(this);
var_result = TrySmiDiv(lhs, rhs, &bailout); var_result = TrySmiDiv(lhs, rhs, &bailout);
*var_type_feedback = SmiConstant(BinaryOperationFeedback::kSignedSmall); *var_type_feedback = SmiConstant(BinaryOperationFeedback::kSignedSmall);
@ -521,13 +521,13 @@ TNode<Object> BinaryOpAssembler::Generate_DivideWithFeedback(
}; };
return Generate_BinaryOperationWithFeedback( return Generate_BinaryOperationWithFeedback(
context, dividend, divisor, slot_id, maybe_feedback_vector, smiFunction, context, dividend, divisor, slot_id, maybe_feedback_vector, smiFunction,
floatFunction, Operation::kDivide, rhs_is_smi); floatFunction, Operation::kDivide, rhs_known_smi);
} }
TNode<Object> BinaryOpAssembler::Generate_ModulusWithFeedback( TNode<Object> BinaryOpAssembler::Generate_ModulusWithFeedback(
TNode<Context> context, TNode<Object> dividend, TNode<Object> divisor, TNode<Context> context, TNode<Object> dividend, TNode<Object> divisor,
TNode<UintPtrT> slot_id, TNode<HeapObject> maybe_feedback_vector, TNode<UintPtrT> slot_id, TNode<HeapObject> maybe_feedback_vector,
bool rhs_is_smi) { bool rhs_known_smi) {
auto smiFunction = [=](TNode<Smi> lhs, TNode<Smi> rhs, auto smiFunction = [=](TNode<Smi> lhs, TNode<Smi> rhs,
TVariable<Smi>* var_type_feedback) { TVariable<Smi>* var_type_feedback) {
TNode<Number> result = SmiMod(lhs, rhs); TNode<Number> result = SmiMod(lhs, rhs);
@ -541,13 +541,13 @@ TNode<Object> BinaryOpAssembler::Generate_ModulusWithFeedback(
}; };
return Generate_BinaryOperationWithFeedback( return Generate_BinaryOperationWithFeedback(
context, dividend, divisor, slot_id, maybe_feedback_vector, smiFunction, context, dividend, divisor, slot_id, maybe_feedback_vector, smiFunction,
floatFunction, Operation::kModulus, rhs_is_smi); floatFunction, Operation::kModulus, rhs_known_smi);
} }
TNode<Object> BinaryOpAssembler::Generate_ExponentiateWithFeedback( TNode<Object> BinaryOpAssembler::Generate_ExponentiateWithFeedback(
TNode<Context> context, TNode<Object> base, TNode<Object> exponent, TNode<Context> context, TNode<Object> base, TNode<Object> exponent,
TNode<UintPtrT> slot_id, TNode<HeapObject> maybe_feedback_vector, TNode<UintPtrT> slot_id, TNode<HeapObject> maybe_feedback_vector,
bool rhs_is_smi) { bool rhs_known_smi) {
// We currently don't optimize exponentiation based on feedback. // We currently don't optimize exponentiation based on feedback.
TNode<Smi> dummy_feedback = SmiConstant(BinaryOperationFeedback::kAny); TNode<Smi> dummy_feedback = SmiConstant(BinaryOperationFeedback::kAny);
UpdateFeedback(dummy_feedback, maybe_feedback_vector, slot_id); UpdateFeedback(dummy_feedback, maybe_feedback_vector, slot_id);

View File

@ -23,32 +23,32 @@ class BinaryOpAssembler : public CodeStubAssembler {
TNode<Object> Generate_AddWithFeedback( TNode<Object> Generate_AddWithFeedback(
TNode<Context> context, TNode<Object> left, TNode<Object> right, TNode<Context> context, TNode<Object> left, TNode<Object> right,
TNode<UintPtrT> slot, TNode<HeapObject> maybe_feedback_vector, TNode<UintPtrT> slot, TNode<HeapObject> maybe_feedback_vector,
bool rhs_is_smi); bool rhs_known_smi);
TNode<Object> Generate_SubtractWithFeedback( TNode<Object> Generate_SubtractWithFeedback(
TNode<Context> context, TNode<Object> left, TNode<Object> right, TNode<Context> context, TNode<Object> left, TNode<Object> right,
TNode<UintPtrT> slot, TNode<HeapObject> maybe_feedback_vector, TNode<UintPtrT> slot, TNode<HeapObject> maybe_feedback_vector,
bool rhs_is_smi); bool rhs_known_smi);
TNode<Object> Generate_MultiplyWithFeedback( TNode<Object> Generate_MultiplyWithFeedback(
TNode<Context> context, TNode<Object> left, TNode<Object> right, TNode<Context> context, TNode<Object> left, TNode<Object> right,
TNode<UintPtrT> slot, TNode<HeapObject> maybe_feedback_vector, TNode<UintPtrT> slot, TNode<HeapObject> maybe_feedback_vector,
bool rhs_is_smi); bool rhs_known_smi);
TNode<Object> Generate_DivideWithFeedback( TNode<Object> Generate_DivideWithFeedback(
TNode<Context> context, TNode<Object> dividend, TNode<Object> divisor, TNode<Context> context, TNode<Object> dividend, TNode<Object> divisor,
TNode<UintPtrT> slot, TNode<HeapObject> maybe_feedback_vector, TNode<UintPtrT> slot, TNode<HeapObject> maybe_feedback_vector,
bool rhs_is_smi); bool rhs_known_smi);
TNode<Object> Generate_ModulusWithFeedback( TNode<Object> Generate_ModulusWithFeedback(
TNode<Context> context, TNode<Object> dividend, TNode<Object> divisor, TNode<Context> context, TNode<Object> dividend, TNode<Object> divisor,
TNode<UintPtrT> slot, TNode<HeapObject> maybe_feedback_vector, TNode<UintPtrT> slot, TNode<HeapObject> maybe_feedback_vector,
bool rhs_is_smi); bool rhs_known_smi);
TNode<Object> Generate_ExponentiateWithFeedback( TNode<Object> Generate_ExponentiateWithFeedback(
TNode<Context> context, TNode<Object> base, TNode<Object> exponent, TNode<Context> context, TNode<Object> base, TNode<Object> exponent,
TNode<UintPtrT> slot, TNode<HeapObject> maybe_feedback_vector, TNode<UintPtrT> slot, TNode<HeapObject> maybe_feedback_vector,
bool rhs_is_smi); bool rhs_known_smi);
private: private:
using SmiOperation = using SmiOperation =
@ -60,7 +60,7 @@ class BinaryOpAssembler : public CodeStubAssembler {
TNode<Context> context, TNode<Object> left, TNode<Object> right, TNode<Context> context, TNode<Object> left, TNode<Object> right,
TNode<UintPtrT> slot, TNode<HeapObject> maybe_feedback_vector, TNode<UintPtrT> slot, TNode<HeapObject> maybe_feedback_vector,
const SmiOperation& smiOperation, const FloatOperation& floatOperation, const SmiOperation& smiOperation, const FloatOperation& floatOperation,
Operation op, bool rhs_is_smi); Operation op, bool rhs_known_smi);
}; };
} // namespace internal } // namespace internal

View File

@ -835,7 +835,7 @@ class InterpreterBinaryOpAssembler : public InterpreterAssembler {
using BinaryOpGenerator = TNode<Object> (BinaryOpAssembler::*)( using BinaryOpGenerator = TNode<Object> (BinaryOpAssembler::*)(
TNode<Context> context, TNode<Object> left, TNode<Object> right, TNode<Context> context, TNode<Object> left, TNode<Object> right,
TNode<UintPtrT> slot, TNode<HeapObject> maybe_feedback_vector, TNode<UintPtrT> slot, TNode<HeapObject> maybe_feedback_vector,
bool rhs_is_smi); bool rhs_known_smi);
void BinaryOpWithFeedback(BinaryOpGenerator generator) { void BinaryOpWithFeedback(BinaryOpGenerator generator) {
TNode<Object> lhs = LoadRegisterAtOperandIndex(0); TNode<Object> lhs = LoadRegisterAtOperandIndex(0);