| Index: test/unittests/compiler/node-test-utils.cc
|
| diff --git a/test/unittests/compiler/node-test-utils.cc b/test/unittests/compiler/node-test-utils.cc
|
| index 713a4bc440889231b58a93f42e8490898c1442b7..97f31e9b5d6c711792b394aa69c9b840f429b548 100644
|
| --- a/test/unittests/compiler/node-test-utils.cc
|
| +++ b/test/unittests/compiler/node-test-utils.cc
|
| @@ -1406,6 +1406,122 @@ class IsUnopMatcher final : public NodeMatcher {
|
| };
|
|
|
|
|
| +class IsJSBinopMatcher final : public NodeMatcher {
|
| + public:
|
| + IsJSBinopMatcher(IrOpcode::Value opcode, const Matcher<Node*>& lhs_matcher,
|
| + const Matcher<Node*>& rhs_matcher,
|
| + const Matcher<Node*>& effect_matcher,
|
| + const Matcher<Node*>& control_matcher)
|
| + : NodeMatcher(opcode),
|
| + lhs_matcher_(lhs_matcher),
|
| + rhs_matcher_(rhs_matcher),
|
| + effect_matcher_(effect_matcher),
|
| + control_matcher_(control_matcher) {}
|
| +
|
| + void DescribeTo(std::ostream* os) const final {
|
| + NodeMatcher::DescribeTo(os);
|
| + *os << " whose lhs (";
|
| + lhs_matcher_.DescribeTo(os);
|
| + *os << "), and rhs (";
|
| + rhs_matcher_.DescribeTo(os);
|
| + *os << "), and effect (";
|
| + rhs_matcher_.DescribeTo(os);
|
| + *os << "), and control (";
|
| + rhs_matcher_.DescribeTo(os);
|
| + *os << ")";
|
| + }
|
| +
|
| + bool MatchAndExplain(Node* node, MatchResultListener* listener) const final {
|
| + return (NodeMatcher::MatchAndExplain(node, 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<Node*> lhs_matcher_;
|
| + const Matcher<Node*> rhs_matcher_;
|
| + const Matcher<Node*> effect_matcher_;
|
| + const Matcher<Node*> control_matcher_;
|
| +};
|
| +
|
| +
|
| +class IsUnopWithEffectMatcher final : public NodeMatcher {
|
| + public:
|
| + IsUnopWithEffectMatcher(IrOpcode::Value opcode,
|
| + const Matcher<Node*>& input_matcher,
|
| + const Matcher<Node*>& effect_matcher)
|
| + : NodeMatcher(opcode),
|
| + input_matcher_(input_matcher),
|
| + effect_matcher_(effect_matcher) {}
|
| +
|
| + void DescribeTo(std::ostream* os) const final {
|
| + NodeMatcher::DescribeTo(os);
|
| + *os << " whose input (";
|
| + input_matcher_.DescribeTo(os);
|
| + *os << "), effect (";
|
| + effect_matcher_.DescribeTo(os);
|
| + *os << ")";
|
| + }
|
| +
|
| + bool MatchAndExplain(Node* node, MatchResultListener* listener) const final {
|
| + return (NodeMatcher::MatchAndExplain(node, listener) &&
|
| + PrintMatchAndExplain(NodeProperties::GetValueInput(node, 0),
|
| + "input", input_matcher_, listener) &&
|
| + PrintMatchAndExplain(NodeProperties::GetEffectInput(node), "effect",
|
| + effect_matcher_, listener));
|
| + }
|
| +
|
| + private:
|
| + const Matcher<Node*> input_matcher_;
|
| + const Matcher<Node*> effect_matcher_;
|
| +};
|
| +
|
| +
|
| +class IsUnopEffectControlMatcher final : public NodeMatcher {
|
| + public:
|
| + IsUnopEffectControlMatcher(IrOpcode::Value opcode,
|
| + const Matcher<Node*>& input_matcher,
|
| + const Matcher<Node*>& effect_matcher,
|
| + const Matcher<Node*>& control_matcher)
|
| + : NodeMatcher(opcode),
|
| + input_matcher_(input_matcher),
|
| + effect_matcher_(effect_matcher),
|
| + control_matcher_(control_matcher) {}
|
| +
|
| + void DescribeTo(std::ostream* os) const final {
|
| + NodeMatcher::DescribeTo(os);
|
| + *os << " whose input (";
|
| + input_matcher_.DescribeTo(os);
|
| + *os << "), effect (";
|
| + effect_matcher_.DescribeTo(os);
|
| + *os << "), control (";
|
| + control_matcher_.DescribeTo(os);
|
| + *os << ")";
|
| + }
|
| +
|
| + bool MatchAndExplain(Node* node, MatchResultListener* listener) const final {
|
| + return (NodeMatcher::MatchAndExplain(node, listener) &&
|
| + PrintMatchAndExplain(NodeProperties::GetValueInput(node, 0),
|
| + "input", input_matcher_, listener) &&
|
| + PrintMatchAndExplain(NodeProperties::GetEffectInput(node), "effect",
|
| + effect_matcher_, listener) &&
|
| + PrintMatchAndExplain(NodeProperties::GetControlInput(node),
|
| + "control", control_matcher_, listener));
|
| + }
|
| +
|
| + private:
|
| + const Matcher<Node*> input_matcher_;
|
| + const Matcher<Node*> effect_matcher_;
|
| + const Matcher<Node*> control_matcher_;
|
| +};
|
| +
|
| +
|
| class IsParameterMatcher final : public NodeMatcher {
|
| public:
|
| explicit IsParameterMatcher(const Matcher<int>& index_matcher)
|
| @@ -2535,6 +2651,16 @@ Matcher<Node*> IsJSCallRuntime(std::vector<Matcher<Node*>> value_matchers,
|
| }
|
|
|
|
|
| +Matcher<Node*> IsJSBinaryOperation(IrOpcode::Value opcode,
|
| + const Matcher<Node*>& lhs_matcher,
|
| + const Matcher<Node*>& rhs_matcher,
|
| + const Matcher<Node*>& effect_matcher,
|
| + const Matcher<Node*>& control_matcher) {
|
| + return MakeMatcher(new IsJSBinopMatcher(opcode, lhs_matcher, rhs_matcher,
|
| + effect_matcher, control_matcher));
|
| +}
|
| +
|
| +
|
| #define IS_BINOP_MATCHER(Name) \
|
| Matcher<Node*> Is##Name(const Matcher<Node*>& lhs_matcher, \
|
| const Matcher<Node*>& rhs_matcher) { \
|
| @@ -2572,7 +2698,6 @@ IS_BINOP_MATCHER(Uint32LessThanOrEqual)
|
| IS_BINOP_MATCHER(Int64Add)
|
| IS_BINOP_MATCHER(Int64Sub)
|
| IS_BINOP_MATCHER(Int64Mul)
|
| -IS_BINOP_MATCHER(JSAdd)
|
| IS_BINOP_MATCHER(Float32Max)
|
| IS_BINOP_MATCHER(Float32Min)
|
| IS_BINOP_MATCHER(Float32Equal)
|
| @@ -2613,10 +2738,32 @@ IS_UNOP_MATCHER(NumberToInt32)
|
| IS_UNOP_MATCHER(NumberToUint32)
|
| IS_UNOP_MATCHER(ObjectIsSmi)
|
| IS_UNOP_MATCHER(Word32Clz)
|
| -IS_UNOP_MATCHER(JSUnaryNot)
|
| -IS_UNOP_MATCHER(JSTypeOf)
|
| #undef IS_UNOP_MATCHER
|
|
|
| +
|
| +#define IS_UNOP_EFFECT_MATCHER(Name) \
|
| + Matcher<Node*> Is##Name(const Matcher<Node*>& input_matcher, \
|
| + const Matcher<Node*>& effect_matcher) { \
|
| + return MakeMatcher(new IsUnopWithEffectMatcher( \
|
| + IrOpcode::k##Name, input_matcher, effect_matcher)); \
|
| + }
|
| +IS_UNOP_EFFECT_MATCHER(JSUnaryNot)
|
| +IS_UNOP_EFFECT_MATCHER(JSTypeOf)
|
| +IS_UNOP_EFFECT_MATCHER(JSToBoolean)
|
| +#undef IS_UNOP_EFFECT_MATCHER
|
| +
|
| +
|
| +#define IS_UNOP_EFFECT_CONTROL_MATCHER(Name) \
|
| + Matcher<Node*> Is##Name(const Matcher<Node*>& input_matcher, \
|
| + const Matcher<Node*>& effect_matcher, \
|
| + const Matcher<Node*>& control_matcher) { \
|
| + return MakeMatcher(new IsUnopEffectControlMatcher( \
|
| + IrOpcode::k##Name, input_matcher, effect_matcher, control_matcher)); \
|
| + }
|
| +IS_UNOP_EFFECT_CONTROL_MATCHER(JSToName)
|
| +IS_UNOP_EFFECT_CONTROL_MATCHER(JSToObject)
|
| +#undef IS_UNOP_EFFECT_CONTROL_MATCHER
|
| +
|
| } // namespace compiler
|
| } // namespace internal
|
| } // namespace v8
|
|
|