blob: 842d18272e00b62584ad16d255909af544821193 [file] [log] [blame]
Ben Murdochb8a8cc12014-11-26 15:28:44 +00001// 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 Murdochb8a8cc12014-11-26 15:28:44 +000011#include "src/compiler/graph.h"
12#include "src/compiler/graph-inl.h"
13#include "src/compiler/graph-visualizer.h"
Emily Bernierd0a1eb72015-03-24 16:35:39 -040014#include "src/compiler/node.h"
Ben Murdochb8a8cc12014-11-26 15:28:44 +000015#include "src/compiler/operator.h"
16
17using namespace v8::internal;
18using namespace v8::internal::compiler;
19
Emily Bernierd0a1eb72015-03-24 16:35:39 -040020static Operator dummy_operator(IrOpcode::kParameter, Operator::kNoWrite,
21 "dummy", 0, 0, 0, 1, 0, 0);
Ben Murdochb8a8cc12014-11-26 15:28:44 +000022
23class PreNodeVisitor : public NullNodeVisitor {
24 public:
Emily Bernierd0a1eb72015-03-24 16:35:39 -040025 void Pre(Node* node) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +000026 printf("NODE ID: %d\n", node->id());
27 nodes_.push_back(node);
Ben Murdochb8a8cc12014-11-26 15:28:44 +000028 }
29 std::vector<Node*> nodes_;
30};
31
32
33class PostNodeVisitor : public NullNodeVisitor {
34 public:
Emily Bernierd0a1eb72015-03-24 16:35:39 -040035 void Post(Node* node) {
Ben Murdochb8a8cc12014-11-26 15:28:44 +000036 printf("NODE ID: %d\n", node->id());
37 nodes_.push_back(node);
Ben Murdochb8a8cc12014-11-26 15:28:44 +000038 }
39 std::vector<Node*> nodes_;
40};
41
42
Ben Murdochb8a8cc12014-11-26 15:28:44 +000043TEST(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 Murdochb8a8cc12014-11-26 15:28:44 +000062TEST(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}