| 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 522eecf8f96ac9031984c5d0add95af1c826ed6a..d5d4e1a91450f350c877a148450f3701e32b8228 100644
|
| --- a/test/unittests/compiler/node-test-utils.cc
|
| +++ b/test/unittests/compiler/node-test-utils.cc
|
| @@ -7,6 +7,7 @@
|
| #include <vector>
|
|
|
| #include "src/assembler.h"
|
| +#include "src/compiler/js-operator.h"
|
| #include "src/compiler/node-properties.h"
|
| #include "src/compiler/simplified-operator.h"
|
| #include "src/unique.h"
|
| @@ -1186,24 +1187,32 @@ class IsLoadMatcher final : public NodeMatcher {
|
| };
|
|
|
|
|
| -class IsToNumberMatcher final : public NodeMatcher {
|
| +class IsStoreMatcher final : public NodeMatcher {
|
| public:
|
| - IsToNumberMatcher(const Matcher<Node*>& base_matcher,
|
| - const Matcher<Node*>& context_matcher,
|
| - const Matcher<Node*>& effect_matcher,
|
| - const Matcher<Node*>& control_matcher)
|
| - : NodeMatcher(IrOpcode::kJSToNumber),
|
| + 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),
|
| - context_matcher_(context_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 base (";
|
| + *os << " whose rep (";
|
| + rep_matcher_.DescribeTo(os);
|
| + *os << "), base (";
|
| base_matcher_.DescribeTo(os);
|
| - *os << "), context (";
|
| - context_matcher_.DescribeTo(os);
|
| + *os << "), index (";
|
| + index_matcher_.DescribeTo(os);
|
| + *os << "), value (";
|
| + value_matcher_.DescribeTo(os);
|
| *os << "), effect (";
|
| effect_matcher_.DescribeTo(os);
|
| *os << ") and control (";
|
| @@ -1213,10 +1222,14 @@ class IsToNumberMatcher final : public NodeMatcher {
|
|
|
| bool MatchAndExplain(Node* node, MatchResultListener* listener) const final {
|
| return (NodeMatcher::MatchAndExplain(node, listener) &&
|
| + PrintMatchAndExplain(OpParameter<StoreRepresentation>(node), "rep",
|
| + rep_matcher_, listener) &&
|
| PrintMatchAndExplain(NodeProperties::GetValueInput(node, 0), "base",
|
| base_matcher_, listener) &&
|
| - PrintMatchAndExplain(NodeProperties::GetContextInput(node),
|
| - "context", context_matcher_, listener) &&
|
| + PrintMatchAndExplain(NodeProperties::GetValueInput(node, 1),
|
| + "index", index_matcher_, listener) &&
|
| + PrintMatchAndExplain(NodeProperties::GetValueInput(node, 2),
|
| + "value", value_matcher_, listener) &&
|
| PrintMatchAndExplain(NodeProperties::GetEffectInput(node), "effect",
|
| effect_matcher_, listener) &&
|
| PrintMatchAndExplain(NodeProperties::GetControlInput(node),
|
| @@ -1224,39 +1237,33 @@ class IsToNumberMatcher final : public NodeMatcher {
|
| }
|
|
|
| private:
|
| + const Matcher<StoreRepresentation> rep_matcher_;
|
| const Matcher<Node*> base_matcher_;
|
| - const Matcher<Node*> context_matcher_;
|
| + const Matcher<Node*> index_matcher_;
|
| + const Matcher<Node*> value_matcher_;
|
| const Matcher<Node*> effect_matcher_;
|
| const Matcher<Node*> control_matcher_;
|
| };
|
|
|
|
|
| -class IsStoreMatcher final : public NodeMatcher {
|
| +class IsToNumberMatcher 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),
|
| + IsToNumberMatcher(const Matcher<Node*>& base_matcher,
|
| + const Matcher<Node*>& context_matcher,
|
| + const Matcher<Node*>& effect_matcher,
|
| + const Matcher<Node*>& control_matcher)
|
| + : NodeMatcher(IrOpcode::kJSToNumber),
|
| base_matcher_(base_matcher),
|
| - index_matcher_(index_matcher),
|
| - value_matcher_(value_matcher),
|
| + context_matcher_(context_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 (";
|
| + *os << " whose base (";
|
| base_matcher_.DescribeTo(os);
|
| - *os << "), index (";
|
| - index_matcher_.DescribeTo(os);
|
| - *os << "), value (";
|
| - value_matcher_.DescribeTo(os);
|
| + *os << "), context (";
|
| + context_matcher_.DescribeTo(os);
|
| *os << "), effect (";
|
| effect_matcher_.DescribeTo(os);
|
| *os << ") and control (";
|
| @@ -1266,14 +1273,10 @@ class IsStoreMatcher final : public NodeMatcher {
|
|
|
| bool MatchAndExplain(Node* node, MatchResultListener* listener) const final {
|
| 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(NodeProperties::GetContextInput(node),
|
| + "context", context_matcher_, listener) &&
|
| PrintMatchAndExplain(NodeProperties::GetEffectInput(node), "effect",
|
| effect_matcher_, listener) &&
|
| PrintMatchAndExplain(NodeProperties::GetControlInput(node),
|
| @@ -1281,15 +1284,35 @@ class IsStoreMatcher final : public NodeMatcher {
|
| }
|
|
|
| private:
|
| - const Matcher<StoreRepresentation> rep_matcher_;
|
| const Matcher<Node*> base_matcher_;
|
| - const Matcher<Node*> index_matcher_;
|
| - const Matcher<Node*> value_matcher_;
|
| + const Matcher<Node*> context_matcher_;
|
| const Matcher<Node*> effect_matcher_;
|
| const Matcher<Node*> control_matcher_;
|
| };
|
|
|
|
|
| +class IsLoadContextMatcher final : public NodeMatcher {
|
| + public:
|
| + IsLoadContextMatcher(const Matcher<ContextAccess>& access_matcher,
|
| + const Matcher<Node*>& context_matcher)
|
| + : NodeMatcher(IrOpcode::kJSLoadContext),
|
| + access_matcher_(access_matcher),
|
| + context_matcher_(context_matcher) {}
|
| +
|
| + bool MatchAndExplain(Node* node, MatchResultListener* listener) const final {
|
| + return (NodeMatcher::MatchAndExplain(node, listener) &&
|
| + PrintMatchAndExplain(OpParameter<ContextAccess>(node), "access",
|
| + access_matcher_, listener) &&
|
| + PrintMatchAndExplain(NodeProperties::GetContextInput(node),
|
| + "context", context_matcher_, listener));
|
| + }
|
| +
|
| + private:
|
| + const Matcher<ContextAccess> access_matcher_;
|
| + const Matcher<Node*> context_matcher_;
|
| +};
|
| +
|
| +
|
| class IsBinopMatcher final : public NodeMatcher {
|
| public:
|
| IsBinopMatcher(IrOpcode::Value opcode, const Matcher<Node*>& lhs_matcher,
|
| @@ -1727,15 +1750,6 @@ Matcher<Node*> IsLoad(const Matcher<LoadRepresentation>& rep_matcher,
|
| }
|
|
|
|
|
| -Matcher<Node*> IsToNumber(const Matcher<Node*>& base_matcher,
|
| - const Matcher<Node*>& context_matcher,
|
| - const Matcher<Node*>& effect_matcher,
|
| - const Matcher<Node*>& control_matcher) {
|
| - return MakeMatcher(new IsToNumberMatcher(base_matcher, context_matcher,
|
| - effect_matcher, control_matcher));
|
| -}
|
| -
|
| -
|
| Matcher<Node*> IsStore(const Matcher<StoreRepresentation>& rep_matcher,
|
| const Matcher<Node*>& base_matcher,
|
| const Matcher<Node*>& index_matcher,
|
| @@ -1748,6 +1762,21 @@ Matcher<Node*> IsStore(const Matcher<StoreRepresentation>& rep_matcher,
|
| }
|
|
|
|
|
| +Matcher<Node*> IsToNumber(const Matcher<Node*>& base_matcher,
|
| + const Matcher<Node*>& context_matcher,
|
| + const Matcher<Node*>& effect_matcher,
|
| + const Matcher<Node*>& control_matcher) {
|
| + return MakeMatcher(new IsToNumberMatcher(base_matcher, context_matcher,
|
| + effect_matcher, control_matcher));
|
| +}
|
| +
|
| +
|
| +Matcher<Node*> IsLoadContext(const Matcher<ContextAccess>& access_matcher,
|
| + const Matcher<Node*>& context_matcher) {
|
| + return MakeMatcher(new IsLoadContextMatcher(access_matcher, context_matcher));
|
| +}
|
| +
|
| +
|
| #define IS_BINOP_MATCHER(Name) \
|
| Matcher<Node*> Is##Name(const Matcher<Node*>& lhs_matcher, \
|
| const Matcher<Node*>& rhs_matcher) { \
|
|
|