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