OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/v8.h" | 5 #include "src/v8.h" |
6 #include "test/cctest/cctest.h" | 6 #include "test/cctest/cctest.h" |
7 | 7 |
8 #include "src/compiler/access-builder.h" | 8 #include "src/compiler/access-builder.h" |
9 #include "src/compiler/common-operator.h" | 9 #include "src/compiler/common-operator.h" |
10 #include "src/compiler/generic-node-inl.h" | 10 #include "src/compiler/generic-node-inl.h" |
(...skipping 16 matching lines...) Expand all Loading... |
27 static void CheckRPONumbers(BasicBlockVector* order, size_t expected, | 27 static void CheckRPONumbers(BasicBlockVector* order, size_t expected, |
28 bool loops_allowed) { | 28 bool loops_allowed) { |
29 CHECK(expected == order->size()); | 29 CHECK(expected == order->size()); |
30 for (int i = 0; i < static_cast<int>(order->size()); i++) { | 30 for (int i = 0; i < static_cast<int>(order->size()); i++) { |
31 CHECK(order->at(i)->rpo_number() == i); | 31 CHECK(order->at(i)->rpo_number() == i); |
32 if (!loops_allowed) { | 32 if (!loops_allowed) { |
33 CHECK_LT(order->at(i)->loop_end(), 0); | 33 CHECK_LT(order->at(i)->loop_end(), 0); |
34 CHECK_EQ(NULL, order->at(i)->loop_header()); | 34 CHECK_EQ(NULL, order->at(i)->loop_header()); |
35 } | 35 } |
36 } | 36 } |
| 37 int number = 0; |
| 38 for (auto const block : *order) { |
| 39 if (block->deferred()) continue; |
| 40 CHECK_EQ(number, block->ao_number()); |
| 41 ++number; |
| 42 } |
| 43 for (auto const block : *order) { |
| 44 if (!block->deferred()) continue; |
| 45 CHECK_EQ(number, block->ao_number()); |
| 46 ++number; |
| 47 } |
37 } | 48 } |
38 | 49 |
39 | 50 |
40 static void CheckLoop(BasicBlockVector* order, BasicBlock** blocks, | 51 static void CheckLoop(BasicBlockVector* order, BasicBlock** blocks, |
41 int body_size) { | 52 int body_size) { |
42 BasicBlock* header = blocks[0]; | 53 BasicBlock* header = blocks[0]; |
43 CHECK_GT(header->loop_end(), 0); | 54 CHECK_GT(header->loop_end(), 0); |
44 CHECK_EQ(body_size, (header->loop_end() - header->rpo_number())); | 55 CHECK_EQ(body_size, (header->loop_end() - header->rpo_number())); |
45 for (int i = 0; i < body_size; i++) { | 56 for (int i = 0; i < body_size; i++) { |
46 int num = blocks[i]->rpo_number(); | 57 int num = blocks[i]->rpo_number(); |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 | 157 |
147 TEST(RPOLine) { | 158 TEST(RPOLine) { |
148 HandleAndZoneScope scope; | 159 HandleAndZoneScope scope; |
149 | 160 |
150 for (int i = 0; i < 10; i++) { | 161 for (int i = 0; i < 10; i++) { |
151 Schedule schedule(scope.main_zone()); | 162 Schedule schedule(scope.main_zone()); |
152 | 163 |
153 BasicBlock* last = schedule.start(); | 164 BasicBlock* last = schedule.start(); |
154 for (int j = 0; j < i; j++) { | 165 for (int j = 0; j < i; j++) { |
155 BasicBlock* block = schedule.NewBasicBlock(); | 166 BasicBlock* block = schedule.NewBasicBlock(); |
| 167 block->set_deferred(i & 1); |
156 schedule.AddGoto(last, block); | 168 schedule.AddGoto(last, block); |
157 last = block; | 169 last = block; |
158 } | 170 } |
159 ZonePool zone_pool(scope.main_isolate()); | 171 ZonePool zone_pool(scope.main_isolate()); |
160 BasicBlockVector* order = | 172 BasicBlockVector* order = |
161 Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); | 173 Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
162 CheckRPONumbers(order, 1 + i, false); | 174 CheckRPONumbers(order, 1 + i, false); |
163 | 175 |
164 for (size_t i = 0; i < schedule.BasicBlockCount(); i++) { | 176 for (size_t i = 0; i < schedule.BasicBlockCount(); i++) { |
165 BasicBlock* block = schedule.GetBlockById(BasicBlock::Id::FromSize(i)); | 177 BasicBlock* block = schedule.GetBlockById(BasicBlock::Id::FromSize(i)); |
(...skipping 1790 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1956 graph.SetEnd(end); | 1968 graph.SetEnd(end); |
1957 | 1969 |
1958 Schedule* schedule = ComputeAndVerifySchedule(6, &graph); | 1970 Schedule* schedule = ComputeAndVerifySchedule(6, &graph); |
1959 BasicBlock* block = schedule->block(loop); | 1971 BasicBlock* block = schedule->block(loop); |
1960 CHECK_NE(NULL, loop); | 1972 CHECK_NE(NULL, loop); |
1961 CHECK_EQ(block, schedule->block(effect)); | 1973 CHECK_EQ(block, schedule->block(effect)); |
1962 CHECK_GE(block->rpo_number(), 0); | 1974 CHECK_GE(block->rpo_number(), 0); |
1963 } | 1975 } |
1964 | 1976 |
1965 #endif | 1977 #endif |
OLD | NEW |