Ben Murdoch | b8a8cc1 | 2014-11-26 15:28:44 +0000 | [diff] [blame] | 1 | // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #include <vector> |
| 6 | |
| 7 | #include "src/v8.h" |
| 8 | |
| 9 | #include "graph-tester.h" |
| 10 | #include "src/compiler/common-operator.h" |
Ben Murdoch | b8a8cc1 | 2014-11-26 15:28:44 +0000 | [diff] [blame] | 11 | #include "src/compiler/graph.h" |
| 12 | #include "src/compiler/graph-inl.h" |
| 13 | #include "src/compiler/graph-visualizer.h" |
Emily Bernier | d0a1eb7 | 2015-03-24 16:35:39 -0400 | [diff] [blame] | 14 | #include "src/compiler/node.h" |
Ben Murdoch | b8a8cc1 | 2014-11-26 15:28:44 +0000 | [diff] [blame] | 15 | #include "src/compiler/operator.h" |
| 16 | |
| 17 | using namespace v8::internal; |
| 18 | using namespace v8::internal::compiler; |
| 19 | |
Emily Bernier | d0a1eb7 | 2015-03-24 16:35:39 -0400 | [diff] [blame] | 20 | static Operator dummy_operator(IrOpcode::kParameter, Operator::kNoWrite, |
| 21 | "dummy", 0, 0, 0, 1, 0, 0); |
Ben Murdoch | b8a8cc1 | 2014-11-26 15:28:44 +0000 | [diff] [blame] | 22 | |
| 23 | class PreNodeVisitor : public NullNodeVisitor { |
| 24 | public: |
Emily Bernier | d0a1eb7 | 2015-03-24 16:35:39 -0400 | [diff] [blame] | 25 | void Pre(Node* node) { |
Ben Murdoch | b8a8cc1 | 2014-11-26 15:28:44 +0000 | [diff] [blame] | 26 | printf("NODE ID: %d\n", node->id()); |
| 27 | nodes_.push_back(node); |
Ben Murdoch | b8a8cc1 | 2014-11-26 15:28:44 +0000 | [diff] [blame] | 28 | } |
| 29 | std::vector<Node*> nodes_; |
| 30 | }; |
| 31 | |
| 32 | |
| 33 | class PostNodeVisitor : public NullNodeVisitor { |
| 34 | public: |
Emily Bernier | d0a1eb7 | 2015-03-24 16:35:39 -0400 | [diff] [blame] | 35 | void Post(Node* node) { |
Ben Murdoch | b8a8cc1 | 2014-11-26 15:28:44 +0000 | [diff] [blame] | 36 | printf("NODE ID: %d\n", node->id()); |
| 37 | nodes_.push_back(node); |
Ben Murdoch | b8a8cc1 | 2014-11-26 15:28:44 +0000 | [diff] [blame] | 38 | } |
| 39 | std::vector<Node*> nodes_; |
| 40 | }; |
| 41 | |
| 42 | |
Ben Murdoch | b8a8cc1 | 2014-11-26 15:28:44 +0000 | [diff] [blame] | 43 | TEST(TestInputNodePreOrderVisitSimple) { |
| 44 | GraphWithStartNodeTester graph; |
| 45 | Node* n2 = graph.NewNode(&dummy_operator, graph.start()); |
| 46 | Node* n3 = graph.NewNode(&dummy_operator, n2); |
| 47 | Node* n4 = graph.NewNode(&dummy_operator, n2, n3); |
| 48 | Node* n5 = graph.NewNode(&dummy_operator, n4, n2); |
| 49 | graph.SetEnd(n5); |
| 50 | |
| 51 | PreNodeVisitor node_visitor; |
| 52 | graph.VisitNodeInputsFromEnd(&node_visitor); |
| 53 | CHECK_EQ(5, static_cast<int>(node_visitor.nodes_.size())); |
| 54 | CHECK(n5->id() == node_visitor.nodes_[0]->id()); |
| 55 | CHECK(n4->id() == node_visitor.nodes_[1]->id()); |
| 56 | CHECK(n2->id() == node_visitor.nodes_[2]->id()); |
| 57 | CHECK(graph.start()->id() == node_visitor.nodes_[3]->id()); |
| 58 | CHECK(n3->id() == node_visitor.nodes_[4]->id()); |
| 59 | } |
| 60 | |
| 61 | |
Ben Murdoch | b8a8cc1 | 2014-11-26 15:28:44 +0000 | [diff] [blame] | 62 | TEST(TestPrintNodeGraphToNodeGraphviz) { |
| 63 | GraphWithStartNodeTester graph; |
| 64 | Node* n2 = graph.NewNode(&dummy_operator, graph.start()); |
| 65 | Node* n3 = graph.NewNode(&dummy_operator, graph.start()); |
| 66 | Node* n4 = graph.NewNode(&dummy_operator, n2); |
| 67 | Node* n5 = graph.NewNode(&dummy_operator, n2); |
| 68 | Node* n6 = graph.NewNode(&dummy_operator, n3); |
| 69 | Node* n7 = graph.NewNode(&dummy_operator, n3); |
| 70 | Node* n8 = graph.NewNode(&dummy_operator, n5); |
| 71 | Node* n9 = graph.NewNode(&dummy_operator, n5); |
| 72 | Node* n10 = graph.NewNode(&dummy_operator, n9); |
| 73 | Node* n11 = graph.NewNode(&dummy_operator, n9); |
| 74 | Node* end_dependencies[6] = {n4, n8, n10, n11, n6, n7}; |
| 75 | Node* n12 = graph.NewNode(&dummy_operator, 6, end_dependencies); |
| 76 | graph.SetEnd(n12); |
| 77 | |
| 78 | OFStream os(stdout); |
| 79 | os << AsDOT(graph); |
| 80 | } |