| Index: src/compiler/simplified-operator.cc
|
| diff --git a/src/compiler/simplified-operator.cc b/src/compiler/simplified-operator.cc
|
| index 2442ceebbe088980fb80b08c96a9fe479bde3af3..ce640a4946825ebde3e7a8c48be451d4b6eac274 100644
|
| --- a/src/compiler/simplified-operator.cc
|
| +++ b/src/compiler/simplified-operator.cc
|
| @@ -278,83 +278,84 @@ CompareOperationHints::Hint CompareOperationHintOf(const Operator* op) {
|
| return OpParameter<CompareOperationHints::Hint>(op);
|
| }
|
|
|
| -#define PURE_OP_LIST(V) \
|
| - V(BooleanNot, Operator::kNoProperties, 1) \
|
| - V(NumberEqual, Operator::kCommutative, 2) \
|
| - V(NumberLessThan, Operator::kNoProperties, 2) \
|
| - V(NumberLessThanOrEqual, Operator::kNoProperties, 2) \
|
| - V(NumberAdd, Operator::kCommutative, 2) \
|
| - V(NumberSubtract, Operator::kNoProperties, 2) \
|
| - V(NumberMultiply, Operator::kCommutative, 2) \
|
| - V(NumberDivide, Operator::kNoProperties, 2) \
|
| - V(NumberModulus, Operator::kNoProperties, 2) \
|
| - V(NumberBitwiseOr, Operator::kCommutative, 2) \
|
| - V(NumberBitwiseXor, Operator::kCommutative, 2) \
|
| - V(NumberBitwiseAnd, Operator::kCommutative, 2) \
|
| - V(NumberShiftLeft, Operator::kNoProperties, 2) \
|
| - V(NumberShiftRight, Operator::kNoProperties, 2) \
|
| - V(NumberShiftRightLogical, Operator::kNoProperties, 2) \
|
| - V(NumberImul, Operator::kCommutative, 2) \
|
| - V(NumberAbs, Operator::kNoProperties, 1) \
|
| - V(NumberClz32, Operator::kNoProperties, 1) \
|
| - V(NumberCeil, Operator::kNoProperties, 1) \
|
| - V(NumberFloor, Operator::kNoProperties, 1) \
|
| - V(NumberFround, Operator::kNoProperties, 1) \
|
| - V(NumberAcos, Operator::kNoProperties, 1) \
|
| - V(NumberAcosh, Operator::kNoProperties, 1) \
|
| - V(NumberAsin, Operator::kNoProperties, 1) \
|
| - V(NumberAsinh, Operator::kNoProperties, 1) \
|
| - V(NumberAtan, Operator::kNoProperties, 1) \
|
| - V(NumberAtan2, Operator::kNoProperties, 2) \
|
| - V(NumberAtanh, Operator::kNoProperties, 1) \
|
| - V(NumberCbrt, Operator::kNoProperties, 1) \
|
| - V(NumberCos, Operator::kNoProperties, 1) \
|
| - V(NumberCosh, Operator::kNoProperties, 1) \
|
| - V(NumberExp, Operator::kNoProperties, 1) \
|
| - V(NumberExpm1, Operator::kNoProperties, 1) \
|
| - V(NumberLog, Operator::kNoProperties, 1) \
|
| - V(NumberLog1p, Operator::kNoProperties, 1) \
|
| - V(NumberLog10, Operator::kNoProperties, 1) \
|
| - V(NumberLog2, Operator::kNoProperties, 1) \
|
| - V(NumberMax, Operator::kNoProperties, 2) \
|
| - V(NumberMin, Operator::kNoProperties, 2) \
|
| - V(NumberPow, Operator::kNoProperties, 2) \
|
| - V(NumberRound, Operator::kNoProperties, 1) \
|
| - V(NumberSign, Operator::kNoProperties, 1) \
|
| - V(NumberSin, Operator::kNoProperties, 1) \
|
| - V(NumberSinh, Operator::kNoProperties, 1) \
|
| - V(NumberSqrt, Operator::kNoProperties, 1) \
|
| - V(NumberTan, Operator::kNoProperties, 1) \
|
| - V(NumberTanh, Operator::kNoProperties, 1) \
|
| - V(NumberTrunc, Operator::kNoProperties, 1) \
|
| - V(NumberToInt32, Operator::kNoProperties, 1) \
|
| - V(NumberToUint32, Operator::kNoProperties, 1) \
|
| - V(NumberSilenceNaN, Operator::kNoProperties, 1) \
|
| - V(StringFromCharCode, Operator::kNoProperties, 1) \
|
| - V(PlainPrimitiveToNumber, Operator::kNoProperties, 1) \
|
| - V(PlainPrimitiveToWord32, Operator::kNoProperties, 1) \
|
| - V(PlainPrimitiveToFloat64, Operator::kNoProperties, 1) \
|
| - V(ChangeTaggedSignedToInt32, Operator::kNoProperties, 1) \
|
| - V(ChangeTaggedToInt32, Operator::kNoProperties, 1) \
|
| - V(ChangeTaggedToUint32, Operator::kNoProperties, 1) \
|
| - V(ChangeTaggedToFloat64, Operator::kNoProperties, 1) \
|
| - V(ChangeInt31ToTaggedSigned, Operator::kNoProperties, 1) \
|
| - V(ChangeInt32ToTagged, Operator::kNoProperties, 1) \
|
| - V(ChangeUint32ToTagged, Operator::kNoProperties, 1) \
|
| - V(ChangeFloat64ToTagged, Operator::kNoProperties, 1) \
|
| - V(ChangeTaggedToBit, Operator::kNoProperties, 1) \
|
| - V(ChangeBitToTagged, Operator::kNoProperties, 1) \
|
| - V(TruncateTaggedToWord32, Operator::kNoProperties, 1) \
|
| - V(TruncateTaggedToFloat64, Operator::kNoProperties, 1) \
|
| - V(ObjectIsCallable, Operator::kNoProperties, 1) \
|
| - V(ObjectIsNumber, Operator::kNoProperties, 1) \
|
| - V(ObjectIsReceiver, Operator::kNoProperties, 1) \
|
| - V(ObjectIsSmi, Operator::kNoProperties, 1) \
|
| - V(ObjectIsString, Operator::kNoProperties, 1) \
|
| - V(ObjectIsUndetectable, Operator::kNoProperties, 1) \
|
| - V(StringEqual, Operator::kCommutative, 2) \
|
| - V(StringLessThan, Operator::kNoProperties, 2) \
|
| - V(StringLessThanOrEqual, Operator::kNoProperties, 2)
|
| +#define PURE_OP_LIST(V) \
|
| + V(BooleanNot, Operator::kNoProperties, 1, 0) \
|
| + V(NumberEqual, Operator::kCommutative, 2, 0) \
|
| + V(NumberLessThan, Operator::kNoProperties, 2, 0) \
|
| + V(NumberLessThanOrEqual, Operator::kNoProperties, 2, 0) \
|
| + V(NumberAdd, Operator::kCommutative, 2, 0) \
|
| + V(NumberSubtract, Operator::kNoProperties, 2, 0) \
|
| + V(NumberMultiply, Operator::kCommutative, 2, 0) \
|
| + V(NumberDivide, Operator::kNoProperties, 2, 0) \
|
| + V(NumberModulus, Operator::kNoProperties, 2, 0) \
|
| + V(NumberBitwiseOr, Operator::kCommutative, 2, 0) \
|
| + V(NumberBitwiseXor, Operator::kCommutative, 2, 0) \
|
| + V(NumberBitwiseAnd, Operator::kCommutative, 2, 0) \
|
| + V(NumberShiftLeft, Operator::kNoProperties, 2, 0) \
|
| + V(NumberShiftRight, Operator::kNoProperties, 2, 0) \
|
| + V(NumberShiftRightLogical, Operator::kNoProperties, 2, 0) \
|
| + V(NumberImul, Operator::kCommutative, 2, 0) \
|
| + V(NumberAbs, Operator::kNoProperties, 1, 0) \
|
| + V(NumberClz32, Operator::kNoProperties, 1, 0) \
|
| + V(NumberCeil, Operator::kNoProperties, 1, 0) \
|
| + V(NumberFloor, Operator::kNoProperties, 1, 0) \
|
| + V(NumberFround, Operator::kNoProperties, 1, 0) \
|
| + V(NumberAcos, Operator::kNoProperties, 1, 0) \
|
| + V(NumberAcosh, Operator::kNoProperties, 1, 0) \
|
| + V(NumberAsin, Operator::kNoProperties, 1, 0) \
|
| + V(NumberAsinh, Operator::kNoProperties, 1, 0) \
|
| + V(NumberAtan, Operator::kNoProperties, 1, 0) \
|
| + V(NumberAtan2, Operator::kNoProperties, 2, 0) \
|
| + V(NumberAtanh, Operator::kNoProperties, 1, 0) \
|
| + V(NumberCbrt, Operator::kNoProperties, 1, 0) \
|
| + V(NumberCos, Operator::kNoProperties, 1, 0) \
|
| + V(NumberCosh, Operator::kNoProperties, 1, 0) \
|
| + V(NumberExp, Operator::kNoProperties, 1, 0) \
|
| + V(NumberExpm1, Operator::kNoProperties, 1, 0) \
|
| + V(NumberLog, Operator::kNoProperties, 1, 0) \
|
| + V(NumberLog1p, Operator::kNoProperties, 1, 0) \
|
| + V(NumberLog10, Operator::kNoProperties, 1, 0) \
|
| + V(NumberLog2, Operator::kNoProperties, 1, 0) \
|
| + V(NumberMax, Operator::kNoProperties, 2, 0) \
|
| + V(NumberMin, Operator::kNoProperties, 2, 0) \
|
| + V(NumberPow, Operator::kNoProperties, 2, 0) \
|
| + V(NumberRound, Operator::kNoProperties, 1, 0) \
|
| + V(NumberSign, Operator::kNoProperties, 1, 0) \
|
| + V(NumberSin, Operator::kNoProperties, 1, 0) \
|
| + V(NumberSinh, Operator::kNoProperties, 1, 0) \
|
| + V(NumberSqrt, Operator::kNoProperties, 1, 0) \
|
| + V(NumberTan, Operator::kNoProperties, 1, 0) \
|
| + V(NumberTanh, Operator::kNoProperties, 1, 0) \
|
| + V(NumberTrunc, Operator::kNoProperties, 1, 0) \
|
| + V(NumberToInt32, Operator::kNoProperties, 1, 0) \
|
| + V(NumberToUint32, Operator::kNoProperties, 1, 0) \
|
| + V(NumberSilenceNaN, Operator::kNoProperties, 1, 0) \
|
| + V(StringCharCodeAt, Operator::kNoProperties, 2, 1) \
|
| + V(StringFromCharCode, Operator::kNoProperties, 1, 0) \
|
| + V(PlainPrimitiveToNumber, Operator::kNoProperties, 1, 0) \
|
| + V(PlainPrimitiveToWord32, Operator::kNoProperties, 1, 0) \
|
| + V(PlainPrimitiveToFloat64, Operator::kNoProperties, 1, 0) \
|
| + V(ChangeTaggedSignedToInt32, Operator::kNoProperties, 1, 0) \
|
| + V(ChangeTaggedToInt32, Operator::kNoProperties, 1, 0) \
|
| + V(ChangeTaggedToUint32, Operator::kNoProperties, 1, 0) \
|
| + V(ChangeTaggedToFloat64, Operator::kNoProperties, 1, 0) \
|
| + V(ChangeInt31ToTaggedSigned, Operator::kNoProperties, 1, 0) \
|
| + V(ChangeInt32ToTagged, Operator::kNoProperties, 1, 0) \
|
| + V(ChangeUint32ToTagged, Operator::kNoProperties, 1, 0) \
|
| + V(ChangeFloat64ToTagged, Operator::kNoProperties, 1, 0) \
|
| + V(ChangeTaggedToBit, Operator::kNoProperties, 1, 0) \
|
| + V(ChangeBitToTagged, Operator::kNoProperties, 1, 0) \
|
| + V(TruncateTaggedToWord32, Operator::kNoProperties, 1, 0) \
|
| + V(TruncateTaggedToFloat64, Operator::kNoProperties, 1, 0) \
|
| + V(ObjectIsCallable, Operator::kNoProperties, 1, 0) \
|
| + V(ObjectIsNumber, Operator::kNoProperties, 1, 0) \
|
| + V(ObjectIsReceiver, Operator::kNoProperties, 1, 0) \
|
| + V(ObjectIsSmi, Operator::kNoProperties, 1, 0) \
|
| + V(ObjectIsString, Operator::kNoProperties, 1, 0) \
|
| + V(ObjectIsUndetectable, Operator::kNoProperties, 1, 0) \
|
| + V(StringEqual, Operator::kCommutative, 2, 0) \
|
| + V(StringLessThan, Operator::kNoProperties, 2, 0) \
|
| + V(StringLessThanOrEqual, Operator::kNoProperties, 2, 0)
|
|
|
| #define SPECULATIVE_BINOP_LIST(V) \
|
| V(SpeculativeNumberAdd) \
|
| @@ -383,11 +384,11 @@ CompareOperationHints::Hint CompareOperationHintOf(const Operator* op) {
|
| V(CheckedTaggedToFloat64, 1, 1)
|
|
|
| struct SimplifiedOperatorGlobalCache final {
|
| -#define PURE(Name, properties, input_count) \
|
| +#define PURE(Name, properties, value_input_count, control_input_count) \
|
| struct Name##Operator final : public Operator { \
|
| Name##Operator() \
|
| : Operator(IrOpcode::k##Name, Operator::kPure | properties, #Name, \
|
| - input_count, 0, 0, 1, 0, 0) {} \
|
| + value_input_count, 0, control_input_count, 1, 0, 0) {} \
|
| }; \
|
| Name##Operator k##Name;
|
| PURE_OP_LIST(PURE)
|
| @@ -487,13 +488,9 @@ static base::LazyInstance<SimplifiedOperatorGlobalCache>::type kCache =
|
| SimplifiedOperatorBuilder::SimplifiedOperatorBuilder(Zone* zone)
|
| : cache_(kCache.Get()), zone_(zone) {}
|
|
|
| -#define GET_FROM_CACHE(Name, properties, input_count) \
|
| +#define GET_FROM_CACHE(Name, ...) \
|
| const Operator* SimplifiedOperatorBuilder::Name() { return &cache_.k##Name; }
|
| PURE_OP_LIST(GET_FROM_CACHE)
|
| -#undef GET_FROM_CACHE
|
| -
|
| -#define GET_FROM_CACHE(Name, value_input_count, value_output_count) \
|
| - const Operator* SimplifiedOperatorBuilder::Name() { return &cache_.k##Name; }
|
| CHECKED_OP_LIST(GET_FROM_CACHE)
|
| #undef GET_FROM_CACHE
|
|
|
|
|