OLD | NEW |
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/common-operator.h" | 9 #include "src/compiler/common-operator.h" |
10 #include "src/compiler/control-reducer.h" | 10 #include "src/compiler/control-reducer.h" |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 ControlReducer::ReduceGraph(main_zone(), &jsgraph, &common); | 146 ControlReducer::ReduceGraph(main_zone(), &jsgraph, &common); |
147 } | 147 } |
148 | 148 |
149 // Checks one-step reduction of a phi. | 149 // Checks one-step reduction of a phi. |
150 void ReducePhi(Node* expect, Node* phi) { | 150 void ReducePhi(Node* expect, Node* phi) { |
151 Node* result = ControlReducer::ReducePhiForTesting(&jsgraph, &common, phi); | 151 Node* result = ControlReducer::ReducePhiForTesting(&jsgraph, &common, phi); |
152 CHECK_EQ(expect, result); | 152 CHECK_EQ(expect, result); |
153 ReducePhiIterative(expect, phi); // iterative should give the same result. | 153 ReducePhiIterative(expect, phi); // iterative should give the same result. |
154 } | 154 } |
155 | 155 |
| 156 // Checks one-step reduction of a phi. |
| 157 void ReducePhiNonIterative(Node* expect, Node* phi) { |
| 158 Node* result = ControlReducer::ReducePhiForTesting(&jsgraph, &common, phi); |
| 159 CHECK_EQ(expect, result); |
| 160 } |
| 161 |
156 void ReducePhiIterative(Node* expect, Node* phi) { | 162 void ReducePhiIterative(Node* expect, Node* phi) { |
157 p0->ReplaceInput(0, start); // hack: parameters may be trimmed. | 163 p0->ReplaceInput(0, start); // hack: parameters may be trimmed. |
158 Node* ret = graph.NewNode(common.Return(), phi, start, start); | 164 Node* ret = graph.NewNode(common.Return(), phi, start, start); |
159 Node* end = graph.NewNode(common.End(), ret); | 165 Node* end = graph.NewNode(common.End(), ret); |
160 graph.SetEnd(end); | 166 graph.SetEnd(end); |
161 ControlReducer::ReduceGraph(main_zone(), &jsgraph, &common); | 167 ControlReducer::ReduceGraph(main_zone(), &jsgraph, &common); |
162 CheckInputs(end, ret); | 168 CheckInputs(end, ret); |
163 CheckInputs(ret, expect, start, start); | 169 CheckInputs(ret, expect, start, start); |
164 } | 170 } |
165 | 171 |
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
477 Node* a = R.leaf[i]; | 483 Node* a = R.leaf[i]; |
478 R.ReducePhi(a, R.Phi(R.self, a)); | 484 R.ReducePhi(a, R.Phi(R.self, a)); |
479 R.ReducePhi(a, R.Phi(a, R.self)); | 485 R.ReducePhi(a, R.Phi(a, R.self)); |
480 R.ReducePhi(a, R.Phi(R.self, a, R.dead)); | 486 R.ReducePhi(a, R.Phi(R.self, a, R.dead)); |
481 R.ReducePhi(a, R.Phi(a, R.self, R.dead)); | 487 R.ReducePhi(a, R.Phi(a, R.self, R.dead)); |
482 } | 488 } |
483 | 489 |
484 for (size_t i = 1; i < kNumLeafs; i++) { | 490 for (size_t i = 1; i < kNumLeafs; i++) { |
485 Node* a = R.leaf[i], *b = R.leaf[0]; | 491 Node* a = R.leaf[i], *b = R.leaf[0]; |
486 Node* phi1 = R.Phi(b, a, R.dead); | 492 Node* phi1 = R.Phi(b, a, R.dead); |
487 R.ReducePhi(phi1, phi1); | 493 R.ReducePhiNonIterative(phi1, phi1); |
488 | 494 |
489 Node* phi2 = R.Phi(a, b, R.dead); | 495 Node* phi2 = R.Phi(a, b, R.dead); |
490 R.ReducePhi(phi2, phi2); | 496 R.ReducePhiNonIterative(phi2, phi2); |
491 } | 497 } |
492 } | 498 } |
493 | 499 |
494 | 500 |
495 TEST(CReducePhi3) { | 501 TEST(CReducePhi3) { |
496 ControlReducerTester R; | 502 ControlReducerTester R; |
497 | 503 |
498 for (size_t i = 0; i < kNumLeafs; i++) { | 504 for (size_t i = 0; i < kNumLeafs; i++) { |
499 Node* a = R.leaf[i]; | 505 Node* a = R.leaf[i]; |
500 R.ReducePhi(a, R.Phi(a, a, a)); | 506 R.ReducePhi(a, R.Phi(a, a, a)); |
(...skipping 1003 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1504 | 1510 |
1505 Node* ret = R.Return(d1.phi, R.start, d1.merge); | 1511 Node* ret = R.Return(d1.phi, R.start, d1.merge); |
1506 | 1512 |
1507 R.ReduceGraph(); // d1 gets folded true. | 1513 R.ReduceGraph(); // d1 gets folded true. |
1508 | 1514 |
1509 CheckInputs(ret, y2, R.start, R.start); | 1515 CheckInputs(ret, y2, R.start, R.start); |
1510 CheckDeadDiamond(d1); | 1516 CheckDeadDiamond(d1); |
1511 CheckDeadDiamond(d2); | 1517 CheckDeadDiamond(d2); |
1512 CheckDeadDiamond(d3); | 1518 CheckDeadDiamond(d3); |
1513 } | 1519 } |
OLD | NEW |