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

Side by Side Diff: test/cctest/compiler/test-control-reducer.cc

Issue 1186033006: [turbofan] Introduce DeadValue and DeadEffect operators. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressed comments. Created 5 years, 6 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
« no previous file with comments | « src/compiler/verifier.cc ('k') | test/cctest/compiler/test-loop-analysis.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/v8.h" 5 #include "src/v8.h"
6 #include "test/cctest/cctest.h" 6 #include "test/cctest/cctest.h"
7 7
8 #include "src/base/bits.h" 8 #include "src/base/bits.h"
9 #include "src/compiler/all-nodes.h" 9 #include "src/compiler/all-nodes.h"
10 #include "src/compiler/common-operator.h" 10 #include "src/compiler/common-operator.h"
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 common(main_zone()), 68 common(main_zone()),
69 graph(main_zone()), 69 graph(main_zone()),
70 jsgraph(main_isolate(), &graph, &common, NULL, NULL), 70 jsgraph(main_isolate(), &graph, &common, NULL, NULL),
71 start(graph.NewNode(common.Start(1))), 71 start(graph.NewNode(common.Start(1))),
72 end(graph.NewNode(common.End(1), start)), 72 end(graph.NewNode(common.End(1), start)),
73 p0(graph.NewNode(common.Parameter(0), start)), 73 p0(graph.NewNode(common.Parameter(0), start)),
74 zero(jsgraph.Int32Constant(0)), 74 zero(jsgraph.Int32Constant(0)),
75 one(jsgraph.OneConstant()), 75 one(jsgraph.OneConstant()),
76 half(jsgraph.Constant(0.5)), 76 half(jsgraph.Constant(0.5)),
77 self(graph.NewNode(common.Int32Constant(0xaabbccdd))), 77 self(graph.NewNode(common.Int32Constant(0xaabbccdd))),
78 dead(graph.NewNode(common.Dead())) { 78 dead(graph.NewNode(common.DeadControl())) {
79 graph.SetEnd(end); 79 graph.SetEnd(end);
80 graph.SetStart(start); 80 graph.SetStart(start);
81 leaf[0] = zero; 81 leaf[0] = zero;
82 leaf[1] = one; 82 leaf[1] = one;
83 leaf[2] = half; 83 leaf[2] = half;
84 leaf[3] = p0; 84 leaf[3] = p0;
85 } 85 }
86 86
87 Isolate* isolate; 87 Isolate* isolate;
88 CommonOperatorBuilder common; 88 CommonOperatorBuilder common;
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 ReduceGraph(); 178 ReduceGraph();
179 CheckInputs(end, expect); 179 CheckInputs(end, expect);
180 } 180 }
181 181
182 void ReduceBranch(Decision expected, Node* branch) { 182 void ReduceBranch(Decision expected, Node* branch) {
183 Node* control = branch->InputAt(1); 183 Node* control = branch->InputAt(1);
184 for (Node* use : branch->uses()) { 184 for (Node* use : branch->uses()) {
185 if (use->opcode() == IrOpcode::kIfTrue) { 185 if (use->opcode() == IrOpcode::kIfTrue) {
186 Node* result = ControlReducer::ReduceIfNodeForTesting(&jsgraph, use); 186 Node* result = ControlReducer::ReduceIfNodeForTesting(&jsgraph, use);
187 if (expected == kTrue) CHECK_EQ(control, result); 187 if (expected == kTrue) CHECK_EQ(control, result);
188 if (expected == kFalse) CHECK_EQ(IrOpcode::kDead, result->opcode()); 188 if (expected == kFalse) {
189 CHECK_EQ(IrOpcode::kDeadControl, result->opcode());
190 }
189 if (expected == kUnknown) CHECK_EQ(use, result); 191 if (expected == kUnknown) CHECK_EQ(use, result);
190 } else if (use->opcode() == IrOpcode::kIfFalse) { 192 } else if (use->opcode() == IrOpcode::kIfFalse) {
191 Node* result = ControlReducer::ReduceIfNodeForTesting(&jsgraph, use); 193 Node* result = ControlReducer::ReduceIfNodeForTesting(&jsgraph, use);
192 if (expected == kFalse) CHECK_EQ(control, result); 194 if (expected == kFalse) CHECK_EQ(control, result);
193 if (expected == kTrue) CHECK_EQ(IrOpcode::kDead, result->opcode()); 195 if (expected == kTrue) {
196 CHECK_EQ(IrOpcode::kDeadControl, result->opcode());
197 }
194 if (expected == kUnknown) CHECK_EQ(use, result); 198 if (expected == kUnknown) CHECK_EQ(use, result);
195 } else { 199 } else {
196 UNREACHABLE(); 200 UNREACHABLE();
197 } 201 }
198 } 202 }
199 } 203 }
200 204
201 Node* Return(Node* val, Node* effect, Node* control) { 205 Node* Return(Node* val, Node* effect, Node* control) {
202 Node* ret = graph.NewNode(common.Return(), val, effect, control); 206 Node* ret = graph.NewNode(common.Return(), val, effect, control);
203 end->ReplaceInput(0, ret); 207 end->ReplaceInput(0, ret);
(...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 790
787 for (int i = 0; i < kSelectorSize; i++) { // set up dead merge inputs. 791 for (int i = 0; i < kSelectorSize; i++) { // set up dead merge inputs.
788 if (!selector.is_selected(i)) merge->ReplaceInput(i, R.dead); 792 if (!selector.is_selected(i)) merge->ReplaceInput(i, R.dead);
789 } 793 }
790 794
791 Node* result = ControlReducer::ReduceMerge(&R.jsgraph, merge); 795 Node* result = ControlReducer::ReduceMerge(&R.jsgraph, merge);
792 796
793 int count = selector.count; 797 int count = selector.count;
794 if (count == 0) { 798 if (count == 0) {
795 // result should be dead. 799 // result should be dead.
796 CHECK_EQ(IrOpcode::kDead, result->opcode()); 800 CHECK_EQ(IrOpcode::kDeadControl, result->opcode());
797 } else if (count == 1) { 801 } else if (count == 1) {
798 // merge should be replaced with one of the controls. 802 // merge should be replaced with one of the controls.
799 CHECK_EQ(controls[selector.single_index()], result); 803 CHECK_EQ(controls[selector.single_index()], result);
800 // Phis should have been directly replaced. 804 // Phis should have been directly replaced.
801 CHECK_EQ(values[selector.single_index()], phi_use->InputAt(0)); 805 CHECK_EQ(values[selector.single_index()], phi_use->InputAt(0));
802 CHECK_EQ(effects[selector.single_index()], ephi_use->InputAt(0)); 806 CHECK_EQ(effects[selector.single_index()], ephi_use->InputAt(0));
803 } else { 807 } else {
804 // Otherwise, nodes should be edited in place. 808 // Otherwise, nodes should be edited in place.
805 CHECK_EQ(merge, result); 809 CHECK_EQ(merge, result);
806 selector.CheckNode(merge, IrOpcode::kMerge, controls, NULL); 810 selector.CheckNode(merge, IrOpcode::kMerge, controls, NULL);
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after
1405 1409
1406 R.ReduceGraph(); // d1 gets folded true. 1410 R.ReduceGraph(); // d1 gets folded true.
1407 1411
1408 CheckInputs(ret, y2, R.start, R.start); 1412 CheckInputs(ret, y2, R.start, R.start);
1409 1413
1410 DeadChecker dead(&R.graph); 1414 DeadChecker dead(&R.graph);
1411 dead.Check(d1); 1415 dead.Check(d1);
1412 dead.Check(d2); 1416 dead.Check(d2);
1413 dead.Check(d3); 1417 dead.Check(d3);
1414 } 1418 }
OLDNEW
« no previous file with comments | « src/compiler/verifier.cc ('k') | test/cctest/compiler/test-loop-analysis.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698