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 |