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

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

Issue 1693833002: Remove strong mode support from binary operations. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressed comments. Created 4 years, 10 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
Index: src/compiler/js-operator.cc
diff --git a/src/compiler/js-operator.cc b/src/compiler/js-operator.cc
index bb343b5c0477c6d1f80493dc36f923c089617e47..9caf7e471317fc6c826f44aedf442775a091b3ff 100644
--- a/src/compiler/js-operator.cc
+++ b/src/compiler/js-operator.cc
@@ -52,46 +52,6 @@ ToBooleanHints ToBooleanHintsOf(Operator const* op) {
}
-bool operator==(BinaryOperationParameters const& lhs,
- BinaryOperationParameters const& rhs) {
- return lhs.language_mode() == rhs.language_mode() &&
- lhs.hints() == rhs.hints();
-}
-
-
-bool operator!=(BinaryOperationParameters const& lhs,
- BinaryOperationParameters const& rhs) {
- return !(lhs == rhs);
-}
-
-
-size_t hash_value(BinaryOperationParameters const& p) {
- return base::hash_combine(p.language_mode(), p.hints());
-}
-
-
-std::ostream& operator<<(std::ostream& os, BinaryOperationParameters const& p) {
- return os << p.language_mode() << ", " << p.hints();
-}
-
-
-BinaryOperationParameters const& BinaryOperationParametersOf(
- Operator const* op) {
- DCHECK(op->opcode() == IrOpcode::kJSBitwiseOr ||
- op->opcode() == IrOpcode::kJSBitwiseXor ||
- op->opcode() == IrOpcode::kJSBitwiseAnd ||
- op->opcode() == IrOpcode::kJSShiftLeft ||
- op->opcode() == IrOpcode::kJSShiftRight ||
- op->opcode() == IrOpcode::kJSShiftRightLogical ||
- op->opcode() == IrOpcode::kJSAdd ||
- op->opcode() == IrOpcode::kJSSubtract ||
- op->opcode() == IrOpcode::kJSMultiply ||
- op->opcode() == IrOpcode::kJSDivide ||
- op->opcode() == IrOpcode::kJSModulus);
- return OpParameter<BinaryOperationParameters>(op);
-}
-
-
bool operator==(CallConstructParameters const& lhs,
CallConstructParameters const& rhs) {
return lhs.arity() == rhs.arity() && lhs.feedback() == rhs.feedback();
@@ -414,12 +374,15 @@ const CreateLiteralParameters& CreateLiteralParametersOf(const Operator* op) {
return OpParameter<CreateLiteralParameters>(op);
}
-
#define CACHED_OP_LIST(V) \
V(Equal, Operator::kNoProperties, 2, 1) \
V(NotEqual, Operator::kNoProperties, 2, 1) \
V(StrictEqual, Operator::kNoThrow, 2, 1) \
V(StrictNotEqual, Operator::kNoThrow, 2, 1) \
+ V(LessThan, Operator::kNoProperties, 2, 1) \
+ V(GreaterThan, Operator::kNoProperties, 2, 1) \
+ V(LessThanOrEqual, Operator::kNoProperties, 2, 1) \
+ V(GreaterThanOrEqual, Operator::kNoProperties, 2, 1) \
V(ToNumber, Operator::kNoProperties, 1, 1) \
V(ToString, Operator::kNoProperties, 1, 1) \
V(ToName, Operator::kNoProperties, 1, 1) \
@@ -440,14 +403,6 @@ const CreateLiteralParameters& CreateLiteralParametersOf(const Operator* op) {
V(CreateWithContext, Operator::kNoProperties, 2, 1) \
V(CreateModuleContext, Operator::kNoProperties, 2, 1)
-
-#define CACHED_OP_LIST_WITH_LANGUAGE_MODE(V) \
- V(LessThan, Operator::kNoProperties, 2, 1) \
- V(GreaterThan, Operator::kNoProperties, 2, 1) \
- V(LessThanOrEqual, Operator::kNoProperties, 2, 1) \
- V(GreaterThanOrEqual, Operator::kNoProperties, 2, 1)
-
-
struct JSOperatorGlobalCache final {
#define CACHED(Name, properties, value_input_count, value_output_count) \
struct Name##Operator final : public Operator { \
@@ -461,25 +416,6 @@ struct JSOperatorGlobalCache final {
Name##Operator k##Name##Operator;
CACHED_OP_LIST(CACHED)
#undef CACHED
-
-
-#define CACHED_WITH_LANGUAGE_MODE(Name, properties, value_input_count, \
- value_output_count) \
- template <LanguageMode kLanguageMode> \
- struct Name##Operator final : public Operator1<LanguageMode> { \
- Name##Operator() \
- : Operator1<LanguageMode>( \
- IrOpcode::kJS##Name, properties, "JS" #Name, value_input_count, \
- Operator::ZeroIfPure(properties), \
- Operator::ZeroIfEliminatable(properties), value_output_count, \
- Operator::ZeroIfPure(properties), \
- Operator::ZeroIfNoThrow(properties), kLanguageMode) {} \
- }; \
- Name##Operator<SLOPPY> k##Name##SloppyOperator; \
- Name##Operator<STRICT> k##Name##StrictOperator; \
- Name##Operator<STRONG> k##Name##StrongOperator;
- CACHED_OP_LIST_WITH_LANGUAGE_MODE(CACHED_WITH_LANGUAGE_MODE)
-#undef CACHED_WITH_LANGUAGE_MODE
};
@@ -498,156 +434,104 @@ JSOperatorBuilder::JSOperatorBuilder(Zone* zone)
CACHED_OP_LIST(CACHED)
#undef CACHED
-
-#define CACHED_WITH_LANGUAGE_MODE(Name, properties, value_input_count, \
- value_output_count) \
- const Operator* JSOperatorBuilder::Name(LanguageMode language_mode) { \
- switch (language_mode) { \
- case SLOPPY: \
- return &cache_.k##Name##SloppyOperator; \
- case STRICT: \
- return &cache_.k##Name##StrictOperator; \
- case STRONG: \
- return &cache_.k##Name##StrongOperator; \
- default: \
- break; /* %*!%^$#@ */ \
- } \
- UNREACHABLE(); \
- return nullptr; \
- }
-CACHED_OP_LIST_WITH_LANGUAGE_MODE(CACHED_WITH_LANGUAGE_MODE)
-#undef CACHED_WITH_LANGUAGE_MODE
-
-
-const Operator* JSOperatorBuilder::BitwiseOr(LanguageMode language_mode,
- BinaryOperationHints hints) {
+const Operator* JSOperatorBuilder::BitwiseOr(BinaryOperationHints hints) {
// TODO(turbofan): Cache most important versions of this operator.
- BinaryOperationParameters parameters(language_mode, hints);
- return new (zone()) Operator1<BinaryOperationParameters>( //--
- IrOpcode::kJSBitwiseOr, Operator::kNoProperties, // opcode
- "JSBitwiseOr", // name
- 2, 1, 1, 1, 1, 2, // inputs/outputs
- parameters); // parameter
+ return new (zone()) Operator1<BinaryOperationHints>( //--
+ IrOpcode::kJSBitwiseOr, Operator::kNoProperties, // opcode
+ "JSBitwiseOr", // name
+ 2, 1, 1, 1, 1, 2, // inputs/outputs
+ hints); // parameter
}
-
-const Operator* JSOperatorBuilder::BitwiseXor(LanguageMode language_mode,
- BinaryOperationHints hints) {
+const Operator* JSOperatorBuilder::BitwiseXor(BinaryOperationHints hints) {
// TODO(turbofan): Cache most important versions of this operator.
- BinaryOperationParameters parameters(language_mode, hints);
- return new (zone()) Operator1<BinaryOperationParameters>( //--
- IrOpcode::kJSBitwiseXor, Operator::kNoProperties, // opcode
- "JSBitwiseXor", // name
- 2, 1, 1, 1, 1, 2, // inputs/outputs
- parameters); // parameter
+ return new (zone()) Operator1<BinaryOperationHints>( //--
+ IrOpcode::kJSBitwiseXor, Operator::kNoProperties, // opcode
+ "JSBitwiseXor", // name
+ 2, 1, 1, 1, 1, 2, // inputs/outputs
+ hints); // parameter
}
-
-const Operator* JSOperatorBuilder::BitwiseAnd(LanguageMode language_mode,
- BinaryOperationHints hints) {
+const Operator* JSOperatorBuilder::BitwiseAnd(BinaryOperationHints hints) {
// TODO(turbofan): Cache most important versions of this operator.
- BinaryOperationParameters parameters(language_mode, hints);
- return new (zone()) Operator1<BinaryOperationParameters>( //--
- IrOpcode::kJSBitwiseAnd, Operator::kNoProperties, // opcode
- "JSBitwiseAnd", // name
- 2, 1, 1, 1, 1, 2, // inputs/outputs
- parameters); // parameter
+ return new (zone()) Operator1<BinaryOperationHints>( //--
+ IrOpcode::kJSBitwiseAnd, Operator::kNoProperties, // opcode
+ "JSBitwiseAnd", // name
+ 2, 1, 1, 1, 1, 2, // inputs/outputs
+ hints); // parameter
}
-
-const Operator* JSOperatorBuilder::ShiftLeft(LanguageMode language_mode,
- BinaryOperationHints hints) {
+const Operator* JSOperatorBuilder::ShiftLeft(BinaryOperationHints hints) {
// TODO(turbofan): Cache most important versions of this operator.
- BinaryOperationParameters parameters(language_mode, hints);
- return new (zone()) Operator1<BinaryOperationParameters>( //--
- IrOpcode::kJSShiftLeft, Operator::kNoProperties, // opcode
- "JSShiftLeft", // name
- 2, 1, 1, 1, 1, 2, // inputs/outputs
- parameters); // parameter
+ return new (zone()) Operator1<BinaryOperationHints>( //--
+ IrOpcode::kJSShiftLeft, Operator::kNoProperties, // opcode
+ "JSShiftLeft", // name
+ 2, 1, 1, 1, 1, 2, // inputs/outputs
+ hints); // parameter
}
-
-const Operator* JSOperatorBuilder::ShiftRight(LanguageMode language_mode,
- BinaryOperationHints hints) {
+const Operator* JSOperatorBuilder::ShiftRight(BinaryOperationHints hints) {
// TODO(turbofan): Cache most important versions of this operator.
- BinaryOperationParameters parameters(language_mode, hints);
- return new (zone()) Operator1<BinaryOperationParameters>( //--
- IrOpcode::kJSShiftRight, Operator::kNoProperties, // opcode
- "JSShiftRight", // name
- 2, 1, 1, 1, 1, 2, // inputs/outputs
- parameters); // parameter
+ return new (zone()) Operator1<BinaryOperationHints>( //--
+ IrOpcode::kJSShiftRight, Operator::kNoProperties, // opcode
+ "JSShiftRight", // name
+ 2, 1, 1, 1, 1, 2, // inputs/outputs
+ hints); // parameter
}
-
const Operator* JSOperatorBuilder::ShiftRightLogical(
- LanguageMode language_mode, BinaryOperationHints hints) {
+ BinaryOperationHints hints) {
// TODO(turbofan): Cache most important versions of this operator.
- BinaryOperationParameters parameters(language_mode, hints);
- return new (zone()) Operator1<BinaryOperationParameters>( //--
+ return new (zone()) Operator1<BinaryOperationHints>( //--
IrOpcode::kJSShiftRightLogical, Operator::kNoProperties, // opcode
"JSShiftRightLogical", // name
2, 1, 1, 1, 1, 2, // inputs/outputs
- parameters); // parameter
+ hints); // parameter
}
-
-const Operator* JSOperatorBuilder::Add(LanguageMode language_mode,
- BinaryOperationHints hints) {
+const Operator* JSOperatorBuilder::Add(BinaryOperationHints hints) {
// TODO(turbofan): Cache most important versions of this operator.
- BinaryOperationParameters parameters(language_mode, hints);
- return new (zone()) Operator1<BinaryOperationParameters>( //--
- IrOpcode::kJSAdd, Operator::kNoProperties, // opcode
- "JSAdd", // name
- 2, 1, 1, 1, 1, 2, // inputs/outputs
- parameters); // parameter
+ return new (zone()) Operator1<BinaryOperationHints>( //--
+ IrOpcode::kJSAdd, Operator::kNoProperties, // opcode
+ "JSAdd", // name
+ 2, 1, 1, 1, 1, 2, // inputs/outputs
+ hints); // parameter
}
-
-const Operator* JSOperatorBuilder::Subtract(LanguageMode language_mode,
- BinaryOperationHints hints) {
+const Operator* JSOperatorBuilder::Subtract(BinaryOperationHints hints) {
// TODO(turbofan): Cache most important versions of this operator.
- BinaryOperationParameters parameters(language_mode, hints);
- return new (zone()) Operator1<BinaryOperationParameters>( //--
- IrOpcode::kJSSubtract, Operator::kNoProperties, // opcode
- "JSSubtract", // name
- 2, 1, 1, 1, 1, 2, // inputs/outputs
- parameters); // parameter
+ return new (zone()) Operator1<BinaryOperationHints>( //--
+ IrOpcode::kJSSubtract, Operator::kNoProperties, // opcode
+ "JSSubtract", // name
+ 2, 1, 1, 1, 1, 2, // inputs/outputs
+ hints); // parameter
}
-
-const Operator* JSOperatorBuilder::Multiply(LanguageMode language_mode,
- BinaryOperationHints hints) {
+const Operator* JSOperatorBuilder::Multiply(BinaryOperationHints hints) {
// TODO(turbofan): Cache most important versions of this operator.
- BinaryOperationParameters parameters(language_mode, hints);
- return new (zone()) Operator1<BinaryOperationParameters>( //--
- IrOpcode::kJSMultiply, Operator::kNoProperties, // opcode
- "JSMultiply", // name
- 2, 1, 1, 1, 1, 2, // inputs/outputs
- parameters); // parameter
+ return new (zone()) Operator1<BinaryOperationHints>( //--
+ IrOpcode::kJSMultiply, Operator::kNoProperties, // opcode
+ "JSMultiply", // name
+ 2, 1, 1, 1, 1, 2, // inputs/outputs
+ hints); // parameter
}
-
-const Operator* JSOperatorBuilder::Divide(LanguageMode language_mode,
- BinaryOperationHints hints) {
+const Operator* JSOperatorBuilder::Divide(BinaryOperationHints hints) {
// TODO(turbofan): Cache most important versions of this operator.
- BinaryOperationParameters parameters(language_mode, hints);
- return new (zone()) Operator1<BinaryOperationParameters>( //--
- IrOpcode::kJSDivide, Operator::kNoProperties, // opcode
- "JSDivide", // name
- 2, 1, 1, 1, 1, 2, // inputs/outputs
- parameters); // parameter
+ return new (zone()) Operator1<BinaryOperationHints>( //--
+ IrOpcode::kJSDivide, Operator::kNoProperties, // opcode
+ "JSDivide", // name
+ 2, 1, 1, 1, 1, 2, // inputs/outputs
+ hints); // parameter
}
-
-const Operator* JSOperatorBuilder::Modulus(LanguageMode language_mode,
- BinaryOperationHints hints) {
+const Operator* JSOperatorBuilder::Modulus(BinaryOperationHints hints) {
// TODO(turbofan): Cache most important versions of this operator.
- BinaryOperationParameters parameters(language_mode, hints);
- return new (zone()) Operator1<BinaryOperationParameters>( //--
- IrOpcode::kJSModulus, Operator::kNoProperties, // opcode
- "JSModulus", // name
- 2, 1, 1, 1, 1, 2, // inputs/outputs
- parameters); // parameter
+ return new (zone()) Operator1<BinaryOperationHints>( //--
+ IrOpcode::kJSModulus, Operator::kNoProperties, // opcode
+ "JSModulus", // name
+ 2, 1, 1, 1, 1, 2, // inputs/outputs
+ hints); // parameter
}

Powered by Google App Engine
This is Rietveld 408576698