Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1235)

Unified Diff: src/compiler/simplified-operator.cc

Issue 2222983002: [turbofan] Also consume number type feedback for abstract equality. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/compiler/simplified-operator.h ('k') | src/compiler/type-hint-analyzer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/simplified-operator.cc
diff --git a/src/compiler/simplified-operator.cc b/src/compiler/simplified-operator.cc
index 52544e2b8368ea34685b8ae325135a9b5e68bea0..623f229c85a2b9ab7ca55a2d743f6809ec56f7ee 100644
--- a/src/compiler/simplified-operator.cc
+++ b/src/compiler/simplified-operator.cc
@@ -249,6 +249,26 @@ CheckTaggedHoleMode CheckTaggedHoleModeOf(const Operator* op) {
return OpParameter<CheckTaggedHoleMode>(op);
}
+size_t hash_value(CheckTaggedInputMode mode) {
+ return static_cast<size_t>(mode);
+}
+
+std::ostream& operator<<(std::ostream& os, CheckTaggedInputMode mode) {
+ switch (mode) {
+ case CheckTaggedInputMode::kNumber:
+ return os << "Number";
+ case CheckTaggedInputMode::kNumberOrOddball:
+ return os << "NumberOrOddball";
+ }
+ UNREACHABLE();
+ return os;
+}
+
+CheckTaggedInputMode CheckTaggedInputModeOf(const Operator* op) {
+ DCHECK_EQ(IrOpcode::kCheckedTaggedToFloat64, op->opcode());
+ return OpParameter<CheckTaggedInputMode>(op);
+}
+
std::ostream& operator<<(std::ostream& os, GrowFastElementsFlags flags) {
bool empty = true;
if (flags & GrowFastElementsFlag::kArrayObject) {
@@ -300,6 +320,8 @@ std::ostream& operator<<(std::ostream& os, NumberOperationHint hint) {
return os << "SignedSmall";
case NumberOperationHint::kSigned32:
return os << "Signed32";
+ case NumberOperationHint::kNumber:
+ return os << "Number";
case NumberOperationHint::kNumberOrOddball:
return os << "NumberOrOddball";
}
@@ -429,7 +451,6 @@ NumberOperationHint NumberOperationHintOf(const Operator* op) {
V(CheckedUint32Mod, 2, 1) \
V(CheckedUint32ToInt32, 1, 1) \
V(CheckedTaggedSignedToInt32, 1, 1) \
- V(CheckedTaggedToFloat64, 1, 1) \
V(CheckedTruncateTaggedToWord32, 1, 1)
struct SimplifiedOperatorGlobalCache final {
@@ -496,6 +517,20 @@ struct SimplifiedOperatorGlobalCache final {
CheckedTaggedToInt32Operator<CheckForMinusZeroMode::kDontCheckForMinusZero>
kCheckedTaggedToInt32DontCheckForMinusZeroOperator;
+ template <CheckTaggedInputMode kMode>
+ struct CheckedTaggedToFloat64Operator final
+ : public Operator1<CheckTaggedInputMode> {
+ CheckedTaggedToFloat64Operator()
+ : Operator1<CheckTaggedInputMode>(
+ IrOpcode::kCheckedTaggedToFloat64,
+ Operator::kFoldable | Operator::kNoThrow,
+ "CheckedTaggedToFloat64", 1, 1, 1, 1, 1, 0, kMode) {}
+ };
+ CheckedTaggedToFloat64Operator<CheckTaggedInputMode::kNumber>
+ kCheckedTaggedToFloat64NumberOperator;
+ CheckedTaggedToFloat64Operator<CheckTaggedInputMode::kNumberOrOddball>
+ kCheckedTaggedToFloat64NumberOrOddballOperator;
+
template <CheckFloat64HoleMode kMode>
struct CheckFloat64HoleNaNOperator final
: public Operator1<CheckFloat64HoleMode> {
@@ -555,6 +590,7 @@ struct SimplifiedOperatorGlobalCache final {
Name##Operator<NumberOperationHint::kSignedSmall> \
k##Name##SignedSmallOperator; \
Name##Operator<NumberOperationHint::kSigned32> k##Name##Signed32Operator; \
+ Name##Operator<NumberOperationHint::kNumber> k##Name##NumberOperator; \
Name##Operator<NumberOperationHint::kNumberOrOddball> \
k##Name##NumberOrOddballOperator;
SPECULATIVE_NUMBER_BINOP_LIST(SPECULATIVE_NUMBER_BINOP)
@@ -633,6 +669,18 @@ const Operator* SimplifiedOperatorBuilder::CheckedTaggedToInt32(
return nullptr;
}
+const Operator* SimplifiedOperatorBuilder::CheckedTaggedToFloat64(
+ CheckTaggedInputMode mode) {
+ switch (mode) {
+ case CheckTaggedInputMode::kNumber:
+ return &cache_.kCheckedTaggedToFloat64NumberOperator;
+ case CheckTaggedInputMode::kNumberOrOddball:
+ return &cache_.kCheckedTaggedToFloat64NumberOrOddballOperator;
+ }
+ UNREACHABLE();
+ return nullptr;
+}
+
const Operator* SimplifiedOperatorBuilder::CheckMaps(int map_input_count) {
// TODO(bmeurer): Cache the most important versions of this operator.
DCHECK_LT(0, map_input_count);
@@ -743,6 +791,8 @@ const Operator* SimplifiedOperatorBuilder::StoreBuffer(BufferAccess access) {
return &cache_.k##Name##SignedSmallOperator; \
case NumberOperationHint::kSigned32: \
return &cache_.k##Name##Signed32Operator; \
+ case NumberOperationHint::kNumber: \
+ return &cache_.k##Name##NumberOperator; \
case NumberOperationHint::kNumberOrOddball: \
return &cache_.k##Name##NumberOrOddballOperator; \
} \
« no previous file with comments | « src/compiler/simplified-operator.h ('k') | src/compiler/type-hint-analyzer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698