| OLD | NEW |
| 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 505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 516 OsrDeconstructorTester T(1); | 516 OsrDeconstructorTester T(1); |
| 517 | 517 |
| 518 // outermost loop. | 518 // outermost loop. |
| 519 While loop0(T, T.p0, false, 1); | 519 While loop0(T, T.p0, false, 1); |
| 520 Node* loop0_cntr = MakeCounter(&T.jsgraph, T.p0, loop0.loop); | 520 Node* loop0_cntr = MakeCounter(&T.jsgraph, T.p0, loop0.loop); |
| 521 loop0.branch->ReplaceInput(0, loop0_cntr); | 521 loop0.branch->ReplaceInput(0, loop0_cntr); |
| 522 | 522 |
| 523 // middle loop. | 523 // middle loop. |
| 524 Node* loop1 = T.graph.NewNode(T.common.Loop(2), loop0.if_true, T.self); | 524 Node* loop1 = T.graph.NewNode(T.common.Loop(2), loop0.if_true, T.self); |
| 525 loop1->ReplaceInput(0, loop0.if_true); | 525 loop1->ReplaceInput(0, loop0.if_true); |
| 526 Node* loop1_phi = | 526 Node* loop1_phi = T.graph.NewNode(T.common.Phi(kMachAnyTagged, 2), loop0_cntr, |
| 527 T.graph.NewNode(T.common.Phi(kMachAnyTagged, 2), loop0_cntr, loop0_cntr); | 527 loop0_cntr, loop1); |
| 528 | 528 |
| 529 // innermost (OSR) loop. | 529 // innermost (OSR) loop. |
| 530 While loop2(T, T.p0, true, 1); | 530 While loop2(T, T.p0, true, 1); |
| 531 loop2.loop->ReplaceInput(0, loop1); | 531 loop2.loop->ReplaceInput(0, loop1); |
| 532 | 532 |
| 533 Node* loop2_cntr = MakeCounter(&T.jsgraph, loop1_phi, loop2.loop); | 533 Node* loop2_cntr = MakeCounter(&T.jsgraph, loop1_phi, loop2.loop); |
| 534 loop2_cntr->ReplaceInput(1, T.osr_values[0]); | 534 loop2_cntr->ReplaceInput(1, T.osr_values[0]); |
| 535 Node* osr_phi = loop2_cntr; | 535 Node* osr_phi = loop2_cntr; |
| 536 Node* loop2_inc = loop2_cntr->InputAt(2); | 536 Node* loop2_inc = loop2_cntr->InputAt(2); |
| 537 loop2.branch->ReplaceInput(0, loop2_cntr); | 537 loop2.branch->ReplaceInput(0, loop2_cntr); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 586 | 586 |
| 587 Node* new_loop0_phi = new_ret->InputAt(0); | 587 Node* new_loop0_phi = new_ret->InputAt(0); |
| 588 CHECK_EQ(IrOpcode::kPhi, new_loop0_phi->opcode()); | 588 CHECK_EQ(IrOpcode::kPhi, new_loop0_phi->opcode()); |
| 589 CHECK_EQ(new_loop0_loop, NodeProperties::GetControlInput(new_loop0_phi)); | 589 CHECK_EQ(new_loop0_loop, NodeProperties::GetControlInput(new_loop0_phi)); |
| 590 CHECK_EQ(new_loop0_phi, FindSuccessor(new_loop0_loop, IrOpcode::kPhi)); | 590 CHECK_EQ(new_loop0_phi, FindSuccessor(new_loop0_loop, IrOpcode::kPhi)); |
| 591 | 591 |
| 592 // Check that the return returns the phi from the OSR loop and control | 592 // Check that the return returns the phi from the OSR loop and control |
| 593 // depends on the copy of the outer loop0. | 593 // depends on the copy of the outer loop0. |
| 594 CheckInputs(new_ret, new_loop0_phi, T.graph.start(), new_loop0_exit); | 594 CheckInputs(new_ret, new_loop0_phi, T.graph.start(), new_loop0_exit); |
| 595 } | 595 } |
| OLD | NEW |