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) { \ |