| 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 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 return node_count; | 86 return node_count; |
| 87 } | 87 } |
| 88 | 88 |
| 89 | 89 |
| 90 static Schedule* ComputeAndVerifySchedule(int expected, Graph* graph) { | 90 static Schedule* ComputeAndVerifySchedule(int expected, Graph* graph) { |
| 91 if (FLAG_trace_turbo) { | 91 if (FLAG_trace_turbo) { |
| 92 OFStream os(stdout); | 92 OFStream os(stdout); |
| 93 os << AsDOT(*graph); | 93 os << AsDOT(*graph); |
| 94 } | 94 } |
| 95 | 95 |
| 96 Schedule* schedule = Scheduler::ComputeSchedule(graph); | 96 ZonePool zone_pool(graph->zone()->isolate()); |
| 97 Schedule* schedule = Scheduler::ComputeSchedule(&zone_pool, graph); |
| 97 | 98 |
| 98 if (FLAG_trace_turbo_scheduler) { | 99 if (FLAG_trace_turbo_scheduler) { |
| 99 OFStream os(stdout); | 100 OFStream os(stdout); |
| 100 os << *schedule << std::endl; | 101 os << *schedule << std::endl; |
| 101 } | 102 } |
| 102 ScheduleVerifier::Run(schedule); | 103 ScheduleVerifier::Run(schedule); |
| 103 CHECK_EQ(expected, GetScheduledNodeCount(schedule)); | 104 CHECK_EQ(expected, GetScheduledNodeCount(schedule)); |
| 104 return schedule; | 105 return schedule; |
| 105 } | 106 } |
| 106 | 107 |
| 107 | 108 |
| 108 TEST(RPODegenerate1) { | 109 TEST(RPODegenerate1) { |
| 109 HandleAndZoneScope scope; | 110 HandleAndZoneScope scope; |
| 110 Schedule schedule(scope.main_zone()); | 111 Schedule schedule(scope.main_zone()); |
| 111 | 112 |
| 112 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 113 ZonePool zone_pool(scope.main_isolate()); |
| 114 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 113 CheckRPONumbers(order, 1, false); | 115 CheckRPONumbers(order, 1, false); |
| 114 CHECK_EQ(schedule.start(), order->at(0)); | 116 CHECK_EQ(schedule.start(), order->at(0)); |
| 115 } | 117 } |
| 116 | 118 |
| 117 | 119 |
| 118 TEST(RPODegenerate2) { | 120 TEST(RPODegenerate2) { |
| 119 HandleAndZoneScope scope; | 121 HandleAndZoneScope scope; |
| 120 Schedule schedule(scope.main_zone()); | 122 Schedule schedule(scope.main_zone()); |
| 121 | 123 |
| 122 schedule.AddGoto(schedule.start(), schedule.end()); | 124 schedule.AddGoto(schedule.start(), schedule.end()); |
| 123 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 125 ZonePool zone_pool(scope.main_isolate()); |
| 126 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 124 CheckRPONumbers(order, 2, false); | 127 CheckRPONumbers(order, 2, false); |
| 125 CHECK_EQ(schedule.start(), order->at(0)); | 128 CHECK_EQ(schedule.start(), order->at(0)); |
| 126 CHECK_EQ(schedule.end(), order->at(1)); | 129 CHECK_EQ(schedule.end(), order->at(1)); |
| 127 } | 130 } |
| 128 | 131 |
| 129 | 132 |
| 130 TEST(RPOLine) { | 133 TEST(RPOLine) { |
| 131 HandleAndZoneScope scope; | 134 HandleAndZoneScope scope; |
| 132 | 135 |
| 133 for (int i = 0; i < 10; i++) { | 136 for (int i = 0; i < 10; i++) { |
| 134 Schedule schedule(scope.main_zone()); | 137 Schedule schedule(scope.main_zone()); |
| 135 | 138 |
| 136 BasicBlock* last = schedule.start(); | 139 BasicBlock* last = schedule.start(); |
| 137 for (int j = 0; j < i; j++) { | 140 for (int j = 0; j < i; j++) { |
| 138 BasicBlock* block = schedule.NewBasicBlock(); | 141 BasicBlock* block = schedule.NewBasicBlock(); |
| 139 schedule.AddGoto(last, block); | 142 schedule.AddGoto(last, block); |
| 140 last = block; | 143 last = block; |
| 141 } | 144 } |
| 142 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 145 ZonePool zone_pool(scope.main_isolate()); |
| 146 BasicBlockVector* order = |
| 147 Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 143 CheckRPONumbers(order, 1 + i, false); | 148 CheckRPONumbers(order, 1 + i, false); |
| 144 | 149 |
| 145 for (size_t i = 0; i < schedule.BasicBlockCount(); i++) { | 150 for (size_t i = 0; i < schedule.BasicBlockCount(); i++) { |
| 146 BasicBlock* block = schedule.GetBlockById(BasicBlock::Id::FromSize(i)); | 151 BasicBlock* block = schedule.GetBlockById(BasicBlock::Id::FromSize(i)); |
| 147 if (block->rpo_number() >= 0 && block->SuccessorCount() == 1) { | 152 if (block->rpo_number() >= 0 && block->SuccessorCount() == 1) { |
| 148 CHECK(block->rpo_number() + 1 == block->SuccessorAt(0)->rpo_number()); | 153 CHECK(block->rpo_number() + 1 == block->SuccessorAt(0)->rpo_number()); |
| 149 } | 154 } |
| 150 } | 155 } |
| 151 } | 156 } |
| 152 } | 157 } |
| 153 | 158 |
| 154 | 159 |
| 155 TEST(RPOSelfLoop) { | 160 TEST(RPOSelfLoop) { |
| 156 HandleAndZoneScope scope; | 161 HandleAndZoneScope scope; |
| 157 Schedule schedule(scope.main_zone()); | 162 Schedule schedule(scope.main_zone()); |
| 158 schedule.AddSuccessor(schedule.start(), schedule.start()); | 163 schedule.AddSuccessor(schedule.start(), schedule.start()); |
| 159 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 164 ZonePool zone_pool(scope.main_isolate()); |
| 165 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 160 CheckRPONumbers(order, 1, true); | 166 CheckRPONumbers(order, 1, true); |
| 161 BasicBlock* loop[] = {schedule.start()}; | 167 BasicBlock* loop[] = {schedule.start()}; |
| 162 CheckLoopContains(loop, 1); | 168 CheckLoopContains(loop, 1); |
| 163 } | 169 } |
| 164 | 170 |
| 165 | 171 |
| 166 TEST(RPOEntryLoop) { | 172 TEST(RPOEntryLoop) { |
| 167 HandleAndZoneScope scope; | 173 HandleAndZoneScope scope; |
| 168 Schedule schedule(scope.main_zone()); | 174 Schedule schedule(scope.main_zone()); |
| 169 schedule.AddSuccessor(schedule.start(), schedule.end()); | 175 schedule.AddSuccessor(schedule.start(), schedule.end()); |
| 170 schedule.AddSuccessor(schedule.end(), schedule.start()); | 176 schedule.AddSuccessor(schedule.end(), schedule.start()); |
| 171 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 177 ZonePool zone_pool(scope.main_isolate()); |
| 178 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 172 CheckRPONumbers(order, 2, true); | 179 CheckRPONumbers(order, 2, true); |
| 173 BasicBlock* loop[] = {schedule.start(), schedule.end()}; | 180 BasicBlock* loop[] = {schedule.start(), schedule.end()}; |
| 174 CheckLoopContains(loop, 2); | 181 CheckLoopContains(loop, 2); |
| 175 } | 182 } |
| 176 | 183 |
| 177 | 184 |
| 178 TEST(RPOEndLoop) { | 185 TEST(RPOEndLoop) { |
| 179 HandleAndZoneScope scope; | 186 HandleAndZoneScope scope; |
| 180 Schedule schedule(scope.main_zone()); | 187 Schedule schedule(scope.main_zone()); |
| 181 SmartPointer<TestLoop> loop1(CreateLoop(&schedule, 2)); | 188 SmartPointer<TestLoop> loop1(CreateLoop(&schedule, 2)); |
| 182 schedule.AddSuccessor(schedule.start(), loop1->header()); | 189 schedule.AddSuccessor(schedule.start(), loop1->header()); |
| 183 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 190 ZonePool zone_pool(scope.main_isolate()); |
| 191 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 184 CheckRPONumbers(order, 3, true); | 192 CheckRPONumbers(order, 3, true); |
| 185 CheckLoopContains(loop1->nodes, loop1->count); | 193 CheckLoopContains(loop1->nodes, loop1->count); |
| 186 } | 194 } |
| 187 | 195 |
| 188 | 196 |
| 189 TEST(RPOEndLoopNested) { | 197 TEST(RPOEndLoopNested) { |
| 190 HandleAndZoneScope scope; | 198 HandleAndZoneScope scope; |
| 191 Schedule schedule(scope.main_zone()); | 199 Schedule schedule(scope.main_zone()); |
| 192 SmartPointer<TestLoop> loop1(CreateLoop(&schedule, 2)); | 200 SmartPointer<TestLoop> loop1(CreateLoop(&schedule, 2)); |
| 193 schedule.AddSuccessor(schedule.start(), loop1->header()); | 201 schedule.AddSuccessor(schedule.start(), loop1->header()); |
| 194 schedule.AddSuccessor(loop1->last(), schedule.start()); | 202 schedule.AddSuccessor(loop1->last(), schedule.start()); |
| 195 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 203 ZonePool zone_pool(scope.main_isolate()); |
| 204 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 196 CheckRPONumbers(order, 3, true); | 205 CheckRPONumbers(order, 3, true); |
| 197 CheckLoopContains(loop1->nodes, loop1->count); | 206 CheckLoopContains(loop1->nodes, loop1->count); |
| 198 } | 207 } |
| 199 | 208 |
| 200 | 209 |
| 201 TEST(RPODiamond) { | 210 TEST(RPODiamond) { |
| 202 HandleAndZoneScope scope; | 211 HandleAndZoneScope scope; |
| 203 Schedule schedule(scope.main_zone()); | 212 Schedule schedule(scope.main_zone()); |
| 204 | 213 |
| 205 BasicBlock* A = schedule.start(); | 214 BasicBlock* A = schedule.start(); |
| 206 BasicBlock* B = schedule.NewBasicBlock(); | 215 BasicBlock* B = schedule.NewBasicBlock(); |
| 207 BasicBlock* C = schedule.NewBasicBlock(); | 216 BasicBlock* C = schedule.NewBasicBlock(); |
| 208 BasicBlock* D = schedule.end(); | 217 BasicBlock* D = schedule.end(); |
| 209 | 218 |
| 210 schedule.AddSuccessor(A, B); | 219 schedule.AddSuccessor(A, B); |
| 211 schedule.AddSuccessor(A, C); | 220 schedule.AddSuccessor(A, C); |
| 212 schedule.AddSuccessor(B, D); | 221 schedule.AddSuccessor(B, D); |
| 213 schedule.AddSuccessor(C, D); | 222 schedule.AddSuccessor(C, D); |
| 214 | 223 |
| 215 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 224 ZonePool zone_pool(scope.main_isolate()); |
| 225 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 216 CheckRPONumbers(order, 4, false); | 226 CheckRPONumbers(order, 4, false); |
| 217 | 227 |
| 218 CHECK_EQ(0, A->rpo_number()); | 228 CHECK_EQ(0, A->rpo_number()); |
| 219 CHECK((B->rpo_number() == 1 && C->rpo_number() == 2) || | 229 CHECK((B->rpo_number() == 1 && C->rpo_number() == 2) || |
| 220 (B->rpo_number() == 2 && C->rpo_number() == 1)); | 230 (B->rpo_number() == 2 && C->rpo_number() == 1)); |
| 221 CHECK_EQ(3, D->rpo_number()); | 231 CHECK_EQ(3, D->rpo_number()); |
| 222 } | 232 } |
| 223 | 233 |
| 224 | 234 |
| 225 TEST(RPOLoop1) { | 235 TEST(RPOLoop1) { |
| 226 HandleAndZoneScope scope; | 236 HandleAndZoneScope scope; |
| 227 Schedule schedule(scope.main_zone()); | 237 Schedule schedule(scope.main_zone()); |
| 228 | 238 |
| 229 BasicBlock* A = schedule.start(); | 239 BasicBlock* A = schedule.start(); |
| 230 BasicBlock* B = schedule.NewBasicBlock(); | 240 BasicBlock* B = schedule.NewBasicBlock(); |
| 231 BasicBlock* C = schedule.NewBasicBlock(); | 241 BasicBlock* C = schedule.NewBasicBlock(); |
| 232 BasicBlock* D = schedule.end(); | 242 BasicBlock* D = schedule.end(); |
| 233 | 243 |
| 234 schedule.AddSuccessor(A, B); | 244 schedule.AddSuccessor(A, B); |
| 235 schedule.AddSuccessor(B, C); | 245 schedule.AddSuccessor(B, C); |
| 236 schedule.AddSuccessor(C, B); | 246 schedule.AddSuccessor(C, B); |
| 237 schedule.AddSuccessor(C, D); | 247 schedule.AddSuccessor(C, D); |
| 238 | 248 |
| 239 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 249 ZonePool zone_pool(scope.main_isolate()); |
| 250 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 240 CheckRPONumbers(order, 4, true); | 251 CheckRPONumbers(order, 4, true); |
| 241 BasicBlock* loop[] = {B, C}; | 252 BasicBlock* loop[] = {B, C}; |
| 242 CheckLoopContains(loop, 2); | 253 CheckLoopContains(loop, 2); |
| 243 } | 254 } |
| 244 | 255 |
| 245 | 256 |
| 246 TEST(RPOLoop2) { | 257 TEST(RPOLoop2) { |
| 247 HandleAndZoneScope scope; | 258 HandleAndZoneScope scope; |
| 248 Schedule schedule(scope.main_zone()); | 259 Schedule schedule(scope.main_zone()); |
| 249 | 260 |
| 250 BasicBlock* A = schedule.start(); | 261 BasicBlock* A = schedule.start(); |
| 251 BasicBlock* B = schedule.NewBasicBlock(); | 262 BasicBlock* B = schedule.NewBasicBlock(); |
| 252 BasicBlock* C = schedule.NewBasicBlock(); | 263 BasicBlock* C = schedule.NewBasicBlock(); |
| 253 BasicBlock* D = schedule.end(); | 264 BasicBlock* D = schedule.end(); |
| 254 | 265 |
| 255 schedule.AddSuccessor(A, B); | 266 schedule.AddSuccessor(A, B); |
| 256 schedule.AddSuccessor(B, C); | 267 schedule.AddSuccessor(B, C); |
| 257 schedule.AddSuccessor(C, B); | 268 schedule.AddSuccessor(C, B); |
| 258 schedule.AddSuccessor(B, D); | 269 schedule.AddSuccessor(B, D); |
| 259 | 270 |
| 260 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 271 ZonePool zone_pool(scope.main_isolate()); |
| 272 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 261 CheckRPONumbers(order, 4, true); | 273 CheckRPONumbers(order, 4, true); |
| 262 BasicBlock* loop[] = {B, C}; | 274 BasicBlock* loop[] = {B, C}; |
| 263 CheckLoopContains(loop, 2); | 275 CheckLoopContains(loop, 2); |
| 264 } | 276 } |
| 265 | 277 |
| 266 | 278 |
| 267 TEST(RPOLoopN) { | 279 TEST(RPOLoopN) { |
| 268 HandleAndZoneScope scope; | 280 HandleAndZoneScope scope; |
| 269 | 281 |
| 270 for (int i = 0; i < 11; i++) { | 282 for (int i = 0; i < 11; i++) { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 292 if (i == 4) schedule.AddSuccessor(E, B); | 304 if (i == 4) schedule.AddSuccessor(E, B); |
| 293 if (i == 5) schedule.AddSuccessor(F, B); | 305 if (i == 5) schedule.AddSuccessor(F, B); |
| 294 | 306 |
| 295 // Throw in extra loop exits from time to time. | 307 // Throw in extra loop exits from time to time. |
| 296 if (i == 6) schedule.AddSuccessor(B, G); | 308 if (i == 6) schedule.AddSuccessor(B, G); |
| 297 if (i == 7) schedule.AddSuccessor(C, G); | 309 if (i == 7) schedule.AddSuccessor(C, G); |
| 298 if (i == 8) schedule.AddSuccessor(D, G); | 310 if (i == 8) schedule.AddSuccessor(D, G); |
| 299 if (i == 9) schedule.AddSuccessor(E, G); | 311 if (i == 9) schedule.AddSuccessor(E, G); |
| 300 if (i == 10) schedule.AddSuccessor(F, G); | 312 if (i == 10) schedule.AddSuccessor(F, G); |
| 301 | 313 |
| 302 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 314 ZonePool zone_pool(scope.main_isolate()); |
| 315 BasicBlockVector* order = |
| 316 Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 303 CheckRPONumbers(order, 7, true); | 317 CheckRPONumbers(order, 7, true); |
| 304 BasicBlock* loop[] = {B, C, D, E, F}; | 318 BasicBlock* loop[] = {B, C, D, E, F}; |
| 305 CheckLoopContains(loop, 5); | 319 CheckLoopContains(loop, 5); |
| 306 } | 320 } |
| 307 } | 321 } |
| 308 | 322 |
| 309 | 323 |
| 310 TEST(RPOLoopNest1) { | 324 TEST(RPOLoopNest1) { |
| 311 HandleAndZoneScope scope; | 325 HandleAndZoneScope scope; |
| 312 Schedule schedule(scope.main_zone()); | 326 Schedule schedule(scope.main_zone()); |
| 313 | 327 |
| 314 BasicBlock* A = schedule.start(); | 328 BasicBlock* A = schedule.start(); |
| 315 BasicBlock* B = schedule.NewBasicBlock(); | 329 BasicBlock* B = schedule.NewBasicBlock(); |
| 316 BasicBlock* C = schedule.NewBasicBlock(); | 330 BasicBlock* C = schedule.NewBasicBlock(); |
| 317 BasicBlock* D = schedule.NewBasicBlock(); | 331 BasicBlock* D = schedule.NewBasicBlock(); |
| 318 BasicBlock* E = schedule.NewBasicBlock(); | 332 BasicBlock* E = schedule.NewBasicBlock(); |
| 319 BasicBlock* F = schedule.end(); | 333 BasicBlock* F = schedule.end(); |
| 320 | 334 |
| 321 schedule.AddSuccessor(A, B); | 335 schedule.AddSuccessor(A, B); |
| 322 schedule.AddSuccessor(B, C); | 336 schedule.AddSuccessor(B, C); |
| 323 schedule.AddSuccessor(C, D); | 337 schedule.AddSuccessor(C, D); |
| 324 schedule.AddSuccessor(D, C); | 338 schedule.AddSuccessor(D, C); |
| 325 schedule.AddSuccessor(D, E); | 339 schedule.AddSuccessor(D, E); |
| 326 schedule.AddSuccessor(E, B); | 340 schedule.AddSuccessor(E, B); |
| 327 schedule.AddSuccessor(E, F); | 341 schedule.AddSuccessor(E, F); |
| 328 | 342 |
| 329 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 343 ZonePool zone_pool(scope.main_isolate()); |
| 344 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 330 CheckRPONumbers(order, 6, true); | 345 CheckRPONumbers(order, 6, true); |
| 331 BasicBlock* loop1[] = {B, C, D, E}; | 346 BasicBlock* loop1[] = {B, C, D, E}; |
| 332 CheckLoopContains(loop1, 4); | 347 CheckLoopContains(loop1, 4); |
| 333 | 348 |
| 334 BasicBlock* loop2[] = {C, D}; | 349 BasicBlock* loop2[] = {C, D}; |
| 335 CheckLoopContains(loop2, 2); | 350 CheckLoopContains(loop2, 2); |
| 336 } | 351 } |
| 337 | 352 |
| 338 | 353 |
| 339 TEST(RPOLoopNest2) { | 354 TEST(RPOLoopNest2) { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 354 schedule.AddSuccessor(C, D); | 369 schedule.AddSuccessor(C, D); |
| 355 schedule.AddSuccessor(D, E); | 370 schedule.AddSuccessor(D, E); |
| 356 schedule.AddSuccessor(E, F); | 371 schedule.AddSuccessor(E, F); |
| 357 schedule.AddSuccessor(F, G); | 372 schedule.AddSuccessor(F, G); |
| 358 schedule.AddSuccessor(G, H); | 373 schedule.AddSuccessor(G, H); |
| 359 | 374 |
| 360 schedule.AddSuccessor(E, D); | 375 schedule.AddSuccessor(E, D); |
| 361 schedule.AddSuccessor(F, C); | 376 schedule.AddSuccessor(F, C); |
| 362 schedule.AddSuccessor(G, B); | 377 schedule.AddSuccessor(G, B); |
| 363 | 378 |
| 364 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 379 ZonePool zone_pool(scope.main_isolate()); |
| 380 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 365 CheckRPONumbers(order, 8, true); | 381 CheckRPONumbers(order, 8, true); |
| 366 BasicBlock* loop1[] = {B, C, D, E, F, G}; | 382 BasicBlock* loop1[] = {B, C, D, E, F, G}; |
| 367 CheckLoopContains(loop1, 6); | 383 CheckLoopContains(loop1, 6); |
| 368 | 384 |
| 369 BasicBlock* loop2[] = {C, D, E, F}; | 385 BasicBlock* loop2[] = {C, D, E, F}; |
| 370 CheckLoopContains(loop2, 4); | 386 CheckLoopContains(loop2, 4); |
| 371 | 387 |
| 372 BasicBlock* loop3[] = {D, E}; | 388 BasicBlock* loop3[] = {D, E}; |
| 373 CheckLoopContains(loop3, 2); | 389 CheckLoopContains(loop3, 2); |
| 374 } | 390 } |
| 375 | 391 |
| 376 | 392 |
| 377 TEST(RPOLoopFollow1) { | 393 TEST(RPOLoopFollow1) { |
| 378 HandleAndZoneScope scope; | 394 HandleAndZoneScope scope; |
| 379 Schedule schedule(scope.main_zone()); | 395 Schedule schedule(scope.main_zone()); |
| 380 | 396 |
| 381 SmartPointer<TestLoop> loop1(CreateLoop(&schedule, 1)); | 397 SmartPointer<TestLoop> loop1(CreateLoop(&schedule, 1)); |
| 382 SmartPointer<TestLoop> loop2(CreateLoop(&schedule, 1)); | 398 SmartPointer<TestLoop> loop2(CreateLoop(&schedule, 1)); |
| 383 | 399 |
| 384 BasicBlock* A = schedule.start(); | 400 BasicBlock* A = schedule.start(); |
| 385 BasicBlock* E = schedule.end(); | 401 BasicBlock* E = schedule.end(); |
| 386 | 402 |
| 387 schedule.AddSuccessor(A, loop1->header()); | 403 schedule.AddSuccessor(A, loop1->header()); |
| 388 schedule.AddSuccessor(loop1->header(), loop2->header()); | 404 schedule.AddSuccessor(loop1->header(), loop2->header()); |
| 389 schedule.AddSuccessor(loop2->last(), E); | 405 schedule.AddSuccessor(loop2->last(), E); |
| 390 | 406 |
| 391 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 407 ZonePool zone_pool(scope.main_isolate()); |
| 408 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 392 | 409 |
| 393 CheckLoopContains(loop1->nodes, loop1->count); | 410 CheckLoopContains(loop1->nodes, loop1->count); |
| 394 | 411 |
| 395 CHECK_EQ(static_cast<int>(schedule.BasicBlockCount()), | 412 CHECK_EQ(static_cast<int>(schedule.BasicBlockCount()), |
| 396 static_cast<int>(order->size())); | 413 static_cast<int>(order->size())); |
| 397 CheckLoopContains(loop1->nodes, loop1->count); | 414 CheckLoopContains(loop1->nodes, loop1->count); |
| 398 CheckLoopContains(loop2->nodes, loop2->count); | 415 CheckLoopContains(loop2->nodes, loop2->count); |
| 399 } | 416 } |
| 400 | 417 |
| 401 | 418 |
| 402 TEST(RPOLoopFollow2) { | 419 TEST(RPOLoopFollow2) { |
| 403 HandleAndZoneScope scope; | 420 HandleAndZoneScope scope; |
| 404 Schedule schedule(scope.main_zone()); | 421 Schedule schedule(scope.main_zone()); |
| 405 | 422 |
| 406 SmartPointer<TestLoop> loop1(CreateLoop(&schedule, 1)); | 423 SmartPointer<TestLoop> loop1(CreateLoop(&schedule, 1)); |
| 407 SmartPointer<TestLoop> loop2(CreateLoop(&schedule, 1)); | 424 SmartPointer<TestLoop> loop2(CreateLoop(&schedule, 1)); |
| 408 | 425 |
| 409 BasicBlock* A = schedule.start(); | 426 BasicBlock* A = schedule.start(); |
| 410 BasicBlock* S = schedule.NewBasicBlock(); | 427 BasicBlock* S = schedule.NewBasicBlock(); |
| 411 BasicBlock* E = schedule.end(); | 428 BasicBlock* E = schedule.end(); |
| 412 | 429 |
| 413 schedule.AddSuccessor(A, loop1->header()); | 430 schedule.AddSuccessor(A, loop1->header()); |
| 414 schedule.AddSuccessor(loop1->header(), S); | 431 schedule.AddSuccessor(loop1->header(), S); |
| 415 schedule.AddSuccessor(S, loop2->header()); | 432 schedule.AddSuccessor(S, loop2->header()); |
| 416 schedule.AddSuccessor(loop2->last(), E); | 433 schedule.AddSuccessor(loop2->last(), E); |
| 417 | 434 |
| 418 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 435 ZonePool zone_pool(scope.main_isolate()); |
| 436 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 419 | 437 |
| 420 CheckLoopContains(loop1->nodes, loop1->count); | 438 CheckLoopContains(loop1->nodes, loop1->count); |
| 421 | 439 |
| 422 CHECK_EQ(static_cast<int>(schedule.BasicBlockCount()), | 440 CHECK_EQ(static_cast<int>(schedule.BasicBlockCount()), |
| 423 static_cast<int>(order->size())); | 441 static_cast<int>(order->size())); |
| 424 CheckLoopContains(loop1->nodes, loop1->count); | 442 CheckLoopContains(loop1->nodes, loop1->count); |
| 425 CheckLoopContains(loop2->nodes, loop2->count); | 443 CheckLoopContains(loop2->nodes, loop2->count); |
| 426 } | 444 } |
| 427 | 445 |
| 428 | 446 |
| 429 TEST(RPOLoopFollowN) { | 447 TEST(RPOLoopFollowN) { |
| 430 HandleAndZoneScope scope; | 448 HandleAndZoneScope scope; |
| 431 | 449 |
| 432 for (int size = 1; size < 5; size++) { | 450 for (int size = 1; size < 5; size++) { |
| 433 for (int exit = 0; exit < size; exit++) { | 451 for (int exit = 0; exit < size; exit++) { |
| 434 Schedule schedule(scope.main_zone()); | 452 Schedule schedule(scope.main_zone()); |
| 435 SmartPointer<TestLoop> loop1(CreateLoop(&schedule, size)); | 453 SmartPointer<TestLoop> loop1(CreateLoop(&schedule, size)); |
| 436 SmartPointer<TestLoop> loop2(CreateLoop(&schedule, size)); | 454 SmartPointer<TestLoop> loop2(CreateLoop(&schedule, size)); |
| 437 BasicBlock* A = schedule.start(); | 455 BasicBlock* A = schedule.start(); |
| 438 BasicBlock* E = schedule.end(); | 456 BasicBlock* E = schedule.end(); |
| 439 | 457 |
| 440 schedule.AddSuccessor(A, loop1->header()); | 458 schedule.AddSuccessor(A, loop1->header()); |
| 441 schedule.AddSuccessor(loop1->nodes[exit], loop2->header()); | 459 schedule.AddSuccessor(loop1->nodes[exit], loop2->header()); |
| 442 schedule.AddSuccessor(loop2->nodes[exit], E); | 460 schedule.AddSuccessor(loop2->nodes[exit], E); |
| 443 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 461 ZonePool zone_pool(scope.main_isolate()); |
| 462 BasicBlockVector* order = |
| 463 Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 444 CheckLoopContains(loop1->nodes, loop1->count); | 464 CheckLoopContains(loop1->nodes, loop1->count); |
| 445 | 465 |
| 446 CHECK_EQ(static_cast<int>(schedule.BasicBlockCount()), | 466 CHECK_EQ(static_cast<int>(schedule.BasicBlockCount()), |
| 447 static_cast<int>(order->size())); | 467 static_cast<int>(order->size())); |
| 448 CheckLoopContains(loop1->nodes, loop1->count); | 468 CheckLoopContains(loop1->nodes, loop1->count); |
| 449 CheckLoopContains(loop2->nodes, loop2->count); | 469 CheckLoopContains(loop2->nodes, loop2->count); |
| 450 } | 470 } |
| 451 } | 471 } |
| 452 } | 472 } |
| 453 | 473 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 464 BasicBlock* C = schedule.NewBasicBlock(); | 484 BasicBlock* C = schedule.NewBasicBlock(); |
| 465 BasicBlock* E = schedule.end(); | 485 BasicBlock* E = schedule.end(); |
| 466 | 486 |
| 467 schedule.AddSuccessor(A, B); | 487 schedule.AddSuccessor(A, B); |
| 468 schedule.AddSuccessor(B, loop1->header()); | 488 schedule.AddSuccessor(B, loop1->header()); |
| 469 schedule.AddSuccessor(loop1->header(), loop2->header()); | 489 schedule.AddSuccessor(loop1->header(), loop2->header()); |
| 470 schedule.AddSuccessor(loop2->last(), C); | 490 schedule.AddSuccessor(loop2->last(), C); |
| 471 schedule.AddSuccessor(C, E); | 491 schedule.AddSuccessor(C, E); |
| 472 schedule.AddSuccessor(C, B); | 492 schedule.AddSuccessor(C, B); |
| 473 | 493 |
| 474 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 494 ZonePool zone_pool(scope.main_isolate()); |
| 495 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 475 | 496 |
| 476 CheckLoopContains(loop1->nodes, loop1->count); | 497 CheckLoopContains(loop1->nodes, loop1->count); |
| 477 | 498 |
| 478 CHECK_EQ(static_cast<int>(schedule.BasicBlockCount()), | 499 CHECK_EQ(static_cast<int>(schedule.BasicBlockCount()), |
| 479 static_cast<int>(order->size())); | 500 static_cast<int>(order->size())); |
| 480 CheckLoopContains(loop1->nodes, loop1->count); | 501 CheckLoopContains(loop1->nodes, loop1->count); |
| 481 CheckLoopContains(loop2->nodes, loop2->count); | 502 CheckLoopContains(loop2->nodes, loop2->count); |
| 482 | 503 |
| 483 BasicBlock* loop3[] = {B, loop1->nodes[0], loop2->nodes[0], C}; | 504 BasicBlock* loop3[] = {B, loop1->nodes[0], loop2->nodes[0], C}; |
| 484 CheckLoopContains(loop3, 4); | 505 CheckLoopContains(loop3, 4); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 495 BasicBlock* A = schedule.start(); | 516 BasicBlock* A = schedule.start(); |
| 496 BasicBlock* E = schedule.end(); | 517 BasicBlock* E = schedule.end(); |
| 497 | 518 |
| 498 SmartPointer<TestLoop> loop1(CreateLoop(&schedule, size)); | 519 SmartPointer<TestLoop> loop1(CreateLoop(&schedule, size)); |
| 499 schedule.AddSuccessor(A, loop1->header()); | 520 schedule.AddSuccessor(A, loop1->header()); |
| 500 schedule.AddSuccessor(loop1->last(), E); | 521 schedule.AddSuccessor(loop1->last(), E); |
| 501 | 522 |
| 502 schedule.AddSuccessor(loop1->nodes[i], loop1->header()); | 523 schedule.AddSuccessor(loop1->nodes[i], loop1->header()); |
| 503 schedule.AddSuccessor(loop1->nodes[j], E); | 524 schedule.AddSuccessor(loop1->nodes[j], E); |
| 504 | 525 |
| 505 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 526 ZonePool zone_pool(scope.main_isolate()); |
| 527 BasicBlockVector* order = |
| 528 Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 506 CheckRPONumbers(order, schedule.BasicBlockCount(), true); | 529 CheckRPONumbers(order, schedule.BasicBlockCount(), true); |
| 507 CheckLoopContains(loop1->nodes, loop1->count); | 530 CheckLoopContains(loop1->nodes, loop1->count); |
| 508 } | 531 } |
| 509 } | 532 } |
| 510 } | 533 } |
| 511 | 534 |
| 512 | 535 |
| 513 TEST(RPOLoopOutedges1) { | 536 TEST(RPOLoopOutedges1) { |
| 514 HandleAndZoneScope scope; | 537 HandleAndZoneScope scope; |
| 515 | 538 |
| 516 int size = 8; | 539 int size = 8; |
| 517 for (int i = 0; i < size; i++) { | 540 for (int i = 0; i < size; i++) { |
| 518 for (int j = 0; j < size; j++) { | 541 for (int j = 0; j < size; j++) { |
| 519 Schedule schedule(scope.main_zone()); | 542 Schedule schedule(scope.main_zone()); |
| 520 BasicBlock* A = schedule.start(); | 543 BasicBlock* A = schedule.start(); |
| 521 BasicBlock* D = schedule.NewBasicBlock(); | 544 BasicBlock* D = schedule.NewBasicBlock(); |
| 522 BasicBlock* E = schedule.end(); | 545 BasicBlock* E = schedule.end(); |
| 523 | 546 |
| 524 SmartPointer<TestLoop> loop1(CreateLoop(&schedule, size)); | 547 SmartPointer<TestLoop> loop1(CreateLoop(&schedule, size)); |
| 525 schedule.AddSuccessor(A, loop1->header()); | 548 schedule.AddSuccessor(A, loop1->header()); |
| 526 schedule.AddSuccessor(loop1->last(), E); | 549 schedule.AddSuccessor(loop1->last(), E); |
| 527 | 550 |
| 528 schedule.AddSuccessor(loop1->nodes[i], loop1->header()); | 551 schedule.AddSuccessor(loop1->nodes[i], loop1->header()); |
| 529 schedule.AddSuccessor(loop1->nodes[j], D); | 552 schedule.AddSuccessor(loop1->nodes[j], D); |
| 530 schedule.AddSuccessor(D, E); | 553 schedule.AddSuccessor(D, E); |
| 531 | 554 |
| 532 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 555 ZonePool zone_pool(scope.main_isolate()); |
| 556 BasicBlockVector* order = |
| 557 Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 533 CheckRPONumbers(order, schedule.BasicBlockCount(), true); | 558 CheckRPONumbers(order, schedule.BasicBlockCount(), true); |
| 534 CheckLoopContains(loop1->nodes, loop1->count); | 559 CheckLoopContains(loop1->nodes, loop1->count); |
| 535 } | 560 } |
| 536 } | 561 } |
| 537 } | 562 } |
| 538 | 563 |
| 539 | 564 |
| 540 TEST(RPOLoopOutedges2) { | 565 TEST(RPOLoopOutedges2) { |
| 541 HandleAndZoneScope scope; | 566 HandleAndZoneScope scope; |
| 542 | 567 |
| 543 int size = 8; | 568 int size = 8; |
| 544 for (int i = 0; i < size; i++) { | 569 for (int i = 0; i < size; i++) { |
| 545 Schedule schedule(scope.main_zone()); | 570 Schedule schedule(scope.main_zone()); |
| 546 BasicBlock* A = schedule.start(); | 571 BasicBlock* A = schedule.start(); |
| 547 BasicBlock* E = schedule.end(); | 572 BasicBlock* E = schedule.end(); |
| 548 | 573 |
| 549 SmartPointer<TestLoop> loop1(CreateLoop(&schedule, size)); | 574 SmartPointer<TestLoop> loop1(CreateLoop(&schedule, size)); |
| 550 schedule.AddSuccessor(A, loop1->header()); | 575 schedule.AddSuccessor(A, loop1->header()); |
| 551 schedule.AddSuccessor(loop1->last(), E); | 576 schedule.AddSuccessor(loop1->last(), E); |
| 552 | 577 |
| 553 for (int j = 0; j < size; j++) { | 578 for (int j = 0; j < size; j++) { |
| 554 BasicBlock* O = schedule.NewBasicBlock(); | 579 BasicBlock* O = schedule.NewBasicBlock(); |
| 555 schedule.AddSuccessor(loop1->nodes[j], O); | 580 schedule.AddSuccessor(loop1->nodes[j], O); |
| 556 schedule.AddSuccessor(O, E); | 581 schedule.AddSuccessor(O, E); |
| 557 } | 582 } |
| 558 | 583 |
| 559 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 584 ZonePool zone_pool(scope.main_isolate()); |
| 585 BasicBlockVector* order = |
| 586 Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 560 CheckRPONumbers(order, schedule.BasicBlockCount(), true); | 587 CheckRPONumbers(order, schedule.BasicBlockCount(), true); |
| 561 CheckLoopContains(loop1->nodes, loop1->count); | 588 CheckLoopContains(loop1->nodes, loop1->count); |
| 562 } | 589 } |
| 563 } | 590 } |
| 564 | 591 |
| 565 | 592 |
| 566 TEST(RPOLoopOutloops1) { | 593 TEST(RPOLoopOutloops1) { |
| 567 HandleAndZoneScope scope; | 594 HandleAndZoneScope scope; |
| 568 | 595 |
| 569 int size = 8; | 596 int size = 8; |
| 570 for (int i = 0; i < size; i++) { | 597 for (int i = 0; i < size; i++) { |
| 571 Schedule schedule(scope.main_zone()); | 598 Schedule schedule(scope.main_zone()); |
| 572 BasicBlock* A = schedule.start(); | 599 BasicBlock* A = schedule.start(); |
| 573 BasicBlock* E = schedule.end(); | 600 BasicBlock* E = schedule.end(); |
| 574 SmartPointer<TestLoop> loop1(CreateLoop(&schedule, size)); | 601 SmartPointer<TestLoop> loop1(CreateLoop(&schedule, size)); |
| 575 schedule.AddSuccessor(A, loop1->header()); | 602 schedule.AddSuccessor(A, loop1->header()); |
| 576 schedule.AddSuccessor(loop1->last(), E); | 603 schedule.AddSuccessor(loop1->last(), E); |
| 577 | 604 |
| 578 TestLoop** loopN = new TestLoop* [size]; | 605 TestLoop** loopN = new TestLoop* [size]; |
| 579 for (int j = 0; j < size; j++) { | 606 for (int j = 0; j < size; j++) { |
| 580 loopN[j] = CreateLoop(&schedule, 2); | 607 loopN[j] = CreateLoop(&schedule, 2); |
| 581 schedule.AddSuccessor(loop1->nodes[j], loopN[j]->header()); | 608 schedule.AddSuccessor(loop1->nodes[j], loopN[j]->header()); |
| 582 schedule.AddSuccessor(loopN[j]->last(), E); | 609 schedule.AddSuccessor(loopN[j]->last(), E); |
| 583 } | 610 } |
| 584 | 611 |
| 585 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 612 ZonePool zone_pool(scope.main_isolate()); |
| 613 BasicBlockVector* order = |
| 614 Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 586 CheckRPONumbers(order, schedule.BasicBlockCount(), true); | 615 CheckRPONumbers(order, schedule.BasicBlockCount(), true); |
| 587 CheckLoopContains(loop1->nodes, loop1->count); | 616 CheckLoopContains(loop1->nodes, loop1->count); |
| 588 | 617 |
| 589 for (int j = 0; j < size; j++) { | 618 for (int j = 0; j < size; j++) { |
| 590 CheckLoopContains(loopN[j]->nodes, loopN[j]->count); | 619 CheckLoopContains(loopN[j]->nodes, loopN[j]->count); |
| 591 delete loopN[j]; | 620 delete loopN[j]; |
| 592 } | 621 } |
| 593 delete[] loopN; | 622 delete[] loopN; |
| 594 } | 623 } |
| 595 } | 624 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 606 BasicBlock* E = schedule.NewBasicBlock(); | 635 BasicBlock* E = schedule.NewBasicBlock(); |
| 607 | 636 |
| 608 schedule.AddSuccessor(A, B); | 637 schedule.AddSuccessor(A, B); |
| 609 schedule.AddSuccessor(B, C); | 638 schedule.AddSuccessor(B, C); |
| 610 schedule.AddSuccessor(B, D); | 639 schedule.AddSuccessor(B, D); |
| 611 schedule.AddSuccessor(B, E); | 640 schedule.AddSuccessor(B, E); |
| 612 schedule.AddSuccessor(C, B); | 641 schedule.AddSuccessor(C, B); |
| 613 schedule.AddSuccessor(D, B); | 642 schedule.AddSuccessor(D, B); |
| 614 schedule.AddSuccessor(E, B); | 643 schedule.AddSuccessor(E, B); |
| 615 | 644 |
| 616 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&schedule); | 645 ZonePool zone_pool(scope.main_isolate()); |
| 646 BasicBlockVector* order = Scheduler::ComputeSpecialRPO(&zone_pool, &schedule); |
| 617 CheckRPONumbers(order, 5, true); | 647 CheckRPONumbers(order, 5, true); |
| 618 | 648 |
| 619 BasicBlock* loop1[] = {B, C, D, E}; | 649 BasicBlock* loop1[] = {B, C, D, E}; |
| 620 CheckLoopContains(loop1, 4); | 650 CheckLoopContains(loop1, 4); |
| 621 } | 651 } |
| 622 | 652 |
| 623 | 653 |
| 624 TEST(BuildScheduleEmpty) { | 654 TEST(BuildScheduleEmpty) { |
| 625 HandleAndZoneScope scope; | 655 HandleAndZoneScope scope; |
| 626 Graph graph(scope.main_zone()); | 656 Graph graph(scope.main_zone()); |
| 627 CommonOperatorBuilder builder(scope.main_zone()); | 657 CommonOperatorBuilder builder(scope.main_zone()); |
| 628 graph.SetStart(graph.NewNode(builder.Start(0))); | 658 graph.SetStart(graph.NewNode(builder.Start(0))); |
| 629 graph.SetEnd(graph.NewNode(builder.End(), graph.start())); | 659 graph.SetEnd(graph.NewNode(builder.End(), graph.start())); |
| 630 | 660 |
| 631 USE(Scheduler::ComputeSchedule(&graph)); | 661 ZonePool zone_pool(scope.main_isolate()); |
| 662 USE(Scheduler::ComputeSchedule(&zone_pool, &graph)); |
| 632 } | 663 } |
| 633 | 664 |
| 634 | 665 |
| 635 TEST(BuildScheduleOneParameter) { | 666 TEST(BuildScheduleOneParameter) { |
| 636 HandleAndZoneScope scope; | 667 HandleAndZoneScope scope; |
| 637 Graph graph(scope.main_zone()); | 668 Graph graph(scope.main_zone()); |
| 638 CommonOperatorBuilder builder(scope.main_zone()); | 669 CommonOperatorBuilder builder(scope.main_zone()); |
| 639 graph.SetStart(graph.NewNode(builder.Start(0))); | 670 graph.SetStart(graph.NewNode(builder.Start(0))); |
| 640 | 671 |
| 641 Node* p1 = graph.NewNode(builder.Parameter(0), graph.start()); | 672 Node* p1 = graph.NewNode(builder.Parameter(0), graph.start()); |
| 642 Node* ret = graph.NewNode(builder.Return(), p1, graph.start(), graph.start()); | 673 Node* ret = graph.NewNode(builder.Return(), p1, graph.start(), graph.start()); |
| 643 | 674 |
| 644 graph.SetEnd(graph.NewNode(builder.End(), ret)); | 675 graph.SetEnd(graph.NewNode(builder.End(), ret)); |
| 645 | 676 |
| 646 USE(Scheduler::ComputeSchedule(&graph)); | 677 ZonePool zone_pool(scope.main_isolate()); |
| 678 USE(Scheduler::ComputeSchedule(&zone_pool, &graph)); |
| 647 } | 679 } |
| 648 | 680 |
| 649 | 681 |
| 650 TEST(BuildScheduleIfSplit) { | 682 TEST(BuildScheduleIfSplit) { |
| 651 HandleAndZoneScope scope; | 683 HandleAndZoneScope scope; |
| 652 Graph graph(scope.main_zone()); | 684 Graph graph(scope.main_zone()); |
| 653 CommonOperatorBuilder builder(scope.main_zone()); | 685 CommonOperatorBuilder builder(scope.main_zone()); |
| 654 JSOperatorBuilder js_builder(scope.main_zone()); | 686 JSOperatorBuilder js_builder(scope.main_zone()); |
| 655 graph.SetStart(graph.NewNode(builder.Start(3))); | 687 graph.SetStart(graph.NewNode(builder.Start(3))); |
| 656 | 688 |
| (...skipping 1137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1794 | 1826 |
| 1795 Node* ret = graph.NewNode(common.Return(), phi3, start, start); | 1827 Node* ret = graph.NewNode(common.Return(), phi3, start, start); |
| 1796 Node* end = graph.NewNode(common.End(), ret, start); | 1828 Node* end = graph.NewNode(common.End(), ret, start); |
| 1797 | 1829 |
| 1798 graph.SetEnd(end); | 1830 graph.SetEnd(end); |
| 1799 | 1831 |
| 1800 ComputeAndVerifySchedule(24, &graph); | 1832 ComputeAndVerifySchedule(24, &graph); |
| 1801 } | 1833 } |
| 1802 | 1834 |
| 1803 #endif | 1835 #endif |
| OLD | NEW |