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

Side by Side Diff: test/cctest/compiler/test-osr.cc

Issue 1513543003: [turbofan] Make MachineType a pair of enums. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Moar rebase Created 5 years 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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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/codegen.h" 5 #include "src/codegen.h"
6 #include "src/compiler/all-nodes.h" 6 #include "src/compiler/all-nodes.h"
7 #include "src/compiler/common-operator.h" 7 #include "src/compiler/common-operator.h"
8 #include "src/compiler/diamond.h" 8 #include "src/compiler/diamond.h"
9 #include "src/compiler/graph.h" 9 #include "src/compiler/graph.h"
10 #include "src/compiler/js-graph.h" 10 #include "src/compiler/js-graph.h"
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 CHECK_EQ(loop->InputCount(), count); 84 CHECK_EQ(loop->InputCount(), count);
85 CHECK_EQ(osr_loop_entry, loop->InputAt(1)); 85 CHECK_EQ(osr_loop_entry, loop->InputAt(1));
86 86
87 Node* inputs[6]; 87 Node* inputs[6];
88 inputs[0] = incoming; 88 inputs[0] = incoming;
89 inputs[1] = osr_values[osr_value]; 89 inputs[1] = osr_values[osr_value];
90 if (count > 2) inputs[2] = back1; 90 if (count > 2) inputs[2] = back1;
91 if (count > 3) inputs[3] = back2; 91 if (count > 3) inputs[3] = back2;
92 if (count > 4) inputs[4] = back3; 92 if (count > 4) inputs[4] = back3;
93 inputs[count] = loop; 93 inputs[count] = loop;
94 return graph.NewNode(common.Phi(kMachAnyTagged, count), count + 1, inputs); 94 return graph.NewNode(common.Phi(MachineRepresentation::kTagged, count),
95 count + 1, inputs);
95 } 96 }
96 97
97 Node* NewLoop(bool is_osr, int num_backedges, Node* entry = nullptr) { 98 Node* NewLoop(bool is_osr, int num_backedges, Node* entry = nullptr) {
98 if (entry == nullptr) entry = osr_normal_entry; 99 if (entry == nullptr) entry = osr_normal_entry;
99 Node* loop = graph.NewNode(common.Loop(1), entry); 100 Node* loop = graph.NewNode(common.Loop(1), entry);
100 if (is_osr) { 101 if (is_osr) {
101 loop->AppendInput(graph.zone(), osr_loop_entry); 102 loop->AppendInput(graph.zone(), osr_loop_entry);
102 } 103 }
103 for (int i = 0; i < num_backedges; i++) { 104 for (int i = 0; i < num_backedges; i++) {
104 loop->AppendInput(graph.zone(), loop); 105 loop->AppendInput(graph.zone(), loop);
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 loop->ReplaceInput(loop->InputCount() - 1, if_true); 308 loop->ReplaceInput(loop->InputCount() - 1, if_true);
308 } 309 }
309 310
310 void Nest(While& that) { 311 void Nest(While& that) {
311 that.loop->ReplaceInput(that.loop->InputCount() - 1, exit); 312 that.loop->ReplaceInput(that.loop->InputCount() - 1, exit);
312 this->loop->ReplaceInput(0, that.if_true); 313 this->loop->ReplaceInput(0, that.if_true);
313 } 314 }
314 315
315 Node* Phi(Node* i1, Node* i2, Node* i3) { 316 Node* Phi(Node* i1, Node* i2, Node* i3) {
316 if (loop->InputCount() == 2) { 317 if (loop->InputCount() == 2) {
317 return t.graph.NewNode(t.common.Phi(kMachAnyTagged, 2), i1, i2, loop); 318 return t.graph.NewNode(t.common.Phi(MachineRepresentation::kTagged, 2),
319 i1, i2, loop);
318 } else { 320 } else {
319 return t.graph.NewNode(t.common.Phi(kMachAnyTagged, 3), i1, i2, i3, loop); 321 return t.graph.NewNode(t.common.Phi(MachineRepresentation::kTagged, 3),
322 i1, i2, i3, loop);
320 } 323 }
321 } 324 }
322 }; 325 };
323 326
324 327
325 static Node* FindSuccessor(Node* node, IrOpcode::Value opcode) { 328 static Node* FindSuccessor(Node* node, IrOpcode::Value opcode) {
326 for (Node* use : node->uses()) { 329 for (Node* use : node->uses()) {
327 if (use->opcode() == opcode) return use; 330 if (use->opcode() == opcode) return use;
328 } 331 }
329 UNREACHABLE(); // should have been found. 332 UNREACHABLE(); // should have been found.
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 469
467 Node* MakeCounter(JSGraph* jsgraph, Node* start, Node* loop) { 470 Node* MakeCounter(JSGraph* jsgraph, Node* start, Node* loop) {
468 int count = loop->InputCount(); 471 int count = loop->InputCount();
469 NodeVector tmp_inputs(jsgraph->graph()->zone()); 472 NodeVector tmp_inputs(jsgraph->graph()->zone());
470 for (int i = 0; i < count; i++) { 473 for (int i = 0; i < count; i++) {
471 tmp_inputs.push_back(start); 474 tmp_inputs.push_back(start);
472 } 475 }
473 tmp_inputs.push_back(loop); 476 tmp_inputs.push_back(loop);
474 477
475 Node* phi = jsgraph->graph()->NewNode( 478 Node* phi = jsgraph->graph()->NewNode(
476 jsgraph->common()->Phi(kMachInt32, count), count + 1, &tmp_inputs[0]); 479 jsgraph->common()->Phi(MachineRepresentation::kWord32, count), count + 1,
480 &tmp_inputs[0]);
477 Node* inc = jsgraph->graph()->NewNode(&kIntAdd, phi, jsgraph->OneConstant()); 481 Node* inc = jsgraph->graph()->NewNode(&kIntAdd, phi, jsgraph->OneConstant());
478 482
479 for (int i = 1; i < count; i++) { 483 for (int i = 1; i < count; i++) {
480 phi->ReplaceInput(i, inc); 484 phi->ReplaceInput(i, inc);
481 } 485 }
482 return phi; 486 return phi;
483 } 487 }
484 488
485 489
486 TEST(Deconstruct_osr_nested3) { 490 TEST(Deconstruct_osr_nested3) {
487 OsrDeconstructorTester T(1); 491 OsrDeconstructorTester T(1);
488 492
489 // outermost loop. 493 // outermost loop.
490 While loop0(T, T.p0, false, 1); 494 While loop0(T, T.p0, false, 1);
491 Node* loop0_cntr = MakeCounter(&T.jsgraph, T.p0, loop0.loop); 495 Node* loop0_cntr = MakeCounter(&T.jsgraph, T.p0, loop0.loop);
492 loop0.branch->ReplaceInput(0, loop0_cntr); 496 loop0.branch->ReplaceInput(0, loop0_cntr);
493 497
494 // middle loop. 498 // middle loop.
495 Node* loop1 = T.graph.NewNode(T.common.Loop(1), loop0.if_true); 499 Node* loop1 = T.graph.NewNode(T.common.Loop(1), loop0.if_true);
496 Node* loop1_phi = T.graph.NewNode(T.common.Phi(kMachAnyTagged, 2), loop0_cntr, 500 Node* loop1_phi =
497 loop0_cntr, loop1); 501 T.graph.NewNode(T.common.Phi(MachineRepresentation::kTagged, 2),
502 loop0_cntr, loop0_cntr, loop1);
498 503
499 // innermost (OSR) loop. 504 // innermost (OSR) loop.
500 While loop2(T, T.p0, true, 1); 505 While loop2(T, T.p0, true, 1);
501 loop2.loop->ReplaceInput(0, loop1); 506 loop2.loop->ReplaceInput(0, loop1);
502 507
503 Node* loop2_cntr = MakeCounter(&T.jsgraph, loop1_phi, loop2.loop); 508 Node* loop2_cntr = MakeCounter(&T.jsgraph, loop1_phi, loop2.loop);
504 loop2_cntr->ReplaceInput(1, T.osr_values[0]); 509 loop2_cntr->ReplaceInput(1, T.osr_values[0]);
505 Node* osr_phi = loop2_cntr; 510 Node* osr_phi = loop2_cntr;
506 Node* loop2_inc = loop2_cntr->InputAt(2); 511 Node* loop2_inc = loop2_cntr->InputAt(2);
507 loop2.branch->ReplaceInput(0, loop2_cntr); 512 loop2.branch->ReplaceInput(0, loop2_cntr);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 CHECK_EQ(new_loop0_phi, FindSuccessor(new_loop0_loop, IrOpcode::kPhi)); 566 CHECK_EQ(new_loop0_phi, FindSuccessor(new_loop0_loop, IrOpcode::kPhi));
562 567
563 // Check that the return returns the phi from the OSR loop and control 568 // Check that the return returns the phi from the OSR loop and control
564 // depends on the copy of the outer loop0. 569 // depends on the copy of the outer loop0.
565 CheckInputs(new_ret, new_loop0_phi, T.graph.start(), new_loop0_exit); 570 CheckInputs(new_ret, new_loop0_phi, T.graph.start(), new_loop0_exit);
566 } 571 }
567 572
568 } // namespace compiler 573 } // namespace compiler
569 } // namespace internal 574 } // namespace internal
570 } // namespace v8 575 } // namespace v8
OLDNEW
« no previous file with comments | « test/cctest/compiler/test-multiple-return.cc ('k') | test/cctest/compiler/test-representation-change.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698