diff options
Diffstat (limited to 'deps/v8/test/unittests/compiler/node-test-utils.cc')
-rw-r--r-- | deps/v8/test/unittests/compiler/node-test-utils.cc | 458 |
1 files changed, 246 insertions, 212 deletions
diff --git a/deps/v8/test/unittests/compiler/node-test-utils.cc b/deps/v8/test/unittests/compiler/node-test-utils.cc index 6e5d39f68d..5620b8bec1 100644 --- a/deps/v8/test/unittests/compiler/node-test-utils.cc +++ b/deps/v8/test/unittests/compiler/node-test-utils.cc @@ -612,49 +612,6 @@ class IsEffectPhiMatcher final : public NodeMatcher { }; -class IsEffectSetMatcher final : public NodeMatcher { - public: - IsEffectSetMatcher(const Matcher<Node*>& effect0_matcher, - const Matcher<Node*>& effect1_matcher) - : NodeMatcher(IrOpcode::kEffectSet), - effect0_matcher_(effect0_matcher), - effect1_matcher_(effect1_matcher) {} - - void DescribeTo(std::ostream* os) const final { - NodeMatcher::DescribeTo(os); - *os << "), effect0 ("; - effect0_matcher_.DescribeTo(os); - *os << ") and effect1 ("; - effect1_matcher_.DescribeTo(os); - *os << ")"; - } - - bool MatchAndExplain(Node* node, MatchResultListener* listener) const final { - if (!NodeMatcher::MatchAndExplain(node, listener)) return false; - - Node* effect0 = NodeProperties::GetEffectInput(node, 0); - Node* effect1 = NodeProperties::GetEffectInput(node, 1); - - { - // Try matching in the reverse order first. - StringMatchResultListener value_listener; - if (effect0_matcher_.MatchAndExplain(effect1, &value_listener) && - effect1_matcher_.MatchAndExplain(effect0, &value_listener)) { - return true; - } - } - - return PrintMatchAndExplain(effect0, "effect0", effect0_matcher_, - listener) && - PrintMatchAndExplain(effect1, "effect1", effect1_matcher_, listener); - } - - private: - const Matcher<Node*> effect0_matcher_; - const Matcher<Node*> effect1_matcher_; -}; - - class IsProjectionMatcher final : public NodeMatcher { public: IsProjectionMatcher(const Matcher<size_t>& index_matcher, @@ -843,6 +800,44 @@ class IsReferenceEqualMatcher final : public NodeMatcher { const Matcher<Node*> rhs_matcher_; }; +class IsSpeculativeBinopMatcher final : public NodeMatcher { + public: + IsSpeculativeBinopMatcher(IrOpcode::Value opcode, + const Matcher<NumberOperationHint>& hint_matcher, + const Matcher<Node*>& lhs_matcher, + const Matcher<Node*>& rhs_matcher, + const Matcher<Node*>& effect_matcher, + const Matcher<Node*>& control_matcher) + : NodeMatcher(opcode), + hint_matcher_(hint_matcher), + lhs_matcher_(lhs_matcher), + rhs_matcher_(rhs_matcher), + effect_matcher_(effect_matcher), + control_matcher_(control_matcher) {} + + bool MatchAndExplain(Node* node, MatchResultListener* listener) const final { + return (NodeMatcher::MatchAndExplain(node, listener) && + // TODO(bmeurer): The type parameter is currently ignored. + PrintMatchAndExplain(OpParameter<NumberOperationHint>(node->op()), + "hints", hint_matcher_, listener) && + PrintMatchAndExplain(NodeProperties::GetValueInput(node, 0), "lhs", + lhs_matcher_, listener) && + PrintMatchAndExplain(NodeProperties::GetValueInput(node, 1), "rhs", + rhs_matcher_, listener) && + PrintMatchAndExplain(NodeProperties::GetEffectInput(node), "effect", + effect_matcher_, listener) && + PrintMatchAndExplain(NodeProperties::GetControlInput(node), + "control", control_matcher_, listener)); + } + + private: + const Matcher<NumberOperationHint> hint_matcher_; + const Matcher<Type*> type_matcher_; + const Matcher<Node*> lhs_matcher_; + const Matcher<Node*> rhs_matcher_; + const Matcher<Node*> effect_matcher_; + const Matcher<Node*> control_matcher_; +}; class IsAllocateMatcher final : public NodeMatcher { public: @@ -1203,132 +1198,140 @@ class IsStoreElementMatcher final : public NodeMatcher { const Matcher<Node*> control_matcher_; }; - -class IsLoadMatcher final : public NodeMatcher { - public: - IsLoadMatcher(const Matcher<LoadRepresentation>& rep_matcher, - const Matcher<Node*>& base_matcher, - const Matcher<Node*>& index_matcher, - const Matcher<Node*>& effect_matcher, - const Matcher<Node*>& control_matcher) - : NodeMatcher(IrOpcode::kLoad), - rep_matcher_(rep_matcher), - base_matcher_(base_matcher), - index_matcher_(index_matcher), - effect_matcher_(effect_matcher), - control_matcher_(control_matcher) {} - - void DescribeTo(std::ostream* os) const final { - NodeMatcher::DescribeTo(os); - *os << " whose rep ("; - rep_matcher_.DescribeTo(os); - *os << "), base ("; - base_matcher_.DescribeTo(os); - *os << "), index ("; - index_matcher_.DescribeTo(os); - *os << "), effect ("; - effect_matcher_.DescribeTo(os); - *os << ") and control ("; - control_matcher_.DescribeTo(os); - *os << ")"; - } - - bool MatchAndExplain(Node* node, MatchResultListener* listener) const final { - Node* effect_node = nullptr; - Node* control_node = nullptr; - if (NodeProperties::FirstEffectIndex(node) < node->InputCount()) { - effect_node = NodeProperties::GetEffectInput(node); - } - if (NodeProperties::FirstControlIndex(node) < node->InputCount()) { - control_node = NodeProperties::GetControlInput(node); - } - return (NodeMatcher::MatchAndExplain(node, listener) && - PrintMatchAndExplain(OpParameter<LoadRepresentation>(node), "rep", - rep_matcher_, listener) && - PrintMatchAndExplain(NodeProperties::GetValueInput(node, 0), "base", - base_matcher_, listener) && - PrintMatchAndExplain(NodeProperties::GetValueInput(node, 1), - "index", index_matcher_, listener) && - PrintMatchAndExplain(effect_node, "effect", effect_matcher_, - listener) && - PrintMatchAndExplain(control_node, "control", control_matcher_, - listener)); - } - - private: - const Matcher<LoadRepresentation> rep_matcher_; - const Matcher<Node*> base_matcher_; - const Matcher<Node*> index_matcher_; - const Matcher<Node*> effect_matcher_; - const Matcher<Node*> control_matcher_; -}; - - -class IsStoreMatcher final : public NodeMatcher { - public: - IsStoreMatcher(const Matcher<StoreRepresentation>& rep_matcher, - const Matcher<Node*>& base_matcher, - const Matcher<Node*>& index_matcher, - const Matcher<Node*>& value_matcher, - const Matcher<Node*>& effect_matcher, - const Matcher<Node*>& control_matcher) - : NodeMatcher(IrOpcode::kStore), - rep_matcher_(rep_matcher), - base_matcher_(base_matcher), - index_matcher_(index_matcher), - value_matcher_(value_matcher), - effect_matcher_(effect_matcher), - control_matcher_(control_matcher) {} - - void DescribeTo(std::ostream* os) const final { - NodeMatcher::DescribeTo(os); - *os << " whose rep ("; - rep_matcher_.DescribeTo(os); - *os << "), base ("; - base_matcher_.DescribeTo(os); - *os << "), index ("; - index_matcher_.DescribeTo(os); - *os << "), value ("; - value_matcher_.DescribeTo(os); - *os << "), effect ("; - effect_matcher_.DescribeTo(os); - *os << ") and control ("; - control_matcher_.DescribeTo(os); - *os << ")"; - } - - bool MatchAndExplain(Node* node, MatchResultListener* listener) const final { - Node* effect_node = nullptr; - Node* control_node = nullptr; - if (NodeProperties::FirstEffectIndex(node) < node->InputCount()) { - effect_node = NodeProperties::GetEffectInput(node); - } - if (NodeProperties::FirstControlIndex(node) < node->InputCount()) { - control_node = NodeProperties::GetControlInput(node); - } - return (NodeMatcher::MatchAndExplain(node, listener) && - PrintMatchAndExplain(OpParameter<StoreRepresentation>(node), "rep", - rep_matcher_, listener) && - PrintMatchAndExplain(NodeProperties::GetValueInput(node, 0), "base", - base_matcher_, listener) && - PrintMatchAndExplain(NodeProperties::GetValueInput(node, 1), - "index", index_matcher_, listener) && - PrintMatchAndExplain(NodeProperties::GetValueInput(node, 2), - "value", value_matcher_, listener) && - PrintMatchAndExplain(effect_node, "effect", effect_matcher_, - listener) && - PrintMatchAndExplain(control_node, "control", control_matcher_, - listener)); - } - - private: - const Matcher<StoreRepresentation> rep_matcher_; - const Matcher<Node*> base_matcher_; - const Matcher<Node*> index_matcher_; - const Matcher<Node*> value_matcher_; - const Matcher<Node*> effect_matcher_; - const Matcher<Node*> control_matcher_; -}; +#define LOAD_MATCHER(kLoad) \ + class Is##kLoad##Matcher final : public NodeMatcher { \ + public: \ + Is##kLoad##Matcher(const Matcher<kLoad##Representation>& rep_matcher, \ + const Matcher<Node*>& base_matcher, \ + const Matcher<Node*>& index_matcher, \ + const Matcher<Node*>& effect_matcher, \ + const Matcher<Node*>& control_matcher) \ + : NodeMatcher(IrOpcode::k##kLoad), \ + rep_matcher_(rep_matcher), \ + base_matcher_(base_matcher), \ + index_matcher_(index_matcher), \ + effect_matcher_(effect_matcher), \ + control_matcher_(control_matcher) {} \ + \ + void DescribeTo(std::ostream* os) const final { \ + NodeMatcher::DescribeTo(os); \ + *os << " whose rep ("; \ + rep_matcher_.DescribeTo(os); \ + *os << "), base ("; \ + base_matcher_.DescribeTo(os); \ + *os << "), index ("; \ + index_matcher_.DescribeTo(os); \ + *os << "), effect ("; \ + effect_matcher_.DescribeTo(os); \ + *os << ") and control ("; \ + control_matcher_.DescribeTo(os); \ + *os << ")"; \ + } \ + \ + bool MatchAndExplain(Node* node, \ + MatchResultListener* listener) const final { \ + Node* effect_node = nullptr; \ + Node* control_node = nullptr; \ + if (NodeProperties::FirstEffectIndex(node) < node->InputCount()) { \ + effect_node = NodeProperties::GetEffectInput(node); \ + } \ + if (NodeProperties::FirstControlIndex(node) < node->InputCount()) { \ + control_node = NodeProperties::GetControlInput(node); \ + } \ + return (NodeMatcher::MatchAndExplain(node, listener) && \ + PrintMatchAndExplain(OpParameter<kLoad##Representation>(node), \ + "rep", rep_matcher_, listener) && \ + PrintMatchAndExplain(NodeProperties::GetValueInput(node, 0), \ + "base", base_matcher_, listener) && \ + PrintMatchAndExplain(NodeProperties::GetValueInput(node, 1), \ + "index", index_matcher_, listener) && \ + PrintMatchAndExplain(effect_node, "effect", effect_matcher_, \ + listener) && \ + PrintMatchAndExplain(control_node, "control", control_matcher_, \ + listener)); \ + } \ + \ + private: \ + const Matcher<kLoad##Representation> rep_matcher_; \ + const Matcher<Node*> base_matcher_; \ + const Matcher<Node*> index_matcher_; \ + const Matcher<Node*> effect_matcher_; \ + const Matcher<Node*> control_matcher_; \ + }; + +LOAD_MATCHER(Load) +LOAD_MATCHER(UnalignedLoad) + +#define STORE_MATCHER(kStore) \ + class Is##kStore##Matcher final : public NodeMatcher { \ + public: \ + Is##kStore##Matcher(const Matcher<kStore##Representation>& rep_matcher, \ + const Matcher<Node*>& base_matcher, \ + const Matcher<Node*>& index_matcher, \ + const Matcher<Node*>& value_matcher, \ + const Matcher<Node*>& effect_matcher, \ + const Matcher<Node*>& control_matcher) \ + : NodeMatcher(IrOpcode::k##kStore), \ + rep_matcher_(rep_matcher), \ + base_matcher_(base_matcher), \ + index_matcher_(index_matcher), \ + value_matcher_(value_matcher), \ + effect_matcher_(effect_matcher), \ + control_matcher_(control_matcher) {} \ + \ + void DescribeTo(std::ostream* os) const final { \ + NodeMatcher::DescribeTo(os); \ + *os << " whose rep ("; \ + rep_matcher_.DescribeTo(os); \ + *os << "), base ("; \ + base_matcher_.DescribeTo(os); \ + *os << "), index ("; \ + index_matcher_.DescribeTo(os); \ + *os << "), value ("; \ + value_matcher_.DescribeTo(os); \ + *os << "), effect ("; \ + effect_matcher_.DescribeTo(os); \ + *os << ") and control ("; \ + control_matcher_.DescribeTo(os); \ + *os << ")"; \ + } \ + \ + bool MatchAndExplain(Node* node, \ + MatchResultListener* listener) const final { \ + Node* effect_node = nullptr; \ + Node* control_node = nullptr; \ + if (NodeProperties::FirstEffectIndex(node) < node->InputCount()) { \ + effect_node = NodeProperties::GetEffectInput(node); \ + } \ + if (NodeProperties::FirstControlIndex(node) < node->InputCount()) { \ + control_node = NodeProperties::GetControlInput(node); \ + } \ + return (NodeMatcher::MatchAndExplain(node, listener) && \ + PrintMatchAndExplain(OpParameter<kStore##Representation>(node), \ + "rep", rep_matcher_, listener) && \ + PrintMatchAndExplain(NodeProperties::GetValueInput(node, 0), \ + "base", base_matcher_, listener) && \ + PrintMatchAndExplain(NodeProperties::GetValueInput(node, 1), \ + "index", index_matcher_, listener) && \ + PrintMatchAndExplain(NodeProperties::GetValueInput(node, 2), \ + "value", value_matcher_, listener) && \ + PrintMatchAndExplain(effect_node, "effect", effect_matcher_, \ + listener) && \ + PrintMatchAndExplain(control_node, "control", control_matcher_, \ + listener)); \ + } \ + \ + private: \ + const Matcher<kStore##Representation> rep_matcher_; \ + const Matcher<Node*> base_matcher_; \ + const Matcher<Node*> index_matcher_; \ + const Matcher<Node*> value_matcher_; \ + const Matcher<Node*> effect_matcher_; \ + const Matcher<Node*> control_matcher_; \ + }; + +STORE_MATCHER(Store) +STORE_MATCHER(UnalignedStore) class IsStackSlotMatcher final : public NodeMatcher { public: @@ -1352,32 +1355,6 @@ class IsStackSlotMatcher final : public NodeMatcher { const Matcher<MachineRepresentation> rep_matcher_; }; -class IsGuardMatcher final : public NodeMatcher { - public: - IsGuardMatcher(const Matcher<Type*>& type_matcher, - const Matcher<Node*>& value_matcher, - const Matcher<Node*>& control_matcher) - : NodeMatcher(IrOpcode::kGuard), - type_matcher_(type_matcher), - value_matcher_(value_matcher), - control_matcher_(control_matcher) {} - - bool MatchAndExplain(Node* node, MatchResultListener* listener) const final { - return (NodeMatcher::MatchAndExplain(node, listener) && - PrintMatchAndExplain(OpParameter<Type*>(node->op()), "type", - type_matcher_, listener) && - PrintMatchAndExplain(NodeProperties::GetValueInput(node, 0), - "value", value_matcher_, listener) && - PrintMatchAndExplain(NodeProperties::GetControlInput(node, 0), - "control", control_matcher_, listener)); - } - - private: - const Matcher<Type*> type_matcher_; - const Matcher<Node*> value_matcher_; - const Matcher<Node*> control_matcher_; -}; - class IsToNumberMatcher final : public NodeMatcher { public: IsToNumberMatcher(const Matcher<Node*>& base_matcher, @@ -1818,12 +1795,6 @@ Matcher<Node*> IsEffectPhi(const Matcher<Node*>& effect0_matcher, } -Matcher<Node*> IsEffectSet(const Matcher<Node*>& effect0_matcher, - const Matcher<Node*>& effect1_matcher) { - return MakeMatcher(new IsEffectSetMatcher(effect0_matcher, effect1_matcher)); -} - - Matcher<Node*> IsProjection(const Matcher<size_t>& index_matcher, const Matcher<Node*>& base_matcher) { return MakeMatcher(new IsProjectionMatcher(index_matcher, base_matcher)); @@ -2064,13 +2035,6 @@ Matcher<Node*> IsTailCall( effect_matcher, control_matcher)); } -Matcher<Node*> IsGuard(const Matcher<Type*>& type_matcher, - const Matcher<Node*>& value_matcher, - const Matcher<Node*>& control_matcher) { - return MakeMatcher( - new IsGuardMatcher(type_matcher, value_matcher, control_matcher)); -} - Matcher<Node*> IsReferenceEqual(const Matcher<Type*>& type_matcher, const Matcher<Node*>& lhs_matcher, const Matcher<Node*>& rhs_matcher) { @@ -2078,6 +2042,18 @@ Matcher<Node*> IsReferenceEqual(const Matcher<Type*>& type_matcher, new IsReferenceEqualMatcher(type_matcher, lhs_matcher, rhs_matcher)); } +#define DEFINE_SPECULATIVE_BINOP_MATCHER(opcode) \ + Matcher<Node*> Is##opcode(const Matcher<NumberOperationHint>& hint_matcher, \ + const Matcher<Node*>& lhs_matcher, \ + const Matcher<Node*>& rhs_matcher, \ + const Matcher<Node*>& effect_matcher, \ + const Matcher<Node*>& control_matcher) { \ + return MakeMatcher(new IsSpeculativeBinopMatcher( \ + IrOpcode::k##opcode, hint_matcher, lhs_matcher, rhs_matcher, \ + effect_matcher, control_matcher)); \ + } +SPECULATIVE_BINOPS(DEFINE_SPECULATIVE_BINOP_MATCHER); +#undef DEFINE_SPECULATIVE_BINOP_MATCHER Matcher<Node*> IsAllocate(const Matcher<Node*>& size_matcher, const Matcher<Node*>& effect_matcher, @@ -2154,7 +2130,6 @@ Matcher<Node*> IsStoreElement(const Matcher<ElementAccess>& access_matcher, effect_matcher, control_matcher)); } - Matcher<Node*> IsLoad(const Matcher<LoadRepresentation>& rep_matcher, const Matcher<Node*>& base_matcher, const Matcher<Node*>& index_matcher, @@ -2164,6 +2139,15 @@ Matcher<Node*> IsLoad(const Matcher<LoadRepresentation>& rep_matcher, effect_matcher, control_matcher)); } +Matcher<Node*> IsUnalignedLoad( + const Matcher<UnalignedLoadRepresentation>& rep_matcher, + const Matcher<Node*>& base_matcher, const Matcher<Node*>& index_matcher, + const Matcher<Node*>& effect_matcher, + const Matcher<Node*>& control_matcher) { + return MakeMatcher(new IsUnalignedLoadMatcher(rep_matcher, base_matcher, + index_matcher, effect_matcher, + control_matcher)); +} Matcher<Node*> IsStore(const Matcher<StoreRepresentation>& rep_matcher, const Matcher<Node*>& base_matcher, @@ -2176,6 +2160,16 @@ Matcher<Node*> IsStore(const Matcher<StoreRepresentation>& rep_matcher, effect_matcher, control_matcher)); } +Matcher<Node*> IsUnalignedStore( + const Matcher<UnalignedStoreRepresentation>& rep_matcher, + const Matcher<Node*>& base_matcher, const Matcher<Node*>& index_matcher, + const Matcher<Node*>& value_matcher, const Matcher<Node*>& effect_matcher, + const Matcher<Node*>& control_matcher) { + return MakeMatcher(new IsUnalignedStoreMatcher( + rep_matcher, base_matcher, index_matcher, value_matcher, effect_matcher, + control_matcher)); +} + Matcher<Node*> IsStackSlot(const Matcher<MachineRepresentation>& rep_matcher) { return MakeMatcher(new IsStackSlotMatcher(rep_matcher)); } @@ -2204,6 +2198,10 @@ Matcher<Node*> IsLoadFramePointer() { return MakeMatcher(new NodeMatcher(IrOpcode::kLoadFramePointer)); } +Matcher<Node*> IsLoadParentFramePointer() { + return MakeMatcher(new NodeMatcher(IrOpcode::kLoadParentFramePointer)); +} + #define IS_QUADOP_MATCHER(Name) \ Matcher<Node*> Is##Name( \ const Matcher<Node*>& a_matcher, const Matcher<Node*>& b_matcher, \ @@ -2242,6 +2240,10 @@ IS_BINOP_MATCHER(NumberShiftLeft) IS_BINOP_MATCHER(NumberShiftRight) IS_BINOP_MATCHER(NumberShiftRightLogical) IS_BINOP_MATCHER(NumberImul) +IS_BINOP_MATCHER(NumberAtan2) +IS_BINOP_MATCHER(NumberMax) +IS_BINOP_MATCHER(NumberMin) +IS_BINOP_MATCHER(NumberPow) IS_BINOP_MATCHER(Word32And) IS_BINOP_MATCHER(Word32Or) IS_BINOP_MATCHER(Word32Xor) @@ -2256,6 +2258,7 @@ IS_BINOP_MATCHER(Word64Sar) IS_BINOP_MATCHER(Word64Shl) IS_BINOP_MATCHER(Word64Equal) IS_BINOP_MATCHER(Int32AddWithOverflow) +IS_BINOP_MATCHER(Int32SubWithOverflow) IS_BINOP_MATCHER(Int32Add) IS_BINOP_MATCHER(Int32Sub) IS_BINOP_MATCHER(Int32Mul) @@ -2266,8 +2269,6 @@ IS_BINOP_MATCHER(Uint32LessThanOrEqual) IS_BINOP_MATCHER(Int64Add) IS_BINOP_MATCHER(Int64Sub) IS_BINOP_MATCHER(JSAdd) -IS_BINOP_MATCHER(Float32Max) -IS_BINOP_MATCHER(Float32Min) IS_BINOP_MATCHER(Float32Equal) IS_BINOP_MATCHER(Float32LessThan) IS_BINOP_MATCHER(Float32LessThanOrEqual) @@ -2284,6 +2285,7 @@ IS_BINOP_MATCHER(Float64InsertHighWord32) return MakeMatcher(new IsUnopMatcher(IrOpcode::k##Name, input_matcher)); \ } IS_UNOP_MATCHER(BooleanNot) +IS_UNOP_MATCHER(TruncateFloat64ToWord32) IS_UNOP_MATCHER(ChangeFloat64ToInt32) IS_UNOP_MATCHER(ChangeFloat64ToUint32) IS_UNOP_MATCHER(ChangeInt32ToFloat64) @@ -2291,23 +2293,55 @@ IS_UNOP_MATCHER(ChangeInt32ToInt64) IS_UNOP_MATCHER(ChangeUint32ToFloat64) IS_UNOP_MATCHER(ChangeUint32ToUint64) IS_UNOP_MATCHER(TruncateFloat64ToFloat32) -IS_UNOP_MATCHER(TruncateFloat64ToInt32) IS_UNOP_MATCHER(TruncateInt64ToInt32) IS_UNOP_MATCHER(Float32Abs) +IS_UNOP_MATCHER(Float32Neg) IS_UNOP_MATCHER(Float64Abs) +IS_UNOP_MATCHER(Float64Neg) IS_UNOP_MATCHER(Float64Sqrt) IS_UNOP_MATCHER(Float64RoundDown) IS_UNOP_MATCHER(Float64RoundTruncate) IS_UNOP_MATCHER(Float64RoundTiesAway) IS_UNOP_MATCHER(Float64ExtractLowWord32) IS_UNOP_MATCHER(Float64ExtractHighWord32) +IS_UNOP_MATCHER(NumberAbs) +IS_UNOP_MATCHER(NumberAcos) +IS_UNOP_MATCHER(NumberAcosh) +IS_UNOP_MATCHER(NumberAsin) +IS_UNOP_MATCHER(NumberAsinh) +IS_UNOP_MATCHER(NumberAtan) +IS_UNOP_MATCHER(NumberAtanh) +IS_UNOP_MATCHER(NumberCeil) +IS_UNOP_MATCHER(NumberClz32) +IS_UNOP_MATCHER(NumberCbrt) +IS_UNOP_MATCHER(NumberCos) +IS_UNOP_MATCHER(NumberCosh) +IS_UNOP_MATCHER(NumberExp) +IS_UNOP_MATCHER(NumberExpm1) +IS_UNOP_MATCHER(NumberFloor) +IS_UNOP_MATCHER(NumberFround) +IS_UNOP_MATCHER(NumberLog) +IS_UNOP_MATCHER(NumberLog1p) +IS_UNOP_MATCHER(NumberLog10) +IS_UNOP_MATCHER(NumberLog2) +IS_UNOP_MATCHER(NumberRound) +IS_UNOP_MATCHER(NumberSign) +IS_UNOP_MATCHER(NumberSin) +IS_UNOP_MATCHER(NumberSinh) +IS_UNOP_MATCHER(NumberSqrt) +IS_UNOP_MATCHER(NumberTan) +IS_UNOP_MATCHER(NumberTanh) +IS_UNOP_MATCHER(NumberTrunc) IS_UNOP_MATCHER(NumberToInt32) IS_UNOP_MATCHER(NumberToUint32) +IS_UNOP_MATCHER(PlainPrimitiveToNumber) IS_UNOP_MATCHER(ObjectIsReceiver) IS_UNOP_MATCHER(ObjectIsSmi) +IS_UNOP_MATCHER(StringFromCharCode) IS_UNOP_MATCHER(Word32Clz) IS_UNOP_MATCHER(Word32Ctz) IS_UNOP_MATCHER(Word32Popcnt) +IS_UNOP_MATCHER(Word32ReverseBytes) #undef IS_UNOP_MATCHER } // namespace compiler |