summaryrefslogtreecommitdiff
path: root/deps/v8/test/unittests/compiler/node-matchers-unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/unittests/compiler/node-matchers-unittest.cc')
-rw-r--r--deps/v8/test/unittests/compiler/node-matchers-unittest.cc53
1 files changed, 49 insertions, 4 deletions
diff --git a/deps/v8/test/unittests/compiler/node-matchers-unittest.cc b/deps/v8/test/unittests/compiler/node-matchers-unittest.cc
index f0cc407445..45d7427494 100644
--- a/deps/v8/test/unittests/compiler/node-matchers-unittest.cc
+++ b/deps/v8/test/unittests/compiler/node-matchers-unittest.cc
@@ -30,13 +30,15 @@ class NodeMatcherTest : public GraphTest {
namespace {
template <class Matcher>
-void CheckBaseWithIndexAndDisplacement(Matcher* matcher, Node* index, int scale,
- Node* base, Node* displacement) {
+void CheckBaseWithIndexAndDisplacement(
+ Matcher* matcher, Node* index, int scale, Node* base, Node* displacement,
+ DisplacementMode displacement_mode = kPositiveDisplacement) {
EXPECT_TRUE(matcher->matches());
EXPECT_EQ(index, matcher->index());
EXPECT_EQ(scale, matcher->scale());
EXPECT_EQ(base, matcher->base());
EXPECT_EQ(displacement, matcher->displacement());
+ EXPECT_EQ(displacement_mode, matcher->displacement_mode());
}
} // namespace
@@ -90,6 +92,9 @@ TEST_F(NodeMatcherTest, ScaledWithOffset32Matcher) {
const Operator* a_op = machine()->Int32Add();
USE(a_op);
+ const Operator* sub_op = machine()->Int32Sub();
+ USE(sub_op);
+
const Operator* m_op = machine()->Int32Mul();
Node* m1 = graph()->NewNode(m_op, p1, d1);
Node* m2 = graph()->NewNode(m_op, p1, d2);
@@ -354,7 +359,25 @@ TEST_F(NodeMatcherTest, ScaledWithOffset32Matcher) {
graph()->NewNode(a_op, s3, graph()->NewNode(a_op, b0, d15)));
CheckBaseWithIndexAndDisplacement(&match43, p1, 3, b0, d15);
- // Check that scales that require using the base address work dorrectly.
+ // S3 + (B0 - D15) -> [p1, 2, b0, d15, true]
+ s3 = graph()->NewNode(s_op, p1, d3);
+ BaseWithIndexAndDisplacement32Matcher match44(
+ graph()->NewNode(a_op, s3, graph()->NewNode(sub_op, b0, d15)));
+ CheckBaseWithIndexAndDisplacement(&match44, p1, 3, b0, d15,
+ kNegativeDisplacement);
+
+ // B0 + (B1 - D15) -> [p1, 2, b0, d15, true]
+ BaseWithIndexAndDisplacement32Matcher match45(
+ graph()->NewNode(a_op, b0, graph()->NewNode(sub_op, b1, d15)));
+ CheckBaseWithIndexAndDisplacement(&match45, b1, 0, b0, d15,
+ kNegativeDisplacement);
+
+ // (B0 - D15) + S3 -> [p1, 2, b0, d15, true]
+ s3 = graph()->NewNode(s_op, p1, d3);
+ BaseWithIndexAndDisplacement32Matcher match46(
+ graph()->NewNode(a_op, graph()->NewNode(sub_op, b0, d15), s3));
+ CheckBaseWithIndexAndDisplacement(&match46, p1, 3, b0, d15,
+ kNegativeDisplacement);
}
@@ -409,6 +432,9 @@ TEST_F(NodeMatcherTest, ScaledWithOffset64Matcher) {
const Operator* a_op = machine()->Int64Add();
USE(a_op);
+ const Operator* sub_op = machine()->Int64Sub();
+ USE(sub_op);
+
const Operator* m_op = machine()->Int64Mul();
Node* m1 = graph()->NewNode(m_op, p1, d1);
Node* m2 = graph()->NewNode(m_op, p1, d2);
@@ -726,8 +752,27 @@ TEST_F(NodeMatcherTest, ScaledWithOffset64Matcher) {
BaseWithIndexAndDisplacement64Matcher match50(
graph()->NewNode(a_op, m3, temp));
CheckBaseWithIndexAndDisplacement(&match50, m3, 0, b0, d15);
-}
+ // S3 + (B0 - D15) -> [p1, 2, b0, d15, true]
+ s3 = graph()->NewNode(s_op, p1, d3);
+ BaseWithIndexAndDisplacement64Matcher match51(
+ graph()->NewNode(a_op, s3, graph()->NewNode(sub_op, b0, d15)));
+ CheckBaseWithIndexAndDisplacement(&match51, p1, 3, b0, d15,
+ kNegativeDisplacement);
+
+ // B0 + (B1 - D15) -> [p1, 2, b0, d15, true]
+ BaseWithIndexAndDisplacement64Matcher match52(
+ graph()->NewNode(a_op, b0, graph()->NewNode(sub_op, b1, d15)));
+ CheckBaseWithIndexAndDisplacement(&match52, b1, 0, b0, d15,
+ kNegativeDisplacement);
+
+ // (B0 - D15) + S3 -> [p1, 2, b0, d15, true]
+ s3 = graph()->NewNode(s_op, p1, d3);
+ BaseWithIndexAndDisplacement64Matcher match53(
+ graph()->NewNode(a_op, graph()->NewNode(sub_op, b0, d15), s3));
+ CheckBaseWithIndexAndDisplacement(&match53, p1, 3, b0, d15,
+ kNegativeDisplacement);
+}
TEST_F(NodeMatcherTest, BranchMatcher_match) {
Node* zero = graph()->NewNode(common()->Int32Constant(0));