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 cb50807ce93182fa13a666c8fa62f40b4fec9d56..e58d9c85579482eb7335b8f5bdd4f0b5754679aa 100644 |
--- a/test/unittests/compiler/node-test-utils.cc |
+++ b/test/unittests/compiler/node-test-utils.cc |
@@ -533,19 +533,146 @@ class IsLoadFieldMatcher FINAL : public NodeMatcher { |
}; |
+class IsLoadBufferMatcher FINAL : public NodeMatcher { |
+ public: |
+ IsLoadBufferMatcher(const Matcher<BufferAccess>& access_matcher, |
+ const Matcher<Node*>& buffer_matcher, |
+ const Matcher<Node*>& offset_matcher, |
+ const Matcher<Node*>& length_matcher, |
+ const Matcher<Node*>& effect_matcher, |
+ const Matcher<Node*>& control_matcher) |
+ : NodeMatcher(IrOpcode::kLoadBuffer), |
+ access_matcher_(access_matcher), |
+ buffer_matcher_(buffer_matcher), |
+ offset_matcher_(offset_matcher), |
+ length_matcher_(length_matcher), |
+ effect_matcher_(effect_matcher), |
+ control_matcher_(control_matcher) {} |
+ |
+ virtual void DescribeTo(std::ostream* os) const OVERRIDE { |
+ NodeMatcher::DescribeTo(os); |
+ *os << " whose access ("; |
+ access_matcher_.DescribeTo(os); |
+ *os << "), buffer ("; |
+ buffer_matcher_.DescribeTo(os); |
+ *os << "), offset ("; |
+ offset_matcher_.DescribeTo(os); |
+ *os << "), length ("; |
+ length_matcher_.DescribeTo(os); |
+ *os << "), effect ("; |
+ effect_matcher_.DescribeTo(os); |
+ *os << ") and control ("; |
+ control_matcher_.DescribeTo(os); |
+ *os << ")"; |
+ } |
+ |
+ virtual bool MatchAndExplain(Node* node, |
+ MatchResultListener* listener) const OVERRIDE { |
+ return (NodeMatcher::MatchAndExplain(node, listener) && |
+ PrintMatchAndExplain(BufferAccessOf(node->op()), "access", |
+ access_matcher_, listener) && |
+ PrintMatchAndExplain(NodeProperties::GetValueInput(node, 0), |
+ "buffer", buffer_matcher_, listener) && |
+ PrintMatchAndExplain(NodeProperties::GetValueInput(node, 1), |
+ "offset", offset_matcher_, listener) && |
+ PrintMatchAndExplain(NodeProperties::GetValueInput(node, 2), |
+ "length", length_matcher_, listener) && |
+ PrintMatchAndExplain(NodeProperties::GetEffectInput(node), "effect", |
+ effect_matcher_, listener) && |
+ PrintMatchAndExplain(NodeProperties::GetControlInput(node), |
+ "control", control_matcher_, listener)); |
+ } |
+ |
+ private: |
+ const Matcher<BufferAccess> access_matcher_; |
+ const Matcher<Node*> buffer_matcher_; |
+ const Matcher<Node*> offset_matcher_; |
+ const Matcher<Node*> length_matcher_; |
+ const Matcher<Node*> effect_matcher_; |
+ const Matcher<Node*> control_matcher_; |
+}; |
+ |
+ |
+class IsStoreBufferMatcher FINAL : public NodeMatcher { |
+ public: |
+ IsStoreBufferMatcher(const Matcher<BufferAccess>& access_matcher, |
+ const Matcher<Node*>& buffer_matcher, |
+ const Matcher<Node*>& offset_matcher, |
+ const Matcher<Node*>& length_matcher, |
+ const Matcher<Node*>& value_matcher, |
+ const Matcher<Node*>& effect_matcher, |
+ const Matcher<Node*>& control_matcher) |
+ : NodeMatcher(IrOpcode::kStoreBuffer), |
+ access_matcher_(access_matcher), |
+ buffer_matcher_(buffer_matcher), |
+ offset_matcher_(offset_matcher), |
+ length_matcher_(length_matcher), |
+ value_matcher_(value_matcher), |
+ effect_matcher_(effect_matcher), |
+ control_matcher_(control_matcher) {} |
+ |
+ virtual void DescribeTo(std::ostream* os) const OVERRIDE { |
+ NodeMatcher::DescribeTo(os); |
+ *os << " whose access ("; |
+ access_matcher_.DescribeTo(os); |
+ *os << "), buffer ("; |
+ buffer_matcher_.DescribeTo(os); |
+ *os << "), offset ("; |
+ offset_matcher_.DescribeTo(os); |
+ *os << "), length ("; |
+ length_matcher_.DescribeTo(os); |
+ *os << "), value ("; |
+ value_matcher_.DescribeTo(os); |
+ *os << "), effect ("; |
+ effect_matcher_.DescribeTo(os); |
+ *os << ") and control ("; |
+ control_matcher_.DescribeTo(os); |
+ *os << ")"; |
+ } |
+ |
+ virtual bool MatchAndExplain(Node* node, |
+ MatchResultListener* listener) const OVERRIDE { |
+ return (NodeMatcher::MatchAndExplain(node, listener) && |
+ PrintMatchAndExplain(BufferAccessOf(node->op()), "access", |
+ access_matcher_, listener) && |
+ PrintMatchAndExplain(NodeProperties::GetValueInput(node, 0), |
+ "buffer", buffer_matcher_, listener) && |
+ PrintMatchAndExplain(NodeProperties::GetValueInput(node, 1), |
+ "offset", offset_matcher_, listener) && |
+ PrintMatchAndExplain(NodeProperties::GetValueInput(node, 2), |
+ "length", length_matcher_, listener) && |
+ PrintMatchAndExplain(NodeProperties::GetValueInput(node, 3), |
+ "value", value_matcher_, listener) && |
+ PrintMatchAndExplain(NodeProperties::GetEffectInput(node), "effect", |
+ effect_matcher_, listener) && |
+ PrintMatchAndExplain(NodeProperties::GetControlInput(node), |
+ "control", control_matcher_, listener)); |
+ } |
+ |
+ private: |
+ const Matcher<BufferAccess> access_matcher_; |
+ const Matcher<Node*> buffer_matcher_; |
+ const Matcher<Node*> offset_matcher_; |
+ const Matcher<Node*> length_matcher_; |
+ const Matcher<Node*> value_matcher_; |
+ const Matcher<Node*> effect_matcher_; |
+ const Matcher<Node*> control_matcher_; |
+}; |
+ |
+ |
class IsLoadElementMatcher FINAL : public NodeMatcher { |
public: |
IsLoadElementMatcher(const Matcher<ElementAccess>& access_matcher, |
const Matcher<Node*>& base_matcher, |
const Matcher<Node*>& index_matcher, |
- const Matcher<Node*>& length_matcher, |
- const Matcher<Node*>& effect_matcher) |
+ const Matcher<Node*>& effect_matcher, |
+ const Matcher<Node*>& control_matcher) |
: NodeMatcher(IrOpcode::kLoadElement), |
access_matcher_(access_matcher), |
base_matcher_(base_matcher), |
index_matcher_(index_matcher), |
- length_matcher_(length_matcher), |
- effect_matcher_(effect_matcher) {} |
+ effect_matcher_(effect_matcher), |
+ control_matcher_(control_matcher) {} |
virtual void DescribeTo(std::ostream* os) const OVERRIDE { |
NodeMatcher::DescribeTo(os); |
@@ -555,10 +682,10 @@ class IsLoadElementMatcher FINAL : public NodeMatcher { |
base_matcher_.DescribeTo(os); |
*os << "), index ("; |
index_matcher_.DescribeTo(os); |
- *os << "), length ("; |
- length_matcher_.DescribeTo(os); |
- *os << ") and effect ("; |
+ *os << "), effect ("; |
effect_matcher_.DescribeTo(os); |
+ *os << ") and control ("; |
+ control_matcher_.DescribeTo(os); |
*os << ")"; |
} |
@@ -571,18 +698,18 @@ class IsLoadElementMatcher FINAL : public NodeMatcher { |
base_matcher_, listener) && |
PrintMatchAndExplain(NodeProperties::GetValueInput(node, 1), |
"index", index_matcher_, listener) && |
- PrintMatchAndExplain(NodeProperties::GetValueInput(node, 2), |
- "length", length_matcher_, listener) && |
PrintMatchAndExplain(NodeProperties::GetEffectInput(node), "effect", |
- effect_matcher_, listener)); |
+ effect_matcher_, listener) && |
+ PrintMatchAndExplain(NodeProperties::GetControlInput(node), |
+ "control", control_matcher_, listener)); |
} |
private: |
const Matcher<ElementAccess> access_matcher_; |
const Matcher<Node*> base_matcher_; |
const Matcher<Node*> index_matcher_; |
- const Matcher<Node*> length_matcher_; |
const Matcher<Node*> effect_matcher_; |
+ const Matcher<Node*> control_matcher_; |
}; |
@@ -591,7 +718,6 @@ class IsStoreElementMatcher FINAL : public NodeMatcher { |
IsStoreElementMatcher(const Matcher<ElementAccess>& access_matcher, |
const Matcher<Node*>& base_matcher, |
const Matcher<Node*>& index_matcher, |
- const Matcher<Node*>& length_matcher, |
const Matcher<Node*>& value_matcher, |
const Matcher<Node*>& effect_matcher, |
const Matcher<Node*>& control_matcher) |
@@ -599,7 +725,6 @@ class IsStoreElementMatcher FINAL : public NodeMatcher { |
access_matcher_(access_matcher), |
base_matcher_(base_matcher), |
index_matcher_(index_matcher), |
- length_matcher_(length_matcher), |
value_matcher_(value_matcher), |
effect_matcher_(effect_matcher), |
control_matcher_(control_matcher) {} |
@@ -612,8 +737,6 @@ class IsStoreElementMatcher FINAL : public NodeMatcher { |
base_matcher_.DescribeTo(os); |
*os << "), index ("; |
index_matcher_.DescribeTo(os); |
- *os << "), length ("; |
- length_matcher_.DescribeTo(os); |
*os << "), value ("; |
value_matcher_.DescribeTo(os); |
*os << "), effect ("; |
@@ -633,8 +756,6 @@ class IsStoreElementMatcher FINAL : public NodeMatcher { |
PrintMatchAndExplain(NodeProperties::GetValueInput(node, 1), |
"index", index_matcher_, listener) && |
PrintMatchAndExplain(NodeProperties::GetValueInput(node, 2), |
- "length", length_matcher_, listener) && |
- PrintMatchAndExplain(NodeProperties::GetValueInput(node, 3), |
"value", value_matcher_, listener) && |
PrintMatchAndExplain(NodeProperties::GetEffectInput(node), "effect", |
effect_matcher_, listener) && |
@@ -646,7 +767,6 @@ class IsStoreElementMatcher FINAL : public NodeMatcher { |
const Matcher<ElementAccess> access_matcher_; |
const Matcher<Node*> base_matcher_; |
const Matcher<Node*> index_matcher_; |
- const Matcher<Node*> length_matcher_; |
const Matcher<Node*> value_matcher_; |
const Matcher<Node*> effect_matcher_; |
const Matcher<Node*> control_matcher_; |
@@ -1012,27 +1132,51 @@ Matcher<Node*> IsLoadField(const Matcher<FieldAccess>& access_matcher, |
} |
+Matcher<Node*> IsLoadBuffer(const Matcher<BufferAccess>& access_matcher, |
+ const Matcher<Node*>& buffer_matcher, |
+ const Matcher<Node*>& offset_matcher, |
+ const Matcher<Node*>& length_matcher, |
+ const Matcher<Node*>& effect_matcher, |
+ const Matcher<Node*>& control_matcher) { |
+ return MakeMatcher(new IsLoadBufferMatcher(access_matcher, buffer_matcher, |
+ offset_matcher, length_matcher, |
+ effect_matcher, control_matcher)); |
+} |
+ |
+ |
+Matcher<Node*> IsStoreBuffer(const Matcher<BufferAccess>& access_matcher, |
+ const Matcher<Node*>& buffer_matcher, |
+ const Matcher<Node*>& offset_matcher, |
+ const Matcher<Node*>& length_matcher, |
+ const Matcher<Node*>& value_matcher, |
+ const Matcher<Node*>& effect_matcher, |
+ const Matcher<Node*>& control_matcher) { |
+ return MakeMatcher(new IsStoreBufferMatcher( |
+ access_matcher, buffer_matcher, offset_matcher, length_matcher, |
+ value_matcher, effect_matcher, control_matcher)); |
+} |
+ |
+ |
Matcher<Node*> IsLoadElement(const Matcher<ElementAccess>& access_matcher, |
const Matcher<Node*>& base_matcher, |
const Matcher<Node*>& index_matcher, |
- const Matcher<Node*>& length_matcher, |
- const Matcher<Node*>& effect_matcher) { |
+ const Matcher<Node*>& effect_matcher, |
+ const Matcher<Node*>& control_matcher) { |
return MakeMatcher(new IsLoadElementMatcher(access_matcher, base_matcher, |
- index_matcher, length_matcher, |
- effect_matcher)); |
+ index_matcher, effect_matcher, |
+ control_matcher)); |
} |
Matcher<Node*> IsStoreElement(const Matcher<ElementAccess>& access_matcher, |
const Matcher<Node*>& base_matcher, |
const Matcher<Node*>& index_matcher, |
- const Matcher<Node*>& length_matcher, |
const Matcher<Node*>& value_matcher, |
const Matcher<Node*>& effect_matcher, |
const Matcher<Node*>& control_matcher) { |
return MakeMatcher(new IsStoreElementMatcher( |
- access_matcher, base_matcher, index_matcher, length_matcher, |
- value_matcher, effect_matcher, control_matcher)); |
+ access_matcher, base_matcher, index_matcher, value_matcher, |
+ effect_matcher, control_matcher)); |
} |