Line data Source code
1 : // Copyright 2014 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 "src/compiler/common-operator.h"
6 : #include "src/compiler/compiler-source-position-table.h"
7 : #include "src/compiler/graph-visualizer.h"
8 : #include "src/compiler/graph.h"
9 : #include "src/compiler/js-operator.h"
10 : #include "src/compiler/machine-operator.h"
11 : #include "src/compiler/node.h"
12 : #include "src/compiler/operator.h"
13 : #include "src/compiler/schedule.h"
14 : #include "src/compiler/scheduler.h"
15 : #include "src/compiler/verifier.h"
16 : #include "test/cctest/cctest.h"
17 :
18 : namespace v8 {
19 : namespace internal {
20 : namespace compiler {
21 :
22 47436 : static Operator dummy_operator1(IrOpcode::kParameter, Operator::kNoWrite,
23 23718 : "dummy", 1, 0, 0, 1, 0, 0);
24 47436 : static Operator dummy_operator6(IrOpcode::kParameter, Operator::kNoWrite,
25 23718 : "dummy", 6, 0, 0, 1, 0, 0);
26 :
27 :
28 23724 : TEST(NodeWithNullInputReachableFromEnd) {
29 6 : HandleAndZoneScope scope;
30 6 : Graph graph(scope.main_zone());
31 6 : CommonOperatorBuilder common(scope.main_zone());
32 :
33 6 : Node* start = graph.NewNode(common.Start(0));
34 : graph.SetStart(start);
35 6 : Node* k = graph.NewNode(common.Int32Constant(0));
36 : Node* phi =
37 6 : graph.NewNode(common.Phi(MachineRepresentation::kTagged, 1), k, start);
38 6 : phi->ReplaceInput(0, nullptr);
39 : graph.SetEnd(phi);
40 :
41 12 : OFStream os(stdout);
42 6 : SourcePositionTable table(&graph);
43 12 : os << AsJSON(graph, &table);
44 6 : }
45 :
46 :
47 23724 : TEST(NodeWithNullControlReachableFromEnd) {
48 6 : HandleAndZoneScope scope;
49 6 : Graph graph(scope.main_zone());
50 6 : CommonOperatorBuilder common(scope.main_zone());
51 :
52 6 : Node* start = graph.NewNode(common.Start(0));
53 : graph.SetStart(start);
54 6 : Node* k = graph.NewNode(common.Int32Constant(0));
55 : Node* phi =
56 6 : graph.NewNode(common.Phi(MachineRepresentation::kTagged, 1), k, start);
57 6 : phi->ReplaceInput(1, nullptr);
58 : graph.SetEnd(phi);
59 :
60 12 : OFStream os(stdout);
61 6 : SourcePositionTable table(&graph);
62 12 : os << AsJSON(graph, &table);
63 6 : }
64 :
65 :
66 23724 : TEST(NodeWithNullInputReachableFromStart) {
67 6 : HandleAndZoneScope scope;
68 6 : Graph graph(scope.main_zone());
69 6 : CommonOperatorBuilder common(scope.main_zone());
70 :
71 6 : Node* start = graph.NewNode(common.Start(0));
72 : graph.SetStart(start);
73 6 : Node* k = graph.NewNode(common.Int32Constant(0));
74 : Node* phi =
75 6 : graph.NewNode(common.Phi(MachineRepresentation::kTagged, 1), k, start);
76 6 : phi->ReplaceInput(0, nullptr);
77 : graph.SetEnd(start);
78 :
79 12 : OFStream os(stdout);
80 6 : SourcePositionTable table(&graph);
81 12 : os << AsJSON(graph, &table);
82 6 : }
83 :
84 :
85 23724 : TEST(NodeWithNullControlReachableFromStart) {
86 6 : HandleAndZoneScope scope;
87 6 : Graph graph(scope.main_zone());
88 6 : CommonOperatorBuilder common(scope.main_zone());
89 :
90 6 : Node* start = graph.NewNode(common.Start(0));
91 : graph.SetStart(start);
92 6 : Node* merge = graph.NewNode(common.Merge(2), start, start);
93 6 : merge->ReplaceInput(1, nullptr);
94 : graph.SetEnd(merge);
95 :
96 12 : OFStream os(stdout);
97 6 : SourcePositionTable table(&graph);
98 12 : os << AsJSON(graph, &table);
99 6 : }
100 :
101 :
102 23724 : TEST(NodeNetworkOfDummiesReachableFromEnd) {
103 6 : HandleAndZoneScope scope;
104 6 : Graph graph(scope.main_zone());
105 6 : CommonOperatorBuilder common(scope.main_zone());
106 :
107 6 : Node* start = graph.NewNode(common.Start(0));
108 : graph.SetStart(start);
109 : Node* n2 = graph.NewNode(&dummy_operator1, graph.start());
110 6 : Node* n3 = graph.NewNode(&dummy_operator1, graph.start());
111 : Node* n4 = graph.NewNode(&dummy_operator1, n2);
112 : Node* n5 = graph.NewNode(&dummy_operator1, n2);
113 : Node* n6 = graph.NewNode(&dummy_operator1, n3);
114 : Node* n7 = graph.NewNode(&dummy_operator1, n3);
115 : Node* n8 = graph.NewNode(&dummy_operator1, n5);
116 : Node* n9 = graph.NewNode(&dummy_operator1, n5);
117 : Node* n10 = graph.NewNode(&dummy_operator1, n9);
118 : Node* n11 = graph.NewNode(&dummy_operator1, n9);
119 6 : Node* end_dependencies[6] = {n4, n8, n10, n11, n6, n7};
120 6 : Node* end = graph.NewNode(&dummy_operator6, 6, end_dependencies);
121 : graph.SetEnd(end);
122 :
123 12 : OFStream os(stdout);
124 6 : SourcePositionTable table(&graph);
125 12 : os << AsJSON(graph, &table);
126 6 : }
127 :
128 : } // namespace compiler
129 : } // namespace internal
130 71154 : } // namespace v8
|