Index: test/unittests/compiler/node-matchers-unittest.cc |
diff --git a/test/unittests/compiler/node-matchers-unittest.cc b/test/unittests/compiler/node-matchers-unittest.cc |
index 85db9dbdca6f2a580c0ce72d719cad5d814677e3..a6239085dd75065a6072aa554f3eda0505b90500 100644 |
--- a/test/unittests/compiler/node-matchers-unittest.cc |
+++ b/test/unittests/compiler/node-matchers-unittest.cc |
@@ -728,6 +728,224 @@ TEST_F(NodeMatcherTest, ScaledWithOffset64Matcher) { |
} |
+TEST_F(NodeMatcherTest, BranchMatcher_match) { |
+ Node* zero = graph()->NewNode(common()->Int32Constant(0)); |
+ |
+ { |
+ Node* branch = graph()->NewNode(common()->Branch(), zero, graph()->start()); |
+ Node* if_true = graph()->NewNode(common()->IfTrue(), branch); |
+ Node* if_false = graph()->NewNode(common()->IfFalse(), branch); |
+ BranchMatcher matcher(branch); |
+ EXPECT_TRUE(matcher.Matched()); |
+ EXPECT_EQ(branch, matcher.Branch()); |
+ EXPECT_EQ(if_true, matcher.IfTrue()); |
+ EXPECT_EQ(if_false, matcher.IfFalse()); |
+ } |
+ |
+ { |
+ Node* branch = graph()->NewNode(common()->Branch(), zero, graph()->start()); |
+ Node* if_false = graph()->NewNode(common()->IfFalse(), branch); |
+ Node* if_true = graph()->NewNode(common()->IfTrue(), branch); |
+ BranchMatcher matcher(branch); |
+ EXPECT_TRUE(matcher.Matched()); |
+ EXPECT_EQ(branch, matcher.Branch()); |
+ EXPECT_EQ(if_true, matcher.IfTrue()); |
+ EXPECT_EQ(if_false, matcher.IfFalse()); |
+ } |
+ |
+ { |
+ Node* branch = graph()->NewNode(common()->Branch(), zero, graph()->start()); |
+ Node* if_false = graph()->NewNode(common()->IfFalse(), branch); |
+ Node* if_true = graph()->NewNode(common()->IfTrue(), branch); |
+ Node* other = graph()->NewNode(common()->IfValue(33), branch); |
+ BranchMatcher matcher(branch); |
+ EXPECT_TRUE(matcher.Matched()); |
+ EXPECT_EQ(branch, matcher.Branch()); |
+ EXPECT_EQ(if_true, matcher.IfTrue()); |
+ EXPECT_EQ(if_false, matcher.IfFalse()); |
+ USE(other); |
+ } |
+} |
+ |
+ |
+TEST_F(NodeMatcherTest, BranchMatcher_fail) { |
+ Node* zero = graph()->NewNode(common()->Int32Constant(0)); |
+ |
+ { |
+ Node* branch = graph()->NewNode(common()->Branch(), zero, graph()->start()); |
+ Node* if_true = graph()->NewNode(common()->IfTrue(), branch); |
+ BranchMatcher matcher(branch); |
+ EXPECT_FALSE(matcher.Matched()); |
+ USE(if_true); |
+ } |
+ |
+ { |
+ Node* branch = graph()->NewNode(common()->Branch(), zero, graph()->start()); |
+ Node* if_false = graph()->NewNode(common()->IfFalse(), branch); |
+ BranchMatcher matcher(branch); |
+ EXPECT_FALSE(matcher.Matched()); |
+ USE(if_false); |
+ } |
+ |
+ { |
+ BranchMatcher matcher(zero); |
+ EXPECT_FALSE(matcher.Matched()); |
+ } |
+ |
+ { |
+ Node* branch = graph()->NewNode(common()->Branch(), zero, graph()->start()); |
+ Node* if_true = graph()->NewNode(common()->IfTrue(), branch); |
+ Node* if_false = graph()->NewNode(common()->IfFalse(), branch); |
+ EXPECT_TRUE(BranchMatcher(branch).Matched()); |
+ EXPECT_FALSE(BranchMatcher(if_true).Matched()); |
+ EXPECT_FALSE(BranchMatcher(if_false).Matched()); |
+ } |
+ |
+ { |
+ Node* sw = graph()->NewNode(common()->Switch(5), zero, graph()->start()); |
+ Node* if_true = graph()->NewNode(common()->IfTrue(), sw); |
+ Node* if_false = graph()->NewNode(common()->IfFalse(), sw); |
+ EXPECT_FALSE(BranchMatcher(sw).Matched()); |
+ EXPECT_FALSE(BranchMatcher(if_true).Matched()); |
+ EXPECT_FALSE(BranchMatcher(if_false).Matched()); |
+ } |
+ |
+ { |
+ Node* branch = graph()->NewNode(common()->Branch(), zero, graph()->start()); |
+ Node* if_true = graph()->NewNode(common()->IfTrue(), branch); |
+ Node* if_value = graph()->NewNode(common()->IfValue(2), branch); |
+ BranchMatcher matcher(branch); |
+ EXPECT_FALSE(matcher.Matched()); |
+ EXPECT_FALSE(BranchMatcher(if_true).Matched()); |
+ EXPECT_FALSE(BranchMatcher(if_value).Matched()); |
+ } |
+} |
+ |
+ |
+TEST_F(NodeMatcherTest, DiamondMatcher_match) { |
+ Node* zero = graph()->NewNode(common()->Int32Constant(0)); |
+ |
+ { |
+ Node* branch = graph()->NewNode(common()->Branch(), zero, graph()->start()); |
+ Node* if_true = graph()->NewNode(common()->IfTrue(), branch); |
+ Node* if_false = graph()->NewNode(common()->IfFalse(), branch); |
+ Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false); |
+ DiamondMatcher matcher(merge); |
+ EXPECT_TRUE(matcher.Matched()); |
+ EXPECT_EQ(branch, matcher.Branch()); |
+ EXPECT_EQ(if_true, matcher.IfTrue()); |
+ EXPECT_EQ(if_false, matcher.IfFalse()); |
+ EXPECT_EQ(merge, matcher.Merge()); |
+ } |
+ |
+ { |
+ Node* branch = graph()->NewNode(common()->Branch(), zero, graph()->start()); |
+ Node* if_false = graph()->NewNode(common()->IfFalse(), branch); |
+ Node* if_true = graph()->NewNode(common()->IfTrue(), branch); |
+ Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false); |
+ DiamondMatcher matcher(merge); |
+ EXPECT_TRUE(matcher.Matched()); |
+ EXPECT_EQ(branch, matcher.Branch()); |
+ EXPECT_EQ(if_true, matcher.IfTrue()); |
+ EXPECT_EQ(if_false, matcher.IfFalse()); |
+ EXPECT_EQ(merge, matcher.Merge()); |
+ } |
+ |
+ { |
+ Node* branch = graph()->NewNode(common()->Branch(), zero, graph()->start()); |
+ Node* if_true = graph()->NewNode(common()->IfTrue(), branch); |
+ Node* if_false = graph()->NewNode(common()->IfFalse(), branch); |
+ Node* merge = graph()->NewNode(common()->Merge(2), if_false, if_true); |
+ DiamondMatcher matcher(merge); |
+ EXPECT_TRUE(matcher.Matched()); |
+ EXPECT_EQ(branch, matcher.Branch()); |
+ EXPECT_EQ(if_true, matcher.IfTrue()); |
+ EXPECT_EQ(if_false, matcher.IfFalse()); |
+ EXPECT_EQ(merge, matcher.Merge()); |
+ } |
+} |
+ |
+ |
+TEST_F(NodeMatcherTest, DiamondMatcher_fail) { |
+ Node* zero = graph()->NewNode(common()->Int32Constant(0)); |
+ |
+ { |
+ Node* branch = graph()->NewNode(common()->Branch(), zero, graph()->start()); |
+ Node* if_true = graph()->NewNode(common()->IfTrue(), branch); |
+ Node* if_value = graph()->NewNode(common()->IfValue(1), branch); |
+ Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_value); |
+ DiamondMatcher matcher(merge); |
+ EXPECT_FALSE(matcher.Matched()); |
+ } |
+ |
+ { |
+ Node* branch = graph()->NewNode(common()->Branch(), zero, graph()->start()); |
+ Node* if_false = graph()->NewNode(common()->IfFalse(), branch); |
+ Node* if_value = graph()->NewNode(common()->IfValue(1), branch); |
+ Node* merge = graph()->NewNode(common()->Merge(2), if_false, if_value); |
+ DiamondMatcher matcher(merge); |
+ EXPECT_FALSE(matcher.Matched()); |
+ } |
+ |
+ { |
+ Node* branch = graph()->NewNode(common()->Branch(), zero, graph()->start()); |
+ Node* if_true = graph()->NewNode(common()->IfTrue(), branch); |
+ Node* if_false = graph()->NewNode(common()->IfFalse(), branch); |
+ Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false); |
+ DiamondMatcher matcher(merge); |
+ EXPECT_TRUE(matcher.Matched()); |
+ EXPECT_EQ(branch, matcher.Branch()); |
+ EXPECT_EQ(if_true, matcher.IfTrue()); |
+ EXPECT_EQ(if_false, matcher.IfFalse()); |
+ EXPECT_EQ(merge, matcher.Merge()); |
+ |
+ EXPECT_FALSE(DiamondMatcher(branch).Matched()); // Must be the merge. |
+ EXPECT_FALSE(DiamondMatcher(if_true).Matched()); |
+ EXPECT_FALSE(DiamondMatcher(if_false).Matched()); |
+ } |
+ |
+ { |
+ Node* branch = graph()->NewNode(common()->Branch(), zero, graph()->start()); |
+ Node* if_true = graph()->NewNode(common()->IfTrue(), branch); |
+ Node* if_false = graph()->NewNode(common()->IfFalse(), branch); |
+ Node* merge = graph()->NewNode(common()->Merge(3), if_true, if_false, |
+ graph()->start()); |
+ DiamondMatcher matcher(merge); |
+ EXPECT_FALSE(matcher.Matched()); // Too many inputs to merge. |
+ } |
+ |
+ { |
+ Node* branch = graph()->NewNode(common()->Branch(), zero, graph()->start()); |
+ Node* if_true = graph()->NewNode(common()->IfTrue(), branch); |
+ Node* if_false = graph()->start(); |
+ Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false); |
+ DiamondMatcher matcher(merge); |
+ EXPECT_FALSE(matcher.Matched()); |
+ } |
+ |
+ { |
+ Node* branch = graph()->NewNode(common()->Branch(), zero, graph()->start()); |
+ Node* if_true = graph()->start(); |
+ Node* if_false = graph()->NewNode(common()->IfFalse(), branch); |
+ Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false); |
+ DiamondMatcher matcher(merge); |
+ EXPECT_FALSE(matcher.Matched()); |
+ } |
+ |
+ { |
+ Node* branch1 = |
+ graph()->NewNode(common()->Branch(), zero, graph()->start()); |
+ Node* branch2 = |
+ graph()->NewNode(common()->Branch(), zero, graph()->start()); |
+ Node* if_true = graph()->NewNode(common()->IfTrue(), branch1); |
+ Node* if_false = graph()->NewNode(common()->IfFalse(), branch2); |
+ Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false); |
+ DiamondMatcher matcher(merge); |
+ EXPECT_FALSE(matcher.Matched()); |
+ } |
+} |
+ |
+ |
} // namespace compiler |
} // namespace internal |
} // namespace v8 |