| 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
|
| }
|
|
|
|
|
|
|