17d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 27d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 37d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// found in the LICENSE file. 47d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 57d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/v8.h" 67d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "test/cctest/cctest.h" 77d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 87d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/common-operator.h" 97d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/generic-node-inl.h" 107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/generic-node.h" 117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/graph.h" 127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/graph-visualizer.h" 137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/js-operator.h" 147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/machine-operator.h" 157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/node.h" 167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/operator.h" 177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/schedule.h" 187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/scheduler.h" 19fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org#include "src/compiler/verifier.h" 207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgusing namespace v8::internal; 227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgusing namespace v8::internal::compiler; 237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 24fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org// TODO(titzer): pull RPO tests out to their own file. 257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgstruct TestLoop { 267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int count; 277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock** nodes; 287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* header() { return nodes[0]; } 297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* last() { return nodes[count - 1]; } 307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org ~TestLoop() { delete[] nodes; } 317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}; 327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgstatic TestLoop* CreateLoop(Schedule* schedule, int count) { 357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org TestLoop* loop = new TestLoop(); 367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org loop->count = count; 377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org loop->nodes = new BasicBlock* [count]; 387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int i = 0; i < count; i++) { 397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org loop->nodes[i] = schedule->NewBasicBlock(); 407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org if (i > 0) schedule->AddSuccessor(loop->nodes[i - 1], loop->nodes[i]); 417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule->AddSuccessor(loop->nodes[count - 1], loop->nodes[0]); 437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org return loop; 447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgstatic void CheckRPONumbers(BasicBlockVector* order, int expected, 487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org bool loops_allowed) { 497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(expected, static_cast<int>(order->size())); 507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int i = 0; i < static_cast<int>(order->size()); i++) { 517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(order->at(i)->rpo_number_ == i); 527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org if (!loops_allowed) CHECK_LT(order->at(i)->loop_end_, 0); 537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgstatic void CheckLoopContains(BasicBlock** blocks, int body_size) { 587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* header = blocks[0]; 597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_GT(header->loop_end_, 0); 607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(body_size, (header->loop_end_ - header->rpo_number_)); 617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int i = 0; i < body_size; i++) { 627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int num = blocks[i]->rpo_number_; 637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(num >= header->rpo_number_ && num < header->loop_end_); 647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(header->LoopContains(blocks[i])); 657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(header->IsLoopHeader() || blocks[i]->loop_header_ == header); 667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 70fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.orgstatic int GetScheduledNodeCount(Schedule* schedule) { 71fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org int node_count = 0; 72fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org for (BasicBlockVectorIter i = schedule->rpo_order()->begin(); 73fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org i != schedule->rpo_order()->end(); ++i) { 74fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org BasicBlock* block = *i; 75fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org for (BasicBlock::const_iterator j = block->begin(); j != block->end(); 76fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org ++j) { 77fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org ++node_count; 78fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org } 79fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org BasicBlock::Control control = block->control_; 80fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org if (control != BasicBlock::kNone) { 81fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org ++node_count; 82fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org } 83fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org } 84fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org return node_count; 85fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org} 86fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 87fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 88fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.orgstatic Schedule* ComputeAndVerifySchedule(int expected, Graph* graph) { 89fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org if (FLAG_trace_turbo) { 90fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org OFStream os(stdout); 91fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org os << AsDOT(*graph); 92fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org } 93fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 94fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Schedule* schedule = Scheduler::ComputeSchedule(graph); 95fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 96fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org if (FLAG_trace_turbo_scheduler) { 97fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org OFStream os(stdout); 98fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org os << *schedule << endl; 99fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org } 100fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org ScheduleVerifier::Run(schedule); 101fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org CHECK_EQ(expected, GetScheduledNodeCount(schedule)); 102fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org return schedule; 103fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org} 104fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 105fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 1067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPODegenerate1) { 1077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 1087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 1097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 11031c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 1117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckRPONumbers(order, 1, false); 1125e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org CHECK_EQ(schedule.start(), order->at(0)); 1137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 1147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPODegenerate2) { 1177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 1187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 1197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1205e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org schedule.AddGoto(schedule.start(), schedule.end()); 12131c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 1227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckRPONumbers(order, 2, false); 1235e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org CHECK_EQ(schedule.start(), order->at(0)); 1245e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org CHECK_EQ(schedule.end(), order->at(1)); 1257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 1267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPOLine) { 1297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 1307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int i = 0; i < 10; i++) { 1327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 1337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1345e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* last = schedule.start(); 1357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int j = 0; j < i; j++) { 1367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* block = schedule.NewBasicBlock(); 1377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddGoto(last, block); 1387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org last = block; 1397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 14031c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 1417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckRPONumbers(order, 1 + i, false); 1427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule::BasicBlocks blocks(schedule.all_blocks()); 1447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (Schedule::BasicBlocks::iterator iter = blocks.begin(); 1457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org iter != blocks.end(); ++iter) { 1467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* block = *iter; 1477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org if (block->rpo_number_ >= 0 && block->SuccessorCount() == 1) { 1487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(block->rpo_number_ + 1 == block->SuccessorAt(0)->rpo_number_); 1497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 1507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 1517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 1527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 1537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPOSelfLoop) { 1567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 1577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 1585e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org schedule.AddSuccessor(schedule.start(), schedule.start()); 15931c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 1607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckRPONumbers(order, 1, true); 1615e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* loop[] = {schedule.start()}; 1627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop, 1); 1637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 1647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPOEntryLoop) { 1677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 1687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 1695e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org schedule.AddSuccessor(schedule.start(), schedule.end()); 1705e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org schedule.AddSuccessor(schedule.end(), schedule.start()); 17131c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 1727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckRPONumbers(order, 2, true); 1735e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* loop[] = {schedule.start(), schedule.end()}; 1747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop, 2); 1757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 1767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPOEndLoop) { 1797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 1807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 1817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org SmartPointer<TestLoop> loop1(CreateLoop(&schedule, 2)); 1825e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org schedule.AddSuccessor(schedule.start(), loop1->header()); 18331c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 1847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckRPONumbers(order, 3, true); 1857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop1->nodes, loop1->count); 1867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 1877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPOEndLoopNested) { 1907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 1917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 1927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org SmartPointer<TestLoop> loop1(CreateLoop(&schedule, 2)); 1935e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org schedule.AddSuccessor(schedule.start(), loop1->header()); 1945e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org schedule.AddSuccessor(loop1->last(), schedule.start()); 19531c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 1967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckRPONumbers(order, 3, true); 1977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop1->nodes, loop1->count); 1987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 1997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPODiamond) { 2027d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 2037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 2047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2055e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* A = schedule.start(); 2067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* B = schedule.NewBasicBlock(); 2077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* C = schedule.NewBasicBlock(); 2085e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* D = schedule.end(); 2097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(A, B); 2117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(A, C); 2127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(B, D); 2137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(C, D); 2147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 21531c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 2167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckRPONumbers(order, 4, false); 2177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(0, A->rpo_number_); 2197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK((B->rpo_number_ == 1 && C->rpo_number_ == 2) || 2207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org (B->rpo_number_ == 2 && C->rpo_number_ == 1)); 2217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(3, D->rpo_number_); 2227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 2237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPOLoop1) { 2267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 2277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 2287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2295e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* A = schedule.start(); 2307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* B = schedule.NewBasicBlock(); 2317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* C = schedule.NewBasicBlock(); 2325e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* D = schedule.end(); 2337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(A, B); 2357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(B, C); 2367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(C, B); 2377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(C, D); 2387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 23931c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 2407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckRPONumbers(order, 4, true); 2417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* loop[] = {B, C}; 2427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop, 2); 2437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 2447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPOLoop2) { 2477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 2487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 2497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2505e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* A = schedule.start(); 2517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* B = schedule.NewBasicBlock(); 2527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* C = schedule.NewBasicBlock(); 2535e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* D = schedule.end(); 2547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(A, B); 2567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(B, C); 2577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(C, B); 2587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(B, D); 2597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 26031c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 2617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckRPONumbers(order, 4, true); 2627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* loop[] = {B, C}; 2637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop, 2); 2647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 2657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPOLoopN) { 2687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 2697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int i = 0; i < 11; i++) { 2717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 2725e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* A = schedule.start(); 2737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* B = schedule.NewBasicBlock(); 2747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* C = schedule.NewBasicBlock(); 2757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* D = schedule.NewBasicBlock(); 2767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* E = schedule.NewBasicBlock(); 2777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* F = schedule.NewBasicBlock(); 2785e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* G = schedule.end(); 2797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(A, B); 2817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(B, C); 2827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(C, D); 2837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(D, E); 2847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(E, F); 2857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(F, B); 2867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(B, G); 2877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // Throw in extra backedges from time to time. 2897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org if (i == 1) schedule.AddSuccessor(B, B); 2907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org if (i == 2) schedule.AddSuccessor(C, B); 2917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org if (i == 3) schedule.AddSuccessor(D, B); 2927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org if (i == 4) schedule.AddSuccessor(E, B); 2937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org if (i == 5) schedule.AddSuccessor(F, B); 2947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // Throw in extra loop exits from time to time. 2967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org if (i == 6) schedule.AddSuccessor(B, G); 2977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org if (i == 7) schedule.AddSuccessor(C, G); 2987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org if (i == 8) schedule.AddSuccessor(D, G); 2997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org if (i == 9) schedule.AddSuccessor(E, G); 3007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org if (i == 10) schedule.AddSuccessor(F, G); 3017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 30231c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 3037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckRPONumbers(order, 7, true); 3047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* loop[] = {B, C, D, E, F}; 3057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop, 5); 3067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 3077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 3087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 3097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 3107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPOLoopNest1) { 3117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 3127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 3137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 3145e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* A = schedule.start(); 3157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* B = schedule.NewBasicBlock(); 3167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* C = schedule.NewBasicBlock(); 3177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* D = schedule.NewBasicBlock(); 3187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* E = schedule.NewBasicBlock(); 3195e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* F = schedule.end(); 3207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 3217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(A, B); 3227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(B, C); 3237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(C, D); 3247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(D, C); 3257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(D, E); 3267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(E, B); 3277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(E, F); 3287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 32931c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 3307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckRPONumbers(order, 6, true); 3317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* loop1[] = {B, C, D, E}; 3327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop1, 4); 3337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 3347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* loop2[] = {C, D}; 3357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop2, 2); 3367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 3377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 3387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 3397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPOLoopNest2) { 3407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 3417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 3427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 3435e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* A = schedule.start(); 3447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* B = schedule.NewBasicBlock(); 3457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* C = schedule.NewBasicBlock(); 3467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* D = schedule.NewBasicBlock(); 3477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* E = schedule.NewBasicBlock(); 3487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* F = schedule.NewBasicBlock(); 3497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* G = schedule.NewBasicBlock(); 3505e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* H = schedule.end(); 3517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 3527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(A, B); 3537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(B, C); 3547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(C, D); 3557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(D, E); 3567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(E, F); 3577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(F, G); 3587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(G, H); 3597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 3607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(E, D); 3617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(F, C); 3627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(G, B); 3637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 36431c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 3657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckRPONumbers(order, 8, true); 3667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* loop1[] = {B, C, D, E, F, G}; 3677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop1, 6); 3687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 3697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* loop2[] = {C, D, E, F}; 3707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop2, 4); 3717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 3727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* loop3[] = {D, E}; 3737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop3, 2); 3747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 3757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 3767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 3777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPOLoopFollow1) { 3787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 3797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 3807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 3817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org SmartPointer<TestLoop> loop1(CreateLoop(&schedule, 1)); 3827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org SmartPointer<TestLoop> loop2(CreateLoop(&schedule, 1)); 3837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 3845e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* A = schedule.start(); 3855e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* E = schedule.end(); 3867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 3877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(A, loop1->header()); 3887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(loop1->header(), loop2->header()); 3897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(loop2->last(), E); 3907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 39131c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 3927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 3937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop1->nodes, loop1->count); 3947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 3957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(schedule.BasicBlockCount(), static_cast<int>(order->size())); 3967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop1->nodes, loop1->count); 3977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop2->nodes, loop2->count); 3987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 3997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPOLoopFollow2) { 4027d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 4037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 4047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org SmartPointer<TestLoop> loop1(CreateLoop(&schedule, 1)); 4067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org SmartPointer<TestLoop> loop2(CreateLoop(&schedule, 1)); 4077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4085e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* A = schedule.start(); 4097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* S = schedule.NewBasicBlock(); 4105e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* E = schedule.end(); 4117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(A, loop1->header()); 4137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(loop1->header(), S); 4147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(S, loop2->header()); 4157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(loop2->last(), E); 4167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 41731c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 4187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop1->nodes, loop1->count); 4207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(schedule.BasicBlockCount(), static_cast<int>(order->size())); 4227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop1->nodes, loop1->count); 4237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop2->nodes, loop2->count); 4247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 4257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPOLoopFollowN) { 4287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 4297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int size = 1; size < 5; size++) { 4317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int exit = 0; exit < size; exit++) { 4327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 4337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org SmartPointer<TestLoop> loop1(CreateLoop(&schedule, size)); 4347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org SmartPointer<TestLoop> loop2(CreateLoop(&schedule, size)); 4355e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* A = schedule.start(); 4365e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* E = schedule.end(); 4377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(A, loop1->header()); 4397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(loop1->nodes[exit], loop2->header()); 4407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(loop2->nodes[exit], E); 44131c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 4427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop1->nodes, loop1->count); 4437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(schedule.BasicBlockCount(), static_cast<int>(order->size())); 4457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop1->nodes, loop1->count); 4467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop2->nodes, loop2->count); 4477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 4487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 4497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 4507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPONestedLoopFollow1) { 4537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 4547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 4557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org SmartPointer<TestLoop> loop1(CreateLoop(&schedule, 1)); 4577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org SmartPointer<TestLoop> loop2(CreateLoop(&schedule, 1)); 4587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4595e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* A = schedule.start(); 4607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* B = schedule.NewBasicBlock(); 4617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* C = schedule.NewBasicBlock(); 4625e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* E = schedule.end(); 4637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(A, B); 4657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(B, loop1->header()); 4667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(loop1->header(), loop2->header()); 4677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(loop2->last(), C); 4687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(C, E); 4697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(C, B); 4707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 47131c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 4727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop1->nodes, loop1->count); 4747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(schedule.BasicBlockCount(), static_cast<int>(order->size())); 4767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop1->nodes, loop1->count); 4777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop2->nodes, loop2->count); 4787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* loop3[] = {B, loop1->nodes[0], loop2->nodes[0], C}; 4807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop3, 4); 4817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 4827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPOLoopBackedges1) { 4857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 4867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int size = 8; 4887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int i = 0; i < size; i++) { 4897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int j = 0; j < size; j++) { 4907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 4915e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* A = schedule.start(); 4925e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* E = schedule.end(); 4937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org SmartPointer<TestLoop> loop1(CreateLoop(&schedule, size)); 4957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(A, loop1->header()); 4967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(loop1->last(), E); 4977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 4987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(loop1->nodes[i], loop1->header()); 4997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(loop1->nodes[j], E); 5007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 50131c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 5027d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckRPONumbers(order, schedule.BasicBlockCount(), true); 5037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop1->nodes, loop1->count); 5047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 5057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 5067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 5077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 5087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 5097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPOLoopOutedges1) { 5107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 5117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 5127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int size = 8; 5137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int i = 0; i < size; i++) { 5147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int j = 0; j < size; j++) { 5157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 5165e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* A = schedule.start(); 5177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* D = schedule.NewBasicBlock(); 5185e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* E = schedule.end(); 5197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 5207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org SmartPointer<TestLoop> loop1(CreateLoop(&schedule, size)); 5217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(A, loop1->header()); 5227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(loop1->last(), E); 5237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 5247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(loop1->nodes[i], loop1->header()); 5257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(loop1->nodes[j], D); 5267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(D, E); 5277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 52831c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 5297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckRPONumbers(order, schedule.BasicBlockCount(), true); 5307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop1->nodes, loop1->count); 5317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 5327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 5337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 5347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 5357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 5367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPOLoopOutedges2) { 5377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 5387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 5397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int size = 8; 5407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int i = 0; i < size; i++) { 5417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 5425e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* A = schedule.start(); 5435e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* E = schedule.end(); 5447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 5457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org SmartPointer<TestLoop> loop1(CreateLoop(&schedule, size)); 5467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(A, loop1->header()); 5477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(loop1->last(), E); 5487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 5497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int j = 0; j < size; j++) { 5507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* O = schedule.NewBasicBlock(); 5517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(loop1->nodes[j], O); 5527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(O, E); 5537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 5547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 55531c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 5567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckRPONumbers(order, schedule.BasicBlockCount(), true); 5577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop1->nodes, loop1->count); 5587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 5597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 5607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 5617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 5627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPOLoopOutloops1) { 5637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 5647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 5657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int size = 8; 5667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int i = 0; i < size; i++) { 5677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 5685e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* A = schedule.start(); 5695e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* E = schedule.end(); 5707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org SmartPointer<TestLoop> loop1(CreateLoop(&schedule, size)); 5717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(A, loop1->header()); 5727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(loop1->last(), E); 5737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 5747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org TestLoop** loopN = new TestLoop* [size]; 5757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int j = 0; j < size; j++) { 5767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org loopN[j] = CreateLoop(&schedule, 2); 5777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(loop1->nodes[j], loopN[j]->header()); 5787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(loopN[j]->last(), E); 5797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 5807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 58131c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 5827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckRPONumbers(order, schedule.BasicBlockCount(), true); 5837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop1->nodes, loop1->count); 5847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 5857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int j = 0; j < size; j++) { 5867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loopN[j]->nodes, loopN[j]->count); 5877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org delete loopN[j]; 5887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 5897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org delete[] loopN; 5907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 5917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 5927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 5937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 5947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(RPOLoopMultibackedge) { 5957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 5967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Schedule schedule(scope.main_zone()); 5977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 5985e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* A = schedule.start(); 5997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* B = schedule.NewBasicBlock(); 6007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* C = schedule.NewBasicBlock(); 6015e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org BasicBlock* D = schedule.end(); 6027d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* E = schedule.NewBasicBlock(); 6037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 6047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(A, B); 6057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(B, C); 6067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(B, D); 6077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(B, E); 6087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(C, B); 6097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(D, B); 6107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org schedule.AddSuccessor(E, B); 6117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 61231c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); 6137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckRPONumbers(order, 5, true); 6147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 6157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org BasicBlock* loop1[] = {B, C, D, E}; 6167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CheckLoopContains(loop1, 4); 6177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 6187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 6197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 6207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(BuildScheduleEmpty) { 6217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 6227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Graph graph(scope.main_zone()); 6237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CommonOperatorBuilder builder(scope.main_zone()); 6243e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org graph.SetStart(graph.NewNode(builder.Start(0))); 6257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org graph.SetEnd(graph.NewNode(builder.End(), graph.start())); 6267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 62731c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org USE(Scheduler::ComputeSchedule(&graph)); 6287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 6297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 6307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 6317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(BuildScheduleOneParameter) { 6327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 6337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Graph graph(scope.main_zone()); 6347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CommonOperatorBuilder builder(scope.main_zone()); 6353e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org graph.SetStart(graph.NewNode(builder.Start(0))); 6367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 6373e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* p1 = graph.NewNode(builder.Parameter(0), graph.start()); 6387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* ret = graph.NewNode(builder.Return(), p1, graph.start(), graph.start()); 6397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 6407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org graph.SetEnd(graph.NewNode(builder.End(), ret)); 6417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 64231c0e32e19ad3df48525fa9e7b2d1c0c07496d00machenbach@chromium.org USE(Scheduler::ComputeSchedule(&graph)); 6437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 6447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 6457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 6467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(BuildScheduleIfSplit) { 6477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 6487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Graph graph(scope.main_zone()); 6497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CommonOperatorBuilder builder(scope.main_zone()); 6507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSOperatorBuilder js_builder(scope.main_zone()); 6513e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org graph.SetStart(graph.NewNode(builder.Start(3))); 6527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 6533e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* p1 = graph.NewNode(builder.Parameter(0), graph.start()); 6543e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* p2 = graph.NewNode(builder.Parameter(1), graph.start()); 6553e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* p3 = graph.NewNode(builder.Parameter(2), graph.start()); 6563e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* p4 = graph.NewNode(builder.Parameter(3), graph.start()); 6573e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* p5 = graph.NewNode(builder.Parameter(4), graph.start()); 6587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* cmp = graph.NewNode(js_builder.LessThanOrEqual(), p1, p2, p3, 6597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org graph.start(), graph.start()); 6607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* branch = graph.NewNode(builder.Branch(), cmp, graph.start()); 6617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* true_branch = graph.NewNode(builder.IfTrue(), branch); 6627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* false_branch = graph.NewNode(builder.IfFalse(), branch); 6637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 6647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* ret1 = graph.NewNode(builder.Return(), p4, graph.start(), true_branch); 6657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* ret2 = graph.NewNode(builder.Return(), p5, graph.start(), false_branch); 6667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* merge = graph.NewNode(builder.Merge(2), ret1, ret2); 6677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org graph.SetEnd(graph.NewNode(builder.End(), merge)); 6687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 669fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org ComputeAndVerifySchedule(13, &graph); 6707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 6717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 6727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 6737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(BuildScheduleIfSplitWithEffects) { 6747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 6757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Isolate* isolate = scope.main_isolate(); 6767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Graph graph(scope.main_zone()); 6777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CommonOperatorBuilder common_builder(scope.main_zone()); 6787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSOperatorBuilder js_builder(scope.main_zone()); 6792c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org const Operator* op; 6807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 6817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Handle<Object> object = 6827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Handle<Object>(isolate->heap()->undefined_value(), isolate); 6831af4d9551ad496a28c342004b1a4e2a3840228f7machenbach@chromium.org Unique<Object> unique_constant = Unique<Object>::CreateUninitialized(object); 6847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 6857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // Manually transcripted code for: 6867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // function turbo_fan_test(a, b, c, y) { 6877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // if (a < b) { 6887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // return a + b - c * c - a + y; 6897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // } else { 6907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // return c * c - a; 6917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // } 6927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // } 6933e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org op = common_builder.Start(0); 6943e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* n0 = graph.NewNode(op); 6953e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org USE(n0); 6967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* nil = graph.NewNode(common_builder.Dead()); 6977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.End(); 6987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n23 = graph.NewNode(op, nil); 6997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n23); 7007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Merge(2); 7017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n22 = graph.NewNode(op, nil, nil); 7027d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n22); 7037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Return(); 7047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n16 = graph.NewNode(op, nil, nil, nil); 7057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n16); 7067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.Add(); 7077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n15 = graph.NewNode(op, nil, nil, nil, nil, nil); 7087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n15); 7097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.Subtract(); 7107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n14 = graph.NewNode(op, nil, nil, nil, nil, nil); 7117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n14); 7127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.Subtract(); 7137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n13 = graph.NewNode(op, nil, nil, nil, nil, nil); 7147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n13); 7157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.Add(); 7167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n11 = graph.NewNode(op, nil, nil, nil, nil, nil); 7177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n11); 7187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Parameter(0); 7193e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* n2 = graph.NewNode(op, n0); 7207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n2); 7217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n11->ReplaceInput(0, n2); 7227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Parameter(0); 7233e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* n3 = graph.NewNode(op, n0); 7247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n3); 7257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n11->ReplaceInput(1, n3); 7267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.HeapConstant(unique_constant); 7277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n7 = graph.NewNode(op); 7287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n7); 7297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n11->ReplaceInput(2, n7); 7307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.LessThan(); 7317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n8 = graph.NewNode(op, nil, nil, nil, nil, nil); 7327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n8); 7337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n8->ReplaceInput(0, n2); 7347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n8->ReplaceInput(1, n3); 7357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n8->ReplaceInput(2, n7); 7367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n8->ReplaceInput(3, n0); 7377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n8->ReplaceInput(4, n0); 7387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n11->ReplaceInput(3, n8); 7397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.IfTrue(); 7407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n10 = graph.NewNode(op, nil); 7417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n10); 7427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Branch(); 7437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n9 = graph.NewNode(op, nil, nil); 7447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n9); 7457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n9->ReplaceInput(0, n8); 7467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n9->ReplaceInput(1, n0); 7477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n10->ReplaceInput(0, n9); 7487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n11->ReplaceInput(4, n10); 7497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n13->ReplaceInput(0, n11); 7507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.Multiply(); 7517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n12 = graph.NewNode(op, nil, nil, nil, nil, nil); 7527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n12); 7537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Parameter(0); 7543e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* n4 = graph.NewNode(op, n0); 7557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n4); 7567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n12->ReplaceInput(0, n4); 7577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n12->ReplaceInput(1, n4); 7587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n12->ReplaceInput(2, n7); 7597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n12->ReplaceInput(3, n11); 7607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n12->ReplaceInput(4, n10); 7617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n13->ReplaceInput(1, n12); 7627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n13->ReplaceInput(2, n7); 7637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n13->ReplaceInput(3, n12); 7647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n13->ReplaceInput(4, n10); 7657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n14->ReplaceInput(0, n13); 7667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n14->ReplaceInput(1, n2); 7677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n14->ReplaceInput(2, n7); 7687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n14->ReplaceInput(3, n13); 7697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n14->ReplaceInput(4, n10); 7707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n15->ReplaceInput(0, n14); 7717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Parameter(0); 7723e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* n5 = graph.NewNode(op, n0); 7737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n5); 7747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n15->ReplaceInput(1, n5); 7757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n15->ReplaceInput(2, n7); 7767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n15->ReplaceInput(3, n14); 7777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n15->ReplaceInput(4, n10); 7787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n16->ReplaceInput(0, n15); 7797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n16->ReplaceInput(1, n15); 7807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n16->ReplaceInput(2, n10); 7817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n22->ReplaceInput(0, n16); 7827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Return(); 7837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n21 = graph.NewNode(op, nil, nil, nil); 7847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n21); 7857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.Subtract(); 7867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n20 = graph.NewNode(op, nil, nil, nil, nil, nil); 7877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n20); 7887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.Multiply(); 7897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n19 = graph.NewNode(op, nil, nil, nil, nil, nil); 7907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n19); 7917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n19->ReplaceInput(0, n4); 7927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n19->ReplaceInput(1, n4); 7937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n19->ReplaceInput(2, n7); 7947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n19->ReplaceInput(3, n8); 7957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.IfFalse(); 7967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n18 = graph.NewNode(op, nil); 7977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n18); 7987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n18->ReplaceInput(0, n9); 7997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n19->ReplaceInput(4, n18); 8007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n20->ReplaceInput(0, n19); 8017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n20->ReplaceInput(1, n2); 8027d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n20->ReplaceInput(2, n7); 8037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n20->ReplaceInput(3, n19); 8047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n20->ReplaceInput(4, n18); 8057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n21->ReplaceInput(0, n20); 8067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n21->ReplaceInput(1, n20); 8077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n21->ReplaceInput(2, n18); 8087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n22->ReplaceInput(1, n21); 8097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n23->ReplaceInput(0, n22); 8107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 8117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org graph.SetStart(n0); 8127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org graph.SetEnd(n23); 8137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 814fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org ComputeAndVerifySchedule(20, &graph); 8157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 8167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 8177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 8187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(BuildScheduleSimpleLoop) { 8197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 8207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Isolate* isolate = scope.main_isolate(); 8217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Graph graph(scope.main_zone()); 8227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CommonOperatorBuilder common_builder(scope.main_zone()); 8237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSOperatorBuilder js_builder(scope.main_zone()); 8242c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org const Operator* op; 8257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 8267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Handle<Object> object = 8277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Handle<Object>(isolate->heap()->undefined_value(), isolate); 8281af4d9551ad496a28c342004b1a4e2a3840228f7machenbach@chromium.org Unique<Object> unique_constant = Unique<Object>::CreateUninitialized(object); 8297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 8307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // Manually transcripted code for: 8317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // function turbo_fan_test(a, b) { 8327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // while (a < b) { 8337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // a++; 8347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // } 8357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // return a; 8367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // } 8373e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org op = common_builder.Start(0); 8383e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* n0 = graph.NewNode(op); 8393e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org USE(n0); 8407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* nil = graph.NewNode(common_builder.Dead()); 8417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.End(); 8427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n20 = graph.NewNode(op, nil); 8437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n20); 8447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Return(); 8457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n19 = graph.NewNode(op, nil, nil, nil); 8467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n19); 84742ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 8487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n8 = graph.NewNode(op, nil, nil, nil); 8497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n8); 8507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Parameter(0); 8513e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* n2 = graph.NewNode(op, n0); 8527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n2); 8537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n8->ReplaceInput(0, n2); 8547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.Add(); 8557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n18 = graph.NewNode(op, nil, nil, nil, nil, nil); 8567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n18); 8577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.ToNumber(); 8587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n16 = graph.NewNode(op, nil, nil, nil, nil); 8597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n16); 8607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n16->ReplaceInput(0, n8); 8617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.HeapConstant(unique_constant); 8627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n5 = graph.NewNode(op); 8637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n5); 8647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n16->ReplaceInput(1, n5); 8657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.LessThan(); 8667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n12 = graph.NewNode(op, nil, nil, nil, nil, nil); 8677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n12); 8687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n12->ReplaceInput(0, n8); 86942ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 8707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n9 = graph.NewNode(op, nil, nil, nil); 8717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n9); 8727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Parameter(0); 8733e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* n3 = graph.NewNode(op, n0); 8747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n3); 8757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n9->ReplaceInput(0, n3); 8767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n9->ReplaceInput(1, n9); 8777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Loop(2); 8787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n6 = graph.NewNode(op, nil, nil); 8797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n6); 8807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n6->ReplaceInput(0, n0); 8817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.IfTrue(); 8827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n14 = graph.NewNode(op, nil); 8837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n14); 8847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Branch(); 8857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n13 = graph.NewNode(op, nil, nil); 8867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n13); 8877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n13->ReplaceInput(0, n12); 8887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n13->ReplaceInput(1, n6); 8897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n14->ReplaceInput(0, n13); 8907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n6->ReplaceInput(1, n14); 8917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n9->ReplaceInput(2, n6); 8927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n12->ReplaceInput(1, n9); 8937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n12->ReplaceInput(2, n5); 89442ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 8957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n10 = graph.NewNode(op, nil, nil, nil); 8967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n10); 8977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n10->ReplaceInput(0, n0); 8987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n10->ReplaceInput(1, n18); 8997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n10->ReplaceInput(2, n6); 9007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n12->ReplaceInput(3, n10); 9017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n12->ReplaceInput(4, n6); 9027d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n16->ReplaceInput(2, n12); 9037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n16->ReplaceInput(3, n14); 9047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n18->ReplaceInput(0, n16); 9057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.NumberConstant(0); 9067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n17 = graph.NewNode(op); 9077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n17); 9087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n18->ReplaceInput(1, n17); 9097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n18->ReplaceInput(2, n5); 9107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n18->ReplaceInput(3, n16); 9117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n18->ReplaceInput(4, n14); 9127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n8->ReplaceInput(1, n18); 9137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n8->ReplaceInput(2, n6); 9147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n19->ReplaceInput(0, n8); 9157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n19->ReplaceInput(1, n12); 9167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.IfFalse(); 9177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n15 = graph.NewNode(op, nil); 9187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n15); 9197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n15->ReplaceInput(0, n13); 9207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n19->ReplaceInput(2, n15); 9217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n20->ReplaceInput(0, n19); 9227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 9237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org graph.SetStart(n0); 9247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org graph.SetEnd(n20); 9257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 926fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org ComputeAndVerifySchedule(19, &graph); 9277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 9287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 9297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 9307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(BuildScheduleComplexLoops) { 9317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 9327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Isolate* isolate = scope.main_isolate(); 9337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Graph graph(scope.main_zone()); 9347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CommonOperatorBuilder common_builder(scope.main_zone()); 9357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSOperatorBuilder js_builder(scope.main_zone()); 9362c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org const Operator* op; 9377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 9387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Handle<Object> object = 9397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Handle<Object>(isolate->heap()->undefined_value(), isolate); 9401af4d9551ad496a28c342004b1a4e2a3840228f7machenbach@chromium.org Unique<Object> unique_constant = Unique<Object>::CreateUninitialized(object); 9417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 9427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // Manually transcripted code for: 9437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // function turbo_fan_test(a, b, c) { 9447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // while (a < b) { 9457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // a++; 9467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // while (c < b) { 9477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // c++; 9487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // } 9497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // } 9507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // while (a < b) { 9517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // a += 2; 9527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // } 9537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // return a; 9547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // } 9553e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org op = common_builder.Start(0); 9563e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* n0 = graph.NewNode(op); 9573e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org USE(n0); 9587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* nil = graph.NewNode(common_builder.Dead()); 9597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.End(); 9607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n46 = graph.NewNode(op, nil); 9617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n46); 9627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Return(); 9637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n45 = graph.NewNode(op, nil, nil, nil); 9647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n45); 96542ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 9667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n35 = graph.NewNode(op, nil, nil, nil); 9677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n35); 96842ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 9697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n9 = graph.NewNode(op, nil, nil, nil); 9707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n9); 9717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Parameter(0); 9723e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* n2 = graph.NewNode(op, n0); 9737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n2); 9747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n9->ReplaceInput(0, n2); 97542ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 9767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n23 = graph.NewNode(op, nil, nil, nil); 9777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n23); 9787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.Add(); 9797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n20 = graph.NewNode(op, nil, nil, nil, nil, nil); 9807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n20); 9817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.ToNumber(); 9827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n18 = graph.NewNode(op, nil, nil, nil, nil); 9837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n18); 9847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n18->ReplaceInput(0, n9); 9857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.HeapConstant(unique_constant); 9867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n6 = graph.NewNode(op); 9877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n6); 9887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n18->ReplaceInput(1, n6); 9897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.LessThan(); 9907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n14 = graph.NewNode(op, nil, nil, nil, nil, nil); 9917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n14); 9927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n14->ReplaceInput(0, n9); 99342ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 9947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n10 = graph.NewNode(op, nil, nil, nil); 9957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n10); 9967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Parameter(0); 9973e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* n3 = graph.NewNode(op, n0); 9987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n3); 9997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n10->ReplaceInput(0, n3); 100042ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 10017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n24 = graph.NewNode(op, nil, nil, nil); 10027d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n24); 10037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n24->ReplaceInput(0, n10); 10047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n24->ReplaceInput(1, n24); 10057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Loop(2); 10067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n21 = graph.NewNode(op, nil, nil); 10077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n21); 10087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.IfTrue(); 10097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n16 = graph.NewNode(op, nil); 10107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n16); 10117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Branch(); 10127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n15 = graph.NewNode(op, nil, nil); 10137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n15); 10147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n15->ReplaceInput(0, n14); 10157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Loop(2); 10167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n7 = graph.NewNode(op, nil, nil); 10177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n7); 10187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n7->ReplaceInput(0, n0); 10197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.IfFalse(); 10207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n30 = graph.NewNode(op, nil); 10217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n30); 10227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Branch(); 10237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n28 = graph.NewNode(op, nil, nil); 10247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n28); 10257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.LessThan(); 10267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n27 = graph.NewNode(op, nil, nil, nil, nil, nil); 10277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n27); 102842ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 10297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n25 = graph.NewNode(op, nil, nil, nil); 10307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n25); 103142ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 10327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n11 = graph.NewNode(op, nil, nil, nil); 10337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n11); 10347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Parameter(0); 10353e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* n4 = graph.NewNode(op, n0); 10367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n4); 10377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n11->ReplaceInput(0, n4); 10387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n11->ReplaceInput(1, n25); 10397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n11->ReplaceInput(2, n7); 10407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n25->ReplaceInput(0, n11); 10417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.Add(); 10427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n32 = graph.NewNode(op, nil, nil, nil, nil, nil); 10437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n32); 10447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.ToNumber(); 10457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n31 = graph.NewNode(op, nil, nil, nil, nil); 10467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n31); 10477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n31->ReplaceInput(0, n25); 10487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n31->ReplaceInput(1, n6); 10497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n31->ReplaceInput(2, n27); 10507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.IfTrue(); 10517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n29 = graph.NewNode(op, nil); 10527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n29); 10537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n29->ReplaceInput(0, n28); 10547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n31->ReplaceInput(3, n29); 10557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n32->ReplaceInput(0, n31); 10567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.NumberConstant(0); 10577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n19 = graph.NewNode(op); 10587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n19); 10597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n32->ReplaceInput(1, n19); 10607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n32->ReplaceInput(2, n6); 10617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n32->ReplaceInput(3, n31); 10627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n32->ReplaceInput(4, n29); 10637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n25->ReplaceInput(1, n32); 10647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n25->ReplaceInput(2, n21); 10657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n27->ReplaceInput(0, n25); 10667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n27->ReplaceInput(1, n24); 10677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n27->ReplaceInput(2, n6); 106842ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 10697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n26 = graph.NewNode(op, nil, nil, nil); 10707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n26); 10717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n26->ReplaceInput(0, n20); 10727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n26->ReplaceInput(1, n32); 10737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n26->ReplaceInput(2, n21); 10747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n27->ReplaceInput(3, n26); 10757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n27->ReplaceInput(4, n21); 10767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n28->ReplaceInput(0, n27); 10777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n28->ReplaceInput(1, n21); 10787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n30->ReplaceInput(0, n28); 10797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n7->ReplaceInput(1, n30); 10807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n15->ReplaceInput(1, n7); 10817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n16->ReplaceInput(0, n15); 10827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n21->ReplaceInput(0, n16); 10837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n21->ReplaceInput(1, n29); 10847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n24->ReplaceInput(2, n21); 10857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n10->ReplaceInput(1, n24); 10867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n10->ReplaceInput(2, n7); 10877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n14->ReplaceInput(1, n10); 10887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n14->ReplaceInput(2, n6); 108942ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 10907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n12 = graph.NewNode(op, nil, nil, nil); 10917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n12); 10927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n12->ReplaceInput(0, n0); 10937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n12->ReplaceInput(1, n27); 10947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n12->ReplaceInput(2, n7); 10957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n14->ReplaceInput(3, n12); 10967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n14->ReplaceInput(4, n7); 10977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n18->ReplaceInput(2, n14); 10987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n18->ReplaceInput(3, n16); 10997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n20->ReplaceInput(0, n18); 11007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n20->ReplaceInput(1, n19); 11017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n20->ReplaceInput(2, n6); 11027d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n20->ReplaceInput(3, n18); 11037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n20->ReplaceInput(4, n16); 11047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n23->ReplaceInput(0, n20); 11057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n23->ReplaceInput(1, n23); 11067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n23->ReplaceInput(2, n21); 11077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n9->ReplaceInput(1, n23); 11087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n9->ReplaceInput(2, n7); 11097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n35->ReplaceInput(0, n9); 11107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.Add(); 11117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n44 = graph.NewNode(op, nil, nil, nil, nil, nil); 11127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n44); 11137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n44->ReplaceInput(0, n35); 11147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.NumberConstant(0); 11157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n43 = graph.NewNode(op); 11167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n43); 11177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n44->ReplaceInput(1, n43); 11187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n44->ReplaceInput(2, n6); 11197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.LessThan(); 11207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n39 = graph.NewNode(op, nil, nil, nil, nil, nil); 11217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n39); 11227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n39->ReplaceInput(0, n35); 112342ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 11247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n36 = graph.NewNode(op, nil, nil, nil); 11257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n36); 11267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n36->ReplaceInput(0, n10); 11277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n36->ReplaceInput(1, n36); 11287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Loop(2); 11297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n33 = graph.NewNode(op, nil, nil); 11307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n33); 11317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.IfFalse(); 11327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n17 = graph.NewNode(op, nil); 11337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n17); 11347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n17->ReplaceInput(0, n15); 11357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n33->ReplaceInput(0, n17); 11367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.IfTrue(); 11377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n41 = graph.NewNode(op, nil); 11387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n41); 11397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Branch(); 11407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n40 = graph.NewNode(op, nil, nil); 11417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n40); 11427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n40->ReplaceInput(0, n39); 11437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n40->ReplaceInput(1, n33); 11447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n41->ReplaceInput(0, n40); 11457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n33->ReplaceInput(1, n41); 11467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n36->ReplaceInput(2, n33); 11477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n39->ReplaceInput(1, n36); 11487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n39->ReplaceInput(2, n6); 114942ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 11507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n38 = graph.NewNode(op, nil, nil, nil); 11517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n38); 11527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n38->ReplaceInput(0, n14); 11537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n38->ReplaceInput(1, n44); 11547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n38->ReplaceInput(2, n33); 11557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n39->ReplaceInput(3, n38); 11567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n39->ReplaceInput(4, n33); 11577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n44->ReplaceInput(3, n39); 11587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n44->ReplaceInput(4, n41); 11597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n35->ReplaceInput(1, n44); 11607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n35->ReplaceInput(2, n33); 11617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n45->ReplaceInput(0, n35); 11627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n45->ReplaceInput(1, n39); 11637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.IfFalse(); 11647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n42 = graph.NewNode(op, nil); 11657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n42); 11667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n42->ReplaceInput(0, n40); 11677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n45->ReplaceInput(2, n42); 11687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n46->ReplaceInput(0, n45); 11697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 11707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org graph.SetStart(n0); 11717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org graph.SetEnd(n46); 11727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1173fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org ComputeAndVerifySchedule(46, &graph); 11747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 11757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 11767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 11777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(BuildScheduleBreakAndContinue) { 11787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 11797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Isolate* isolate = scope.main_isolate(); 11807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Graph graph(scope.main_zone()); 11817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CommonOperatorBuilder common_builder(scope.main_zone()); 11827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSOperatorBuilder js_builder(scope.main_zone()); 11832c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org const Operator* op; 11847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 11857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Handle<Object> object = 11867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Handle<Object>(isolate->heap()->undefined_value(), isolate); 11871af4d9551ad496a28c342004b1a4e2a3840228f7machenbach@chromium.org Unique<Object> unique_constant = Unique<Object>::CreateUninitialized(object); 11887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 11897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // Manually transcripted code for: 11907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // function turbo_fan_test(a, b, c) { 11917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // var d = 0; 11927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // while (a < b) { 11937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // a++; 11947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // while (c < b) { 11957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // c++; 11967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // if (d == 0) break; 11977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // a++; 11987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // } 11997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // if (a == 1) continue; 12007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // d++; 12017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // } 12027d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // return a + d; 12037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // } 12043e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org op = common_builder.Start(0); 12053e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* n0 = graph.NewNode(op); 12063e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org USE(n0); 12077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* nil = graph.NewNode(common_builder.Dead()); 12087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.End(); 12097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n58 = graph.NewNode(op, nil); 12107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n58); 12117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Return(); 12127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n57 = graph.NewNode(op, nil, nil, nil); 12137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n57); 12147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.Add(); 12157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n56 = graph.NewNode(op, nil, nil, nil, nil, nil); 12167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n56); 121742ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 12187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n10 = graph.NewNode(op, nil, nil, nil); 12197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n10); 12207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Parameter(0); 12213e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* n2 = graph.NewNode(op, n0); 12227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n2); 12237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n10->ReplaceInput(0, n2); 122442ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 12257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n25 = graph.NewNode(op, nil, nil, nil); 12267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n25); 12277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.Add(); 12287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n22 = graph.NewNode(op, nil, nil, nil, nil, nil); 12297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n22); 12307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.ToNumber(); 12317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n20 = graph.NewNode(op, nil, nil, nil, nil); 12327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n20); 12337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n20->ReplaceInput(0, n10); 12347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.HeapConstant(unique_constant); 12357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n6 = graph.NewNode(op); 12367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n6); 12377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n20->ReplaceInput(1, n6); 12387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.LessThan(); 12397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n16 = graph.NewNode(op, nil, nil, nil, nil, nil); 12407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n16); 12417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n16->ReplaceInput(0, n10); 124242ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 12437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n11 = graph.NewNode(op, nil, nil, nil); 12447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n11); 12457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Parameter(0); 12463e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* n3 = graph.NewNode(op, n0); 12477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n3); 12487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n11->ReplaceInput(0, n3); 124942ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 12507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n26 = graph.NewNode(op, nil, nil, nil); 12517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n26); 12527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n26->ReplaceInput(0, n11); 12537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n26->ReplaceInput(1, n26); 12547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Loop(2); 12557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n23 = graph.NewNode(op, nil, nil); 12567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n23); 12577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.IfTrue(); 12587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n18 = graph.NewNode(op, nil); 12597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n18); 12607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Branch(); 12617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n17 = graph.NewNode(op, nil, nil); 12627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n17); 12637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n17->ReplaceInput(0, n16); 12647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Loop(2); 12657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n8 = graph.NewNode(op, nil, nil); 12667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n8); 12677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n8->ReplaceInput(0, n0); 12687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Merge(2); 12697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n53 = graph.NewNode(op, nil, nil); 12707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n53); 12717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.IfTrue(); 12727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n49 = graph.NewNode(op, nil); 12737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n49); 12747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Branch(); 12757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n48 = graph.NewNode(op, nil, nil); 12767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n48); 12777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.Equal(); 12787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n47 = graph.NewNode(op, nil, nil, nil, nil, nil); 12797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n47); 12807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n47->ReplaceInput(0, n25); 12817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.NumberConstant(0); 12827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n46 = graph.NewNode(op); 12837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n46); 12847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n47->ReplaceInput(1, n46); 12857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n47->ReplaceInput(2, n6); 128642ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 12877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n42 = graph.NewNode(op, nil, nil, nil); 12887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n42); 12897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.LessThan(); 12907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n30 = graph.NewNode(op, nil, nil, nil, nil, nil); 12917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n30); 129242ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 12937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n27 = graph.NewNode(op, nil, nil, nil); 12947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n27); 129542ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 12967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n12 = graph.NewNode(op, nil, nil, nil); 12977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n12); 12987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Parameter(0); 12993e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* n4 = graph.NewNode(op, n0); 13007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n4); 13017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n12->ReplaceInput(0, n4); 130242ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 13037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n41 = graph.NewNode(op, nil, nil, nil); 13047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n41); 13057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n41->ReplaceInput(0, n27); 13067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.Add(); 13077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n35 = graph.NewNode(op, nil, nil, nil, nil, nil); 13087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n35); 13097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.ToNumber(); 13107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n34 = graph.NewNode(op, nil, nil, nil, nil); 13117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n34); 13127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n34->ReplaceInput(0, n27); 13137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n34->ReplaceInput(1, n6); 13147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n34->ReplaceInput(2, n30); 13157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.IfTrue(); 13167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n32 = graph.NewNode(op, nil); 13177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n32); 13187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Branch(); 13197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n31 = graph.NewNode(op, nil, nil); 13207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n31); 13217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n31->ReplaceInput(0, n30); 13227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n31->ReplaceInput(1, n23); 13237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n32->ReplaceInput(0, n31); 13247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n34->ReplaceInput(3, n32); 13257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n35->ReplaceInput(0, n34); 13267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.NumberConstant(0); 13277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n21 = graph.NewNode(op); 13287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n21); 13297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n35->ReplaceInput(1, n21); 13307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n35->ReplaceInput(2, n6); 13317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n35->ReplaceInput(3, n34); 13327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n35->ReplaceInput(4, n32); 13337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n41->ReplaceInput(1, n35); 13347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Merge(2); 13357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n40 = graph.NewNode(op, nil, nil); 13367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n40); 13377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.IfFalse(); 13387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n33 = graph.NewNode(op, nil); 13397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n33); 13407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n33->ReplaceInput(0, n31); 13417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n40->ReplaceInput(0, n33); 13427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.IfTrue(); 13437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n39 = graph.NewNode(op, nil); 13447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n39); 13457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Branch(); 13467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n38 = graph.NewNode(op, nil, nil); 13477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n38); 13487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.Equal(); 13497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n37 = graph.NewNode(op, nil, nil, nil, nil, nil); 13507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n37); 135142ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 13527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n28 = graph.NewNode(op, nil, nil, nil); 13537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n28); 135442ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 13557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n13 = graph.NewNode(op, nil, nil, nil); 13567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n13); 13577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.NumberConstant(0); 13587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n7 = graph.NewNode(op); 13597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n7); 13607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n13->ReplaceInput(0, n7); 136142ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 13627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n54 = graph.NewNode(op, nil, nil, nil); 13637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n54); 13647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n54->ReplaceInput(0, n28); 13657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.Add(); 13667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n52 = graph.NewNode(op, nil, nil, nil, nil, nil); 13677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n52); 13687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.ToNumber(); 13697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n51 = graph.NewNode(op, nil, nil, nil, nil); 13707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n51); 13717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n51->ReplaceInput(0, n28); 13727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n51->ReplaceInput(1, n6); 13737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n51->ReplaceInput(2, n47); 13747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.IfFalse(); 13757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n50 = graph.NewNode(op, nil); 13767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n50); 13777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n50->ReplaceInput(0, n48); 13787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n51->ReplaceInput(3, n50); 13797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n52->ReplaceInput(0, n51); 13807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n52->ReplaceInput(1, n21); 13817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n52->ReplaceInput(2, n6); 13827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n52->ReplaceInput(3, n51); 13837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n52->ReplaceInput(4, n50); 13847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n54->ReplaceInput(1, n52); 13857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n54->ReplaceInput(2, n53); 13867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n13->ReplaceInput(1, n54); 13877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n13->ReplaceInput(2, n8); 13887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n28->ReplaceInput(0, n13); 13897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n28->ReplaceInput(1, n28); 13907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n28->ReplaceInput(2, n23); 13917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n37->ReplaceInput(0, n28); 13927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.NumberConstant(0); 13937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n36 = graph.NewNode(op); 13947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n36); 13957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n37->ReplaceInput(1, n36); 13967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n37->ReplaceInput(2, n6); 13977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n37->ReplaceInput(3, n35); 13987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n37->ReplaceInput(4, n32); 13997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n38->ReplaceInput(0, n37); 14007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n38->ReplaceInput(1, n32); 14017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n39->ReplaceInput(0, n38); 14027d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n40->ReplaceInput(1, n39); 14037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n41->ReplaceInput(2, n40); 14047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n12->ReplaceInput(1, n41); 14057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n12->ReplaceInput(2, n8); 14067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n27->ReplaceInput(0, n12); 14077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n27->ReplaceInput(1, n35); 14087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n27->ReplaceInput(2, n23); 14097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n30->ReplaceInput(0, n27); 14107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n30->ReplaceInput(1, n26); 14117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n30->ReplaceInput(2, n6); 141242ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 14137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n29 = graph.NewNode(op, nil, nil, nil); 14147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n29); 14157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n29->ReplaceInput(0, n22); 14167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.Add(); 14177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n45 = graph.NewNode(op, nil, nil, nil, nil, nil); 14187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n45); 14197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.ToNumber(); 14207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n44 = graph.NewNode(op, nil, nil, nil, nil); 14217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n44); 14227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n44->ReplaceInput(0, n25); 14237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n44->ReplaceInput(1, n6); 14247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n44->ReplaceInput(2, n37); 14257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.IfFalse(); 14267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n43 = graph.NewNode(op, nil); 14277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n43); 14287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n43->ReplaceInput(0, n38); 14297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n44->ReplaceInput(3, n43); 14307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n45->ReplaceInput(0, n44); 14317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n45->ReplaceInput(1, n21); 14327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n45->ReplaceInput(2, n6); 14337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n45->ReplaceInput(3, n44); 14347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n45->ReplaceInput(4, n43); 14357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n29->ReplaceInput(1, n45); 14367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n29->ReplaceInput(2, n23); 14377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n30->ReplaceInput(3, n29); 14387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n30->ReplaceInput(4, n23); 14397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n42->ReplaceInput(0, n30); 14407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n42->ReplaceInput(1, n37); 14417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n42->ReplaceInput(2, n40); 14427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n47->ReplaceInput(3, n42); 14437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n47->ReplaceInput(4, n40); 14447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n48->ReplaceInput(0, n47); 14457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n48->ReplaceInput(1, n40); 14467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n49->ReplaceInput(0, n48); 14477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n53->ReplaceInput(0, n49); 14487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n53->ReplaceInput(1, n50); 14497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n8->ReplaceInput(1, n53); 14507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n17->ReplaceInput(1, n8); 14517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n18->ReplaceInput(0, n17); 14527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n23->ReplaceInput(0, n18); 14537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n23->ReplaceInput(1, n43); 14547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n26->ReplaceInput(2, n23); 14557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n11->ReplaceInput(1, n26); 14567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n11->ReplaceInput(2, n8); 14577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n16->ReplaceInput(1, n11); 14587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n16->ReplaceInput(2, n6); 145942ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 14607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n14 = graph.NewNode(op, nil, nil, nil); 14617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n14); 14627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n14->ReplaceInput(0, n0); 146342ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 14647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n55 = graph.NewNode(op, nil, nil, nil); 14657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n55); 14667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n55->ReplaceInput(0, n47); 14677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n55->ReplaceInput(1, n52); 14687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n55->ReplaceInput(2, n53); 14697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n14->ReplaceInput(1, n55); 14707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n14->ReplaceInput(2, n8); 14717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n16->ReplaceInput(3, n14); 14727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n16->ReplaceInput(4, n8); 14737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n20->ReplaceInput(2, n16); 14747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n20->ReplaceInput(3, n18); 14757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n22->ReplaceInput(0, n20); 14767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n22->ReplaceInput(1, n21); 14777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n22->ReplaceInput(2, n6); 14787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n22->ReplaceInput(3, n20); 14797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n22->ReplaceInput(4, n18); 14807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n25->ReplaceInput(0, n22); 14817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n25->ReplaceInput(1, n45); 14827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n25->ReplaceInput(2, n23); 14837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n10->ReplaceInput(1, n25); 14847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n10->ReplaceInput(2, n8); 14857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n56->ReplaceInput(0, n10); 14867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n56->ReplaceInput(1, n13); 14877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n56->ReplaceInput(2, n6); 14887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n56->ReplaceInput(3, n16); 14897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.IfFalse(); 14907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n19 = graph.NewNode(op, nil); 14917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n19); 14927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n19->ReplaceInput(0, n17); 14937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n56->ReplaceInput(4, n19); 14947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n57->ReplaceInput(0, n56); 14957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n57->ReplaceInput(1, n56); 14967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n57->ReplaceInput(2, n19); 14977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n58->ReplaceInput(0, n57); 14987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 14997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org graph.SetStart(n0); 15007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org graph.SetEnd(n58); 15017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1502fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org ComputeAndVerifySchedule(62, &graph); 15037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 15047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 15057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 15067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(BuildScheduleSimpleLoopWithCodeMotion) { 15077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org HandleAndZoneScope scope; 15087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Isolate* isolate = scope.main_isolate(); 15097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Graph graph(scope.main_zone()); 15107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CommonOperatorBuilder common_builder(scope.main_zone()); 15117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSOperatorBuilder js_builder(scope.main_zone()); 15126313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org MachineOperatorBuilder machine_builder; 15132c81ceb7f1e1ccf5f304be0646f4c1375941a7f2machenbach@chromium.org const Operator* op; 15147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 15157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Handle<Object> object = 15167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Handle<Object>(isolate->heap()->undefined_value(), isolate); 15171af4d9551ad496a28c342004b1a4e2a3840228f7machenbach@chromium.org Unique<Object> unique_constant = Unique<Object>::CreateUninitialized(object); 15187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 15197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // Manually transcripted code for: 15207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // function turbo_fan_test(a, b, c) { 15217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // while (a < b) { 15227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // a += b + c; 15237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // } 15247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // return a; 15257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // } 15263e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org op = common_builder.Start(0); 15273e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* n0 = graph.NewNode(op); 15283e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org USE(n0); 15297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* nil = graph.NewNode(common_builder.Dead()); 15307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.End(); 15317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n22 = graph.NewNode(op, nil); 15327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n22); 15337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Return(); 15347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n21 = graph.NewNode(op, nil, nil, nil); 15357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n21); 153642ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 15377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n9 = graph.NewNode(op, nil, nil, nil); 15387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n9); 15397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Parameter(0); 15403e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* n2 = graph.NewNode(op, n0); 15417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n2); 15427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n9->ReplaceInput(0, n2); 15437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.Add(); 15447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n20 = graph.NewNode(op, nil, nil, nil, nil, nil); 15457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n20); 15467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n20->ReplaceInput(0, n9); 15477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = machine_builder.Int32Add(); 15487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n19 = graph.NewNode(op, nil, nil); 15497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n19); 155042ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 15517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n10 = graph.NewNode(op, nil, nil, nil); 15527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n10); 15537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Parameter(0); 15543e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* n3 = graph.NewNode(op, n0); 15557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n3); 15567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n10->ReplaceInput(0, n3); 15577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n10->ReplaceInput(1, n10); 15587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Loop(2); 15597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n7 = graph.NewNode(op, nil, nil); 15607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n7); 15617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n7->ReplaceInput(0, n0); 15627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.IfTrue(); 15637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n17 = graph.NewNode(op, nil); 15647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n17); 15657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Branch(); 15667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n16 = graph.NewNode(op, nil, nil); 15677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n16); 15687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.ToBoolean(); 15697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n15 = graph.NewNode(op, nil, nil, nil, nil); 15707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n15); 15717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = js_builder.LessThan(); 15727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n14 = graph.NewNode(op, nil, nil, nil, nil, nil); 15737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n14); 15747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n14->ReplaceInput(0, n9); 15757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n14->ReplaceInput(1, n10); 15767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.HeapConstant(unique_constant); 15777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n6 = graph.NewNode(op); 15787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n6); 15797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n14->ReplaceInput(2, n6); 158042ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 15817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n12 = graph.NewNode(op, nil, nil, nil); 15827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n12); 15837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n12->ReplaceInput(0, n0); 15847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n12->ReplaceInput(1, n20); 15857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n12->ReplaceInput(2, n7); 15867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n14->ReplaceInput(3, n12); 15877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n14->ReplaceInput(4, n7); 15887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n15->ReplaceInput(0, n14); 15897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n15->ReplaceInput(1, n6); 15907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n15->ReplaceInput(2, n14); 15917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n15->ReplaceInput(3, n7); 15927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n16->ReplaceInput(0, n15); 15937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n16->ReplaceInput(1, n7); 15947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n17->ReplaceInput(0, n16); 15957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n7->ReplaceInput(1, n17); 15967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n10->ReplaceInput(2, n7); 15977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n19->ReplaceInput(0, n2); 159842ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org op = common_builder.Phi(kMachAnyTagged, 2); 15997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n11 = graph.NewNode(op, nil, nil, nil); 16007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n11); 16017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.Parameter(0); 16023e3d253bd8018d7627422bf55a5c7bb7e7d6ad7emachenbach@chromium.org Node* n4 = graph.NewNode(op, n0); 16037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n4); 16047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n11->ReplaceInput(0, n4); 16057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n11->ReplaceInput(1, n11); 16067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n11->ReplaceInput(2, n7); 16077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n19->ReplaceInput(1, n3); 16087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n20->ReplaceInput(1, n19); 16097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n20->ReplaceInput(2, n6); 16107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n20->ReplaceInput(3, n19); 16117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n20->ReplaceInput(4, n17); 16127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n9->ReplaceInput(1, n20); 16137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n9->ReplaceInput(2, n7); 16147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n21->ReplaceInput(0, n9); 16157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n21->ReplaceInput(1, n15); 16167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org op = common_builder.IfFalse(); 16177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* n18 = graph.NewNode(op, nil); 16187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org USE(n18); 16197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n18->ReplaceInput(0, n16); 16207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n21->ReplaceInput(2, n18); 16217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org n22->ReplaceInput(0, n21); 16227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 16237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org graph.SetStart(n0); 16247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org graph.SetEnd(n22); 16257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1626fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Schedule* schedule = ComputeAndVerifySchedule(19, &graph); 16277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // Make sure the integer-only add gets hoisted to a different block that the 16287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // JSAdd. 16297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(schedule->block(n19) != schedule->block(n20)); 16307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 16317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 16327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 16337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#if V8_TURBOFAN_TARGET 16347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1635fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.orgstatic Node* CreateDiamond(Graph* graph, CommonOperatorBuilder* common, 1636fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* cond) { 1637fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* tv = graph->NewNode(common->Int32Constant(6)); 1638fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* fv = graph->NewNode(common->Int32Constant(7)); 1639fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* br = graph->NewNode(common->Branch(), cond, graph->start()); 1640fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* t = graph->NewNode(common->IfTrue(), br); 1641fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* f = graph->NewNode(common->IfFalse(), br); 1642fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* m = graph->NewNode(common->Merge(2), t, f); 164342ed2fc449e83fab2ccbf1b769a5e83715c9d783machenbach@chromium.org Node* phi = graph->NewNode(common->Phi(kMachAnyTagged, 2), tv, fv, m); 1644fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org return phi; 1645fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org} 1646fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 1647fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 1648fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.orgTEST(FloatingDiamond1) { 1649fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org HandleAndZoneScope scope; 1650fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Graph graph(scope.main_zone()); 1651fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org CommonOperatorBuilder common(scope.main_zone()); 1652fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 1653fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* start = graph.NewNode(common.Start(1)); 1654fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org graph.SetStart(start); 1655fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 1656fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* p0 = graph.NewNode(common.Parameter(0), start); 1657fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* d1 = CreateDiamond(&graph, &common, p0); 1658fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* ret = graph.NewNode(common.Return(), d1, start, start); 1659fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* end = graph.NewNode(common.End(), ret, start); 1660fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 1661fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org graph.SetEnd(end); 1662fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 1663fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org ComputeAndVerifySchedule(13, &graph); 1664fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org} 1665fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 1666fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 1667fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.orgTEST(FloatingDiamond2) { 1668fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org HandleAndZoneScope scope; 1669fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Graph graph(scope.main_zone()); 1670fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org CommonOperatorBuilder common(scope.main_zone()); 16716313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org MachineOperatorBuilder machine; 1672fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 1673fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* start = graph.NewNode(common.Start(2)); 1674fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org graph.SetStart(start); 1675fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 1676fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* p0 = graph.NewNode(common.Parameter(0), start); 1677fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* p1 = graph.NewNode(common.Parameter(1), start); 1678fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* d1 = CreateDiamond(&graph, &common, p0); 1679fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* d2 = CreateDiamond(&graph, &common, p1); 1680fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* add = graph.NewNode(machine.Int32Add(), d1, d2); 1681fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* ret = graph.NewNode(common.Return(), add, start, start); 1682fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* end = graph.NewNode(common.End(), ret, start); 1683fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 1684fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org graph.SetEnd(end); 1685fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 1686fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org ComputeAndVerifySchedule(24, &graph); 1687fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org} 1688fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 1689fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 1690fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.orgTEST(FloatingDiamond3) { 1691fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org HandleAndZoneScope scope; 1692fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Graph graph(scope.main_zone()); 1693fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org CommonOperatorBuilder common(scope.main_zone()); 16946313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org MachineOperatorBuilder machine; 1695fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 1696fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* start = graph.NewNode(common.Start(2)); 1697fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org graph.SetStart(start); 1698fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 1699fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* p0 = graph.NewNode(common.Parameter(0), start); 1700fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* p1 = graph.NewNode(common.Parameter(1), start); 1701fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* d1 = CreateDiamond(&graph, &common, p0); 1702fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* d2 = CreateDiamond(&graph, &common, p1); 1703fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* add = graph.NewNode(machine.Int32Add(), d1, d2); 1704fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* d3 = CreateDiamond(&graph, &common, add); 1705fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* ret = graph.NewNode(common.Return(), d3, start, start); 1706fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* end = graph.NewNode(common.End(), ret, start); 1707fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 1708fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org graph.SetEnd(end); 1709fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 1710fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org ComputeAndVerifySchedule(33, &graph); 1711fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org} 1712fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org 17137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#endif 1714