Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(68)

Side by Side Diff: test/cctest/compiler/test-js-typed-lowering.cc

Issue 1347353003: [turbofan] Checking of input counts on node creation (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: NewNode -> AddNode Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/js-graph.h" 5 #include "src/compiler/js-graph.h"
6 #include "src/compiler/js-typed-lowering.h" 6 #include "src/compiler/js-typed-lowering.h"
7 #include "src/compiler/machine-operator.h" 7 #include "src/compiler/machine-operator.h"
8 #include "src/compiler/node-properties.h" 8 #include "src/compiler/node-properties.h"
9 #include "src/compiler/opcodes.h" 9 #include "src/compiler/opcodes.h"
10 #include "src/compiler/operator-properties.h" 10 #include "src/compiler/operator-properties.h"
(...skipping 23 matching lines...) Expand all
34 binop(NULL), 34 binop(NULL),
35 unop(NULL), 35 unop(NULL),
36 javascript(main_zone()), 36 javascript(main_zone()),
37 machine(main_zone()), 37 machine(main_zone()),
38 simplified(main_zone()), 38 simplified(main_zone()),
39 common(main_zone()), 39 common(main_zone()),
40 graph(main_zone()), 40 graph(main_zone()),
41 typer(main_isolate(), &graph), 41 typer(main_isolate(), &graph),
42 context_node(NULL) { 42 context_node(NULL) {
43 graph.SetStart(graph.NewNode(common.Start(num_parameters))); 43 graph.SetStart(graph.NewNode(common.Start(num_parameters)));
44 graph.SetEnd(graph.NewNode(common.End(1))); 44 graph.SetEnd(graph.NewNode(common.End(1), graph.start()));
45 typer.Run(); 45 typer.Run();
46 } 46 }
47 47
48 Isolate* isolate; 48 Isolate* isolate;
49 const Operator* binop; 49 const Operator* binop;
50 const Operator* unop; 50 const Operator* unop;
51 JSOperatorBuilder javascript; 51 JSOperatorBuilder javascript;
52 MachineOperatorBuilder machine; 52 MachineOperatorBuilder machine;
53 SimplifiedOperatorBuilder simplified; 53 SimplifiedOperatorBuilder simplified;
54 CommonOperatorBuilder common; 54 CommonOperatorBuilder common;
(...skipping 17 matching lines...) Expand all
72 } 72 }
73 73
74 Node* EmptyFrameState(Node* context) { 74 Node* EmptyFrameState(Node* context) {
75 Node* parameters = graph.NewNode(common.StateValues(0)); 75 Node* parameters = graph.NewNode(common.StateValues(0));
76 Node* locals = graph.NewNode(common.StateValues(0)); 76 Node* locals = graph.NewNode(common.StateValues(0));
77 Node* stack = graph.NewNode(common.StateValues(0)); 77 Node* stack = graph.NewNode(common.StateValues(0));
78 78
79 Node* state_node = graph.NewNode( 79 Node* state_node = graph.NewNode(
80 common.FrameState(BailoutId::None(), OutputFrameStateCombine::Ignore(), 80 common.FrameState(BailoutId::None(), OutputFrameStateCombine::Ignore(),
81 nullptr), 81 nullptr),
82 parameters, locals, stack, context, UndefinedConstant()); 82 parameters, locals, stack, context, UndefinedConstant(), graph.start());
83 83
84 return state_node; 84 return state_node;
85 } 85 }
86 86
87 Node* reduce(Node* node) { 87 Node* reduce(Node* node) {
88 JSGraph jsgraph(main_isolate(), &graph, &common, &javascript, &machine); 88 JSGraph jsgraph(main_isolate(), &graph, &common, &javascript, &machine);
89 // TODO(titzer): mock the GraphReducer here for better unit testing. 89 // TODO(titzer): mock the GraphReducer here for better unit testing.
90 GraphReducer graph_reducer(main_zone(), &graph); 90 GraphReducer graph_reducer(main_zone(), &graph);
91 JSTypedLowering reducer(&graph_reducer, &jsgraph, main_zone()); 91 JSTypedLowering reducer(&graph_reducer, &jsgraph, main_zone());
92 Reduction reduction = reducer.Reduce(node); 92 Reduction reduction = reducer.Reduce(node);
(...skipping 25 matching lines...) Expand all
118 Node* ReduceUnop(const Operator* op, Type* input_type) { 118 Node* ReduceUnop(const Operator* op, Type* input_type) {
119 return reduce(Unop(op, Parameter(input_type))); 119 return reduce(Unop(op, Parameter(input_type)));
120 } 120 }
121 121
122 Node* ReduceBinop(const Operator* op, Type* left_type, Type* right_type) { 122 Node* ReduceBinop(const Operator* op, Type* left_type, Type* right_type) {
123 return reduce(Binop(op, Parameter(left_type, 0), Parameter(right_type, 1))); 123 return reduce(Binop(op, Parameter(left_type, 0), Parameter(right_type, 1)));
124 } 124 }
125 125
126 Node* Binop(const Operator* op, Node* left, Node* right) { 126 Node* Binop(const Operator* op, Node* left, Node* right) {
127 // JS binops also require context, effect, and control 127 // JS binops also require context, effect, and control
128 if (OperatorProperties::GetFrameStateInputCount(op) == 1) { 128 std::vector<Node*> inputs;
129 return graph.NewNode(op, left, right, context(), 129 inputs.push_back(left);
130 EmptyFrameState(context()), start(), control()); 130 inputs.push_back(right);
131 } else if (OperatorProperties::GetFrameStateInputCount(op) == 2) { 131 if (OperatorProperties::HasContextInput(op)) {
132 return graph.NewNode(op, left, right, context(), 132 inputs.push_back(context());
133 EmptyFrameState(context()),
134 EmptyFrameState(context()), start(), control());
135 } else {
136 return graph.NewNode(op, left, right, context(), start(), control());
137 } 133 }
134 for (int i = 0; i < OperatorProperties::GetFrameStateInputCount(op); i++) {
135 inputs.push_back(EmptyFrameState(context()));
136 }
137 if (op->EffectInputCount() > 0) {
138 inputs.push_back(start());
139 }
140 if (op->ControlInputCount() > 0) {
141 inputs.push_back(control());
142 }
143 return graph.NewNode(op, static_cast<int>(inputs.size()),
144 &(inputs.front()));
138 } 145 }
139 146
140 Node* Unop(const Operator* op, Node* input) { 147 Node* Unop(const Operator* op, Node* input) {
141 // JS unops also require context, effect, and control 148 // JS unops also require context, effect, and control
142 if (OperatorProperties::GetFrameStateInputCount(op) > 0) { 149 if (OperatorProperties::GetFrameStateInputCount(op) > 0) {
143 DCHECK(OperatorProperties::GetFrameStateInputCount(op) == 1); 150 DCHECK(OperatorProperties::GetFrameStateInputCount(op) == 1);
144 return graph.NewNode(op, input, context(), EmptyFrameState(context()), 151 return graph.NewNode(op, input, context(), EmptyFrameState(context()),
145 start(), control()); 152 start(), control());
146 } else { 153 } else {
147 return graph.NewNode(op, input, context(), start(), control()); 154 return graph.NewNode(op, input, context(), start(), control());
(...skipping 673 matching lines...) Expand 10 before | Expand all | Expand 10 after
821 828
822 829
823 // Helper function for strict and non-strict equality reductions. 830 // Helper function for strict and non-strict equality reductions.
824 void CheckEqualityReduction(JSTypedLoweringTester* R, bool strict, Node* l, 831 void CheckEqualityReduction(JSTypedLoweringTester* R, bool strict, Node* l,
825 Node* r, IrOpcode::Value expected) { 832 Node* r, IrOpcode::Value expected) {
826 for (int j = 0; j < 2; j++) { 833 for (int j = 0; j < 2; j++) {
827 Node* p0 = j == 0 ? l : r; 834 Node* p0 = j == 0 ? l : r;
828 Node* p1 = j == 1 ? l : r; 835 Node* p1 = j == 1 ? l : r;
829 836
830 { 837 {
831 Node* eq = strict ? R->graph.NewNode(R->javascript.StrictEqual(), p0, p1) 838 Node* eq = strict
832 : R->Binop(R->javascript.Equal(), p0, p1); 839 ? R->graph.NewNode(R->javascript.StrictEqual(), p0, p1,
840 R->context())
841 : R->Binop(R->javascript.Equal(), p0, p1);
833 Node* r = R->reduce(eq); 842 Node* r = R->reduce(eq);
834 R->CheckPureBinop(expected, r); 843 R->CheckPureBinop(expected, r);
835 } 844 }
836 845
837 { 846 {
838 Node* ne = strict 847 Node* ne = strict
839 ? R->graph.NewNode(R->javascript.StrictNotEqual(), p0, p1) 848 ? R->graph.NewNode(R->javascript.StrictNotEqual(), p0, p1,
849 R->context())
840 : R->Binop(R->javascript.NotEqual(), p0, p1); 850 : R->Binop(R->javascript.NotEqual(), p0, p1);
841 Node* n = R->reduce(ne); 851 Node* n = R->reduce(ne);
842 CHECK_EQ(IrOpcode::kBooleanNot, n->opcode()); 852 CHECK_EQ(IrOpcode::kBooleanNot, n->opcode());
843 Node* r = n->InputAt(0); 853 Node* r = n->InputAt(0);
844 R->CheckPureBinop(expected, r); 854 R->CheckPureBinop(expected, r);
845 } 855 }
846 } 856 }
847 } 857 }
848 858
849 859
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after
1248 CHECK_EQ(p1, r->InputAt(0)); 1258 CHECK_EQ(p1, r->InputAt(0));
1249 CHECK_EQ(p0, r->InputAt(1)); 1259 CHECK_EQ(p0, r->InputAt(1));
1250 } else { 1260 } else {
1251 CHECK_EQ(p0, r->InputAt(0)); 1261 CHECK_EQ(p0, r->InputAt(0));
1252 CHECK_EQ(p1, r->InputAt(1)); 1262 CHECK_EQ(p1, r->InputAt(1));
1253 } 1263 }
1254 } 1264 }
1255 } 1265 }
1256 } 1266 }
1257 } 1267 }
OLDNEW
« no previous file with comments | « test/cctest/compiler/test-js-context-specialization.cc ('k') | test/cctest/compiler/test-machine-operator-reducer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698