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

Side by Side Diff: test/unittests/compiler/scheduler-unittest.cc

Issue 2473643002: Revert of [turbofan] Support variable size argument popping in TF-generated functions (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/schedule.h" 5 #include "src/compiler/schedule.h"
6 #include "src/compiler/access-builder.h" 6 #include "src/compiler/access-builder.h"
7 #include "src/compiler/common-operator.h" 7 #include "src/compiler/common-operator.h"
8 #include "src/compiler/graph-visualizer.h" 8 #include "src/compiler/graph-visualizer.h"
9 #include "src/compiler/graph.h" 9 #include "src/compiler/graph.h"
10 #include "src/compiler/js-operator.h" 10 #include "src/compiler/js-operator.h"
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 graph()->SetStart(graph()->NewNode(common()->Start(0))); 89 graph()->SetStart(graph()->NewNode(common()->Start(0)));
90 graph()->SetEnd(graph()->NewNode(common()->End(1), graph()->start())); 90 graph()->SetEnd(graph()->NewNode(common()->End(1), graph()->start()));
91 USE(Scheduler::ComputeSchedule(zone(), graph(), Scheduler::kNoFlags)); 91 USE(Scheduler::ComputeSchedule(zone(), graph(), Scheduler::kNoFlags));
92 } 92 }
93 93
94 94
95 TEST_F(SchedulerTest, BuildScheduleOneParameter) { 95 TEST_F(SchedulerTest, BuildScheduleOneParameter) {
96 graph()->SetStart(graph()->NewNode(common()->Start(0))); 96 graph()->SetStart(graph()->NewNode(common()->Start(0)));
97 97
98 Node* p1 = graph()->NewNode(common()->Parameter(0), graph()->start()); 98 Node* p1 = graph()->NewNode(common()->Parameter(0), graph()->start());
99 Node* zero = graph()->NewNode(common()->Int32Constant(0)); 99 Node* ret = graph()->NewNode(common()->Return(), p1, graph()->start(),
100 Node* ret = graph()->NewNode(common()->Return(), zero, p1, graph()->start(),
101 graph()->start()); 100 graph()->start());
102 101
103 graph()->SetEnd(graph()->NewNode(common()->End(1), ret)); 102 graph()->SetEnd(graph()->NewNode(common()->End(1), ret));
104 103
105 USE(Scheduler::ComputeSchedule(zone(), graph(), Scheduler::kNoFlags)); 104 USE(Scheduler::ComputeSchedule(zone(), graph(), Scheduler::kNoFlags));
106 } 105 }
107 106
108 107
109 namespace { 108 namespace {
110 109
(...skipping 11 matching lines...) Expand all
122 121
123 } // namespace 122 } // namespace
124 123
125 124
126 TARGET_TEST_F(SchedulerTest, FloatingDiamond1) { 125 TARGET_TEST_F(SchedulerTest, FloatingDiamond1) {
127 Node* start = graph()->NewNode(common()->Start(1)); 126 Node* start = graph()->NewNode(common()->Start(1));
128 graph()->SetStart(start); 127 graph()->SetStart(start);
129 128
130 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 129 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
131 Node* d1 = CreateDiamond(graph(), common(), p0); 130 Node* d1 = CreateDiamond(graph(), common(), p0);
132 Node* zero = graph()->NewNode(common()->Int32Constant(0)); 131 Node* ret = graph()->NewNode(common()->Return(), d1, start, start);
133 Node* ret = graph()->NewNode(common()->Return(), zero, d1, start, start);
134 Node* end = graph()->NewNode(common()->End(1), ret); 132 Node* end = graph()->NewNode(common()->End(1), ret);
135 133
136 graph()->SetEnd(end); 134 graph()->SetEnd(end);
137 135
138 ComputeAndVerifySchedule(14); 136 ComputeAndVerifySchedule(13);
139 } 137 }
140 138
141 TARGET_TEST_F(SchedulerTest, FloatingDeadDiamond1) { 139 TARGET_TEST_F(SchedulerTest, FloatingDeadDiamond1) {
142 Node* start = graph()->NewNode(common()->Start(1)); 140 Node* start = graph()->NewNode(common()->Start(1));
143 graph()->SetStart(start); 141 graph()->SetStart(start);
144 142
145 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 143 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
146 Node* d1 = CreateDiamond(graph(), common(), p0); 144 Node* d1 = CreateDiamond(graph(), common(), p0);
147 USE(d1); 145 USE(d1);
148 Node* zero = graph()->NewNode(common()->Int32Constant(0)); 146 Node* ret = graph()->NewNode(common()->Return(), p0, start, start);
149 Node* ret = graph()->NewNode(common()->Return(), zero, p0, start, start);
150 Node* end = graph()->NewNode(common()->End(1), ret); 147 Node* end = graph()->NewNode(common()->End(1), ret);
151 148
152 graph()->SetEnd(end); 149 graph()->SetEnd(end);
153 150
154 ComputeAndVerifySchedule(5); 151 ComputeAndVerifySchedule(4);
155 } 152 }
156 153
157 TARGET_TEST_F(SchedulerTest, FloatingDeadDiamond2) { 154 TARGET_TEST_F(SchedulerTest, FloatingDeadDiamond2) {
158 Graph* g = graph(); 155 Graph* g = graph();
159 Node* start = g->NewNode(common()->Start(1)); 156 Node* start = g->NewNode(common()->Start(1));
160 g->SetStart(start); 157 g->SetStart(start);
161 158
162 Node* n1 = g->NewNode(common()->Parameter(1), start); 159 Node* n1 = g->NewNode(common()->Parameter(1), start);
163 160
164 Node* n2 = g->NewNode(common()->Branch(), n1, start); 161 Node* n2 = g->NewNode(common()->Branch(), n1, start);
165 Node* n3 = g->NewNode(common()->IfTrue(), n2); 162 Node* n3 = g->NewNode(common()->IfTrue(), n2);
166 Node* n4 = g->NewNode(common()->IfFalse(), n2); 163 Node* n4 = g->NewNode(common()->IfFalse(), n2);
167 Node* n5 = g->NewNode(common()->Int32Constant(-100)); 164 Node* n5 = g->NewNode(common()->Int32Constant(-100));
168 Node* zero = graph()->NewNode(common()->Int32Constant(0)); 165 Node* n6 = g->NewNode(common()->Return(), n5, start, n4);
169 Node* n6 = g->NewNode(common()->Return(), zero, n5, start, n4);
170 Node* n7 = g->NewNode(common()->Int32Constant(0)); 166 Node* n7 = g->NewNode(common()->Int32Constant(0));
171 Node* n8 = g->NewNode(common()->Return(), zero, n7, start, n3); 167 Node* n8 = g->NewNode(common()->Return(), n7, start, n3);
172 Node* n9 = g->NewNode(common()->End(2), n6, n8); 168 Node* n9 = g->NewNode(common()->End(2), n6, n8);
173 169
174 // Dead nodes 170 // Dead nodes
175 Node* n10 = g->NewNode(common()->Branch(), n1, n3); 171 Node* n10 = g->NewNode(common()->Branch(), n1, n3);
176 Node* n11 = g->NewNode(common()->IfTrue(), n10); 172 Node* n11 = g->NewNode(common()->IfTrue(), n10);
177 Node* n12 = g->NewNode(common()->IfFalse(), n10); 173 Node* n12 = g->NewNode(common()->IfFalse(), n10);
178 Node* n13 = g->NewNode(common()->Merge(2), n11, n12); 174 Node* n13 = g->NewNode(common()->Merge(2), n11, n12);
179 Node* n14 = 175 Node* n14 =
180 g->NewNode(common()->Phi(MachineRepresentation::kWord32, 2), n1, n7, n13); 176 g->NewNode(common()->Phi(MachineRepresentation::kWord32, 2), n1, n7, n13);
181 177
182 USE(n14); 178 USE(n14);
183 179
184 g->SetEnd(n9); 180 g->SetEnd(n9);
185 181
186 ComputeAndVerifySchedule(11); 182 ComputeAndVerifySchedule(10);
187 } 183 }
188 184
189 TARGET_TEST_F(SchedulerTest, FloatingDiamond2) { 185 TARGET_TEST_F(SchedulerTest, FloatingDiamond2) {
190 Node* start = graph()->NewNode(common()->Start(2)); 186 Node* start = graph()->NewNode(common()->Start(2));
191 graph()->SetStart(start); 187 graph()->SetStart(start);
192 188
193 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 189 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
194 Node* p1 = graph()->NewNode(common()->Parameter(1), start); 190 Node* p1 = graph()->NewNode(common()->Parameter(1), start);
195 Node* d1 = CreateDiamond(graph(), common(), p0); 191 Node* d1 = CreateDiamond(graph(), common(), p0);
196 Node* d2 = CreateDiamond(graph(), common(), p1); 192 Node* d2 = CreateDiamond(graph(), common(), p1);
197 Node* add = graph()->NewNode(&kIntAdd, d1, d2); 193 Node* add = graph()->NewNode(&kIntAdd, d1, d2);
198 Node* zero = graph()->NewNode(common()->Int32Constant(0)); 194 Node* ret = graph()->NewNode(common()->Return(), add, start, start);
199 Node* ret = graph()->NewNode(common()->Return(), zero, add, start, start);
200 Node* end = graph()->NewNode(common()->End(1), ret); 195 Node* end = graph()->NewNode(common()->End(1), ret);
201 196
202 graph()->SetEnd(end); 197 graph()->SetEnd(end);
203 198
204 ComputeAndVerifySchedule(25); 199 ComputeAndVerifySchedule(24);
205 } 200 }
206 201
207 202
208 TARGET_TEST_F(SchedulerTest, FloatingDiamond3) { 203 TARGET_TEST_F(SchedulerTest, FloatingDiamond3) {
209 Node* start = graph()->NewNode(common()->Start(2)); 204 Node* start = graph()->NewNode(common()->Start(2));
210 graph()->SetStart(start); 205 graph()->SetStart(start);
211 206
212 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 207 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
213 Node* p1 = graph()->NewNode(common()->Parameter(1), start); 208 Node* p1 = graph()->NewNode(common()->Parameter(1), start);
214 Node* d1 = CreateDiamond(graph(), common(), p0); 209 Node* d1 = CreateDiamond(graph(), common(), p0);
215 Node* d2 = CreateDiamond(graph(), common(), p1); 210 Node* d2 = CreateDiamond(graph(), common(), p1);
216 Node* add = graph()->NewNode(&kIntAdd, d1, d2); 211 Node* add = graph()->NewNode(&kIntAdd, d1, d2);
217 Node* d3 = CreateDiamond(graph(), common(), add); 212 Node* d3 = CreateDiamond(graph(), common(), add);
218 Node* zero = graph()->NewNode(common()->Int32Constant(0)); 213 Node* ret = graph()->NewNode(common()->Return(), d3, start, start);
219 Node* ret = graph()->NewNode(common()->Return(), zero, d3, start, start);
220 Node* end = graph()->NewNode(common()->End(1), ret); 214 Node* end = graph()->NewNode(common()->End(1), ret);
221 215
222 graph()->SetEnd(end); 216 graph()->SetEnd(end);
223 217
224 ComputeAndVerifySchedule(34); 218 ComputeAndVerifySchedule(33);
225 } 219 }
226 220
227 221
228 TARGET_TEST_F(SchedulerTest, NestedFloatingDiamonds) { 222 TARGET_TEST_F(SchedulerTest, NestedFloatingDiamonds) {
229 Node* start = graph()->NewNode(common()->Start(2)); 223 Node* start = graph()->NewNode(common()->Start(2));
230 graph()->SetStart(start); 224 graph()->SetStart(start);
231 225
232 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 226 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
233 227
234 Node* fv = graph()->NewNode(common()->Int32Constant(7)); 228 Node* fv = graph()->NewNode(common()->Int32Constant(7));
(...skipping 12 matching lines...) Expand all
247 Node* ffalse = graph()->NewNode(common()->Int32Constant(0)); 241 Node* ffalse = graph()->NewNode(common()->Int32Constant(0));
248 Node* phi1 = graph()->NewNode( 242 Node* phi1 = graph()->NewNode(
249 common()->Phi(MachineRepresentation::kTagged, 2), ttrue, ffalse, m1); 243 common()->Phi(MachineRepresentation::kTagged, 2), ttrue, ffalse, m1);
250 244
251 245
252 Node* m = graph()->NewNode(common()->Merge(2), t, f); 246 Node* m = graph()->NewNode(common()->Merge(2), t, f);
253 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2), 247 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2),
254 fv, phi1, m); 248 fv, phi1, m);
255 Node* ephi1 = graph()->NewNode(common()->EffectPhi(2), start, map, m); 249 Node* ephi1 = graph()->NewNode(common()->EffectPhi(2), start, map, m);
256 250
257 Node* zero = graph()->NewNode(common()->Int32Constant(0)); 251 Node* ret = graph()->NewNode(common()->Return(), phi, ephi1, start);
258 Node* ret = graph()->NewNode(common()->Return(), zero, phi, ephi1, start);
259 Node* end = graph()->NewNode(common()->End(1), ret); 252 Node* end = graph()->NewNode(common()->End(1), ret);
260 253
261 graph()->SetEnd(end); 254 graph()->SetEnd(end);
262 255
263 ComputeAndVerifySchedule(24); 256 ComputeAndVerifySchedule(23);
264 } 257 }
265 258
266 259
267 TARGET_TEST_F(SchedulerTest, NestedFloatingDiamondWithChain) { 260 TARGET_TEST_F(SchedulerTest, NestedFloatingDiamondWithChain) {
268 Node* start = graph()->NewNode(common()->Start(2)); 261 Node* start = graph()->NewNode(common()->Start(2));
269 graph()->SetStart(start); 262 graph()->SetStart(start);
270 263
271 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 264 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
272 Node* p1 = graph()->NewNode(common()->Parameter(1), start); 265 Node* p1 = graph()->NewNode(common()->Parameter(1), start);
273 Node* c = graph()->NewNode(common()->Int32Constant(7)); 266 Node* c = graph()->NewNode(common()->Int32Constant(7));
(...skipping 20 matching lines...) Expand all
294 common()->Phi(MachineRepresentation::kTagged, 2), phiB1, c, mA2); 287 common()->Phi(MachineRepresentation::kTagged, 2), phiB1, c, mA2);
295 288
296 Node* brB2 = graph()->NewNode(common()->Branch(), phiA1, mB1); 289 Node* brB2 = graph()->NewNode(common()->Branch(), phiA1, mB1);
297 Node* tB2 = graph()->NewNode(common()->IfTrue(), brB2); 290 Node* tB2 = graph()->NewNode(common()->IfTrue(), brB2);
298 Node* fB2 = graph()->NewNode(common()->IfFalse(), brB2); 291 Node* fB2 = graph()->NewNode(common()->IfFalse(), brB2);
299 Node* mB2 = graph()->NewNode(common()->Merge(2), tB2, fB2); 292 Node* mB2 = graph()->NewNode(common()->Merge(2), tB2, fB2);
300 Node* phiB2 = graph()->NewNode( 293 Node* phiB2 = graph()->NewNode(
301 common()->Phi(MachineRepresentation::kTagged, 2), phiA1, c, mB2); 294 common()->Phi(MachineRepresentation::kTagged, 2), phiA1, c, mB2);
302 295
303 Node* add = graph()->NewNode(&kIntAdd, phiA2, phiB2); 296 Node* add = graph()->NewNode(&kIntAdd, phiA2, phiB2);
304 Node* zero = graph()->NewNode(common()->Int32Constant(0)); 297 Node* ret = graph()->NewNode(common()->Return(), add, start, start);
305 Node* ret = graph()->NewNode(common()->Return(), zero, add, start, start);
306 Node* end = graph()->NewNode(common()->End(1), ret); 298 Node* end = graph()->NewNode(common()->End(1), ret);
307 299
308 graph()->SetEnd(end); 300 graph()->SetEnd(end);
309 301
310 ComputeAndVerifySchedule(37); 302 ComputeAndVerifySchedule(36);
311 } 303 }
312 304
313 305
314 TARGET_TEST_F(SchedulerTest, NestedFloatingDiamondWithLoop) { 306 TARGET_TEST_F(SchedulerTest, NestedFloatingDiamondWithLoop) {
315 Node* start = graph()->NewNode(common()->Start(2)); 307 Node* start = graph()->NewNode(common()->Start(2));
316 graph()->SetStart(start); 308 graph()->SetStart(start);
317 309
318 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 310 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
319 311
320 Node* fv = graph()->NewNode(common()->Int32Constant(7)); 312 Node* fv = graph()->NewNode(common()->Int32Constant(7));
(...skipping 10 matching lines...) Expand all
331 Node* t1 = graph()->NewNode(common()->IfTrue(), br1); 323 Node* t1 = graph()->NewNode(common()->IfTrue(), br1);
332 Node* f1 = graph()->NewNode(common()->IfFalse(), br1); 324 Node* f1 = graph()->NewNode(common()->IfFalse(), br1);
333 325
334 loop->ReplaceInput(1, t1); // close loop. 326 loop->ReplaceInput(1, t1); // close loop.
335 ind->ReplaceInput(1, ind); // close induction variable. 327 ind->ReplaceInput(1, ind); // close induction variable.
336 328
337 Node* m = graph()->NewNode(common()->Merge(2), t, f1); 329 Node* m = graph()->NewNode(common()->Merge(2), t, f1);
338 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2), 330 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2),
339 fv, ind, m); 331 fv, ind, m);
340 332
341 Node* zero = graph()->NewNode(common()->Int32Constant(0)); 333 Node* ret = graph()->NewNode(common()->Return(), phi, start, start);
342 Node* ret = graph()->NewNode(common()->Return(), zero, phi, start, start);
343 Node* end = graph()->NewNode(common()->End(1), ret); 334 Node* end = graph()->NewNode(common()->End(1), ret);
344 335
345 graph()->SetEnd(end); 336 graph()->SetEnd(end);
346 337
347 ComputeAndVerifySchedule(21); 338 ComputeAndVerifySchedule(20);
348 } 339 }
349 340
350 341
351 TARGET_TEST_F(SchedulerTest, LoopedFloatingDiamond1) { 342 TARGET_TEST_F(SchedulerTest, LoopedFloatingDiamond1) {
352 Node* start = graph()->NewNode(common()->Start(2)); 343 Node* start = graph()->NewNode(common()->Start(2));
353 graph()->SetStart(start); 344 graph()->SetStart(start);
354 345
355 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 346 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
356 347
357 Node* c = graph()->NewNode(common()->Int32Constant(7)); 348 Node* c = graph()->NewNode(common()->Int32Constant(7));
358 Node* loop = graph()->NewNode(common()->Loop(2), start, start); 349 Node* loop = graph()->NewNode(common()->Loop(2), start, start);
359 Node* ind = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2), 350 Node* ind = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2),
360 p0, p0, loop); 351 p0, p0, loop);
361 Node* add = graph()->NewNode(&kIntAdd, ind, c); 352 Node* add = graph()->NewNode(&kIntAdd, ind, c);
362 353
363 Node* br = graph()->NewNode(common()->Branch(), add, loop); 354 Node* br = graph()->NewNode(common()->Branch(), add, loop);
364 Node* t = graph()->NewNode(common()->IfTrue(), br); 355 Node* t = graph()->NewNode(common()->IfTrue(), br);
365 Node* f = graph()->NewNode(common()->IfFalse(), br); 356 Node* f = graph()->NewNode(common()->IfFalse(), br);
366 357
367 Node* br1 = graph()->NewNode(common()->Branch(), p0, graph()->start()); 358 Node* br1 = graph()->NewNode(common()->Branch(), p0, graph()->start());
368 Node* t1 = graph()->NewNode(common()->IfTrue(), br1); 359 Node* t1 = graph()->NewNode(common()->IfTrue(), br1);
369 Node* f1 = graph()->NewNode(common()->IfFalse(), br1); 360 Node* f1 = graph()->NewNode(common()->IfFalse(), br1);
370 Node* m1 = graph()->NewNode(common()->Merge(2), t1, f1); 361 Node* m1 = graph()->NewNode(common()->Merge(2), t1, f1);
371 Node* phi1 = graph()->NewNode( 362 Node* phi1 = graph()->NewNode(
372 common()->Phi(MachineRepresentation::kTagged, 2), add, p0, m1); 363 common()->Phi(MachineRepresentation::kTagged, 2), add, p0, m1);
373 364
374 loop->ReplaceInput(1, t); // close loop. 365 loop->ReplaceInput(1, t); // close loop.
375 ind->ReplaceInput(1, phi1); // close induction variable. 366 ind->ReplaceInput(1, phi1); // close induction variable.
376 367
377 Node* zero = graph()->NewNode(common()->Int32Constant(0)); 368 Node* ret = graph()->NewNode(common()->Return(), ind, start, f);
378 Node* ret = graph()->NewNode(common()->Return(), zero, ind, start, f);
379 Node* end = graph()->NewNode(common()->End(2), ret, f); 369 Node* end = graph()->NewNode(common()->End(2), ret, f);
380 370
381 graph()->SetEnd(end); 371 graph()->SetEnd(end);
382 372
383 ComputeAndVerifySchedule(21); 373 ComputeAndVerifySchedule(20);
384 } 374 }
385 375
386 376
387 TARGET_TEST_F(SchedulerTest, LoopedFloatingDiamond2) { 377 TARGET_TEST_F(SchedulerTest, LoopedFloatingDiamond2) {
388 Node* start = graph()->NewNode(common()->Start(2)); 378 Node* start = graph()->NewNode(common()->Start(2));
389 graph()->SetStart(start); 379 graph()->SetStart(start);
390 380
391 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 381 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
392 382
393 Node* c = graph()->NewNode(common()->Int32Constant(7)); 383 Node* c = graph()->NewNode(common()->Int32Constant(7));
(...skipping 10 matching lines...) Expand all
404 394
405 Node* add = graph()->NewNode(&kIntAdd, ind, phi1); 395 Node* add = graph()->NewNode(&kIntAdd, ind, phi1);
406 396
407 Node* br = graph()->NewNode(common()->Branch(), add, loop); 397 Node* br = graph()->NewNode(common()->Branch(), add, loop);
408 Node* t = graph()->NewNode(common()->IfTrue(), br); 398 Node* t = graph()->NewNode(common()->IfTrue(), br);
409 Node* f = graph()->NewNode(common()->IfFalse(), br); 399 Node* f = graph()->NewNode(common()->IfFalse(), br);
410 400
411 loop->ReplaceInput(1, t); // close loop. 401 loop->ReplaceInput(1, t); // close loop.
412 ind->ReplaceInput(1, add); // close induction variable. 402 ind->ReplaceInput(1, add); // close induction variable.
413 403
414 Node* zero = graph()->NewNode(common()->Int32Constant(0)); 404 Node* ret = graph()->NewNode(common()->Return(), ind, start, f);
415 Node* ret = graph()->NewNode(common()->Return(), zero, ind, start, f);
416 Node* end = graph()->NewNode(common()->End(2), ret, f); 405 Node* end = graph()->NewNode(common()->End(2), ret, f);
417 406
418 graph()->SetEnd(end); 407 graph()->SetEnd(end);
419 408
420 ComputeAndVerifySchedule(21); 409 ComputeAndVerifySchedule(20);
421 } 410 }
422 411
423 412
424 TARGET_TEST_F(SchedulerTest, LoopedFloatingDiamond3) { 413 TARGET_TEST_F(SchedulerTest, LoopedFloatingDiamond3) {
425 Node* start = graph()->NewNode(common()->Start(2)); 414 Node* start = graph()->NewNode(common()->Start(2));
426 graph()->SetStart(start); 415 graph()->SetStart(start);
427 416
428 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 417 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
429 418
430 Node* c = graph()->NewNode(common()->Int32Constant(7)); 419 Node* c = graph()->NewNode(common()->Int32Constant(7));
(...skipping 23 matching lines...) Expand all
454 443
455 Node* add = graph()->NewNode(&kIntAdd, ind, phi1); 444 Node* add = graph()->NewNode(&kIntAdd, ind, phi1);
456 445
457 Node* br = graph()->NewNode(common()->Branch(), add, loop); 446 Node* br = graph()->NewNode(common()->Branch(), add, loop);
458 Node* t = graph()->NewNode(common()->IfTrue(), br); 447 Node* t = graph()->NewNode(common()->IfTrue(), br);
459 Node* f = graph()->NewNode(common()->IfFalse(), br); 448 Node* f = graph()->NewNode(common()->IfFalse(), br);
460 449
461 loop->ReplaceInput(1, t); // close loop. 450 loop->ReplaceInput(1, t); // close loop.
462 ind->ReplaceInput(1, add); // close induction variable. 451 ind->ReplaceInput(1, add); // close induction variable.
463 452
464 Node* zero = graph()->NewNode(common()->Int32Constant(0)); 453 Node* ret = graph()->NewNode(common()->Return(), ind, start, f);
465 Node* ret = graph()->NewNode(common()->Return(), zero, ind, start, f);
466 Node* end = graph()->NewNode(common()->End(2), ret, f); 454 Node* end = graph()->NewNode(common()->End(2), ret, f);
467 455
468 graph()->SetEnd(end); 456 graph()->SetEnd(end);
469 457
470 ComputeAndVerifySchedule(29); 458 ComputeAndVerifySchedule(28);
471 } 459 }
472 460
473 461
474 TARGET_TEST_F(SchedulerTest, PhisPushedDownToDifferentBranches) { 462 TARGET_TEST_F(SchedulerTest, PhisPushedDownToDifferentBranches) {
475 Node* start = graph()->NewNode(common()->Start(2)); 463 Node* start = graph()->NewNode(common()->Start(2));
476 graph()->SetStart(start); 464 graph()->SetStart(start);
477 465
478 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 466 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
479 Node* p1 = graph()->NewNode(common()->Parameter(1), start); 467 Node* p1 = graph()->NewNode(common()->Parameter(1), start);
480 468
(...skipping 10 matching lines...) Expand all
491 Node* phi2 = graph()->NewNode( 479 Node* phi2 = graph()->NewNode(
492 common()->Phi(MachineRepresentation::kTagged, 2), v3, v4, m); 480 common()->Phi(MachineRepresentation::kTagged, 2), v3, v4, m);
493 481
494 Node* br2 = graph()->NewNode(common()->Branch(), p1, graph()->start()); 482 Node* br2 = graph()->NewNode(common()->Branch(), p1, graph()->start());
495 Node* t2 = graph()->NewNode(common()->IfTrue(), br2); 483 Node* t2 = graph()->NewNode(common()->IfTrue(), br2);
496 Node* f2 = graph()->NewNode(common()->IfFalse(), br2); 484 Node* f2 = graph()->NewNode(common()->IfFalse(), br2);
497 Node* m2 = graph()->NewNode(common()->Merge(2), t2, f2); 485 Node* m2 = graph()->NewNode(common()->Merge(2), t2, f2);
498 Node* phi3 = graph()->NewNode( 486 Node* phi3 = graph()->NewNode(
499 common()->Phi(MachineRepresentation::kTagged, 2), phi, phi2, m2); 487 common()->Phi(MachineRepresentation::kTagged, 2), phi, phi2, m2);
500 488
501 Node* zero = graph()->NewNode(common()->Int32Constant(0)); 489 Node* ret = graph()->NewNode(common()->Return(), phi3, start, start);
502 Node* ret = graph()->NewNode(common()->Return(), zero, phi3, start, start);
503 Node* end = graph()->NewNode(common()->End(1), ret); 490 Node* end = graph()->NewNode(common()->End(1), ret);
504 491
505 graph()->SetEnd(end); 492 graph()->SetEnd(end);
506 493
507 ComputeAndVerifySchedule(25); 494 ComputeAndVerifySchedule(24);
508 } 495 }
509 496
510 497
511 TARGET_TEST_F(SchedulerTest, BranchHintTrue) { 498 TARGET_TEST_F(SchedulerTest, BranchHintTrue) {
512 Node* start = graph()->NewNode(common()->Start(1)); 499 Node* start = graph()->NewNode(common()->Start(1));
513 graph()->SetStart(start); 500 graph()->SetStart(start);
514 501
515 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 502 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
516 Node* tv = graph()->NewNode(common()->Int32Constant(6)); 503 Node* tv = graph()->NewNode(common()->Int32Constant(6));
517 Node* fv = graph()->NewNode(common()->Int32Constant(7)); 504 Node* fv = graph()->NewNode(common()->Int32Constant(7));
518 Node* br = graph()->NewNode(common()->Branch(BranchHint::kTrue), p0, start); 505 Node* br = graph()->NewNode(common()->Branch(BranchHint::kTrue), p0, start);
519 Node* t = graph()->NewNode(common()->IfTrue(), br); 506 Node* t = graph()->NewNode(common()->IfTrue(), br);
520 Node* f = graph()->NewNode(common()->IfFalse(), br); 507 Node* f = graph()->NewNode(common()->IfFalse(), br);
521 Node* m = graph()->NewNode(common()->Merge(2), t, f); 508 Node* m = graph()->NewNode(common()->Merge(2), t, f);
522 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2), 509 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2),
523 tv, fv, m); 510 tv, fv, m);
524 Node* zero = graph()->NewNode(common()->Int32Constant(0)); 511 Node* ret = graph()->NewNode(common()->Return(), phi, start, start);
525 Node* ret = graph()->NewNode(common()->Return(), zero, phi, start, start);
526 Node* end = graph()->NewNode(common()->End(1), ret); 512 Node* end = graph()->NewNode(common()->End(1), ret);
527 513
528 graph()->SetEnd(end); 514 graph()->SetEnd(end);
529 515
530 Schedule* schedule = ComputeAndVerifySchedule(14); 516 Schedule* schedule = ComputeAndVerifySchedule(13);
531 // Make sure the false block is marked as deferred. 517 // Make sure the false block is marked as deferred.
532 EXPECT_FALSE(schedule->block(t)->deferred()); 518 EXPECT_FALSE(schedule->block(t)->deferred());
533 EXPECT_TRUE(schedule->block(f)->deferred()); 519 EXPECT_TRUE(schedule->block(f)->deferred());
534 } 520 }
535 521
536 522
537 TARGET_TEST_F(SchedulerTest, BranchHintFalse) { 523 TARGET_TEST_F(SchedulerTest, BranchHintFalse) {
538 Node* start = graph()->NewNode(common()->Start(1)); 524 Node* start = graph()->NewNode(common()->Start(1));
539 graph()->SetStart(start); 525 graph()->SetStart(start);
540 526
541 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 527 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
542 Node* tv = graph()->NewNode(common()->Int32Constant(6)); 528 Node* tv = graph()->NewNode(common()->Int32Constant(6));
543 Node* fv = graph()->NewNode(common()->Int32Constant(7)); 529 Node* fv = graph()->NewNode(common()->Int32Constant(7));
544 Node* br = graph()->NewNode(common()->Branch(BranchHint::kFalse), p0, start); 530 Node* br = graph()->NewNode(common()->Branch(BranchHint::kFalse), p0, start);
545 Node* t = graph()->NewNode(common()->IfTrue(), br); 531 Node* t = graph()->NewNode(common()->IfTrue(), br);
546 Node* f = graph()->NewNode(common()->IfFalse(), br); 532 Node* f = graph()->NewNode(common()->IfFalse(), br);
547 Node* m = graph()->NewNode(common()->Merge(2), t, f); 533 Node* m = graph()->NewNode(common()->Merge(2), t, f);
548 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2), 534 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2),
549 tv, fv, m); 535 tv, fv, m);
550 Node* zero = graph()->NewNode(common()->Int32Constant(0)); 536 Node* ret = graph()->NewNode(common()->Return(), phi, start, start);
551 Node* ret = graph()->NewNode(common()->Return(), zero, phi, start, start);
552 Node* end = graph()->NewNode(common()->End(1), ret); 537 Node* end = graph()->NewNode(common()->End(1), ret);
553 538
554 graph()->SetEnd(end); 539 graph()->SetEnd(end);
555 540
556 Schedule* schedule = ComputeAndVerifySchedule(14); 541 Schedule* schedule = ComputeAndVerifySchedule(13);
557 // Make sure the true block is marked as deferred. 542 // Make sure the true block is marked as deferred.
558 EXPECT_TRUE(schedule->block(t)->deferred()); 543 EXPECT_TRUE(schedule->block(t)->deferred());
559 EXPECT_FALSE(schedule->block(f)->deferred()); 544 EXPECT_FALSE(schedule->block(f)->deferred());
560 } 545 }
561 546
562 547
563 TARGET_TEST_F(SchedulerTest, CallException) { 548 TARGET_TEST_F(SchedulerTest, CallException) {
564 Node* start = graph()->NewNode(common()->Start(1)); 549 Node* start = graph()->NewNode(common()->Start(1));
565 graph()->SetStart(start); 550 graph()->SetStart(start);
566 551
567 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 552 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
568 Node* c1 = graph()->NewNode(&kMockCall, start); 553 Node* c1 = graph()->NewNode(&kMockCall, start);
569 Node* ok1 = graph()->NewNode(common()->IfSuccess(), c1); 554 Node* ok1 = graph()->NewNode(common()->IfSuccess(), c1);
570 Node* ex1 = graph()->NewNode(common()->IfException(), c1, c1); 555 Node* ex1 = graph()->NewNode(common()->IfException(), c1, c1);
571 Node* c2 = graph()->NewNode(&kMockCall, ok1); 556 Node* c2 = graph()->NewNode(&kMockCall, ok1);
572 Node* ok2 = graph()->NewNode(common()->IfSuccess(), c2); 557 Node* ok2 = graph()->NewNode(common()->IfSuccess(), c2);
573 Node* ex2 = graph()->NewNode(common()->IfException(), c2, c2); 558 Node* ex2 = graph()->NewNode(common()->IfException(), c2, c2);
574 Node* hdl = graph()->NewNode(common()->Merge(2), ex1, ex2); 559 Node* hdl = graph()->NewNode(common()->Merge(2), ex1, ex2);
575 Node* m = graph()->NewNode(common()->Merge(2), ok2, hdl); 560 Node* m = graph()->NewNode(common()->Merge(2), ok2, hdl);
576 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2), 561 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kTagged, 2),
577 c2, p0, m); 562 c2, p0, m);
578 Node* zero = graph()->NewNode(common()->Int32Constant(0)); 563 Node* ret = graph()->NewNode(common()->Return(), phi, start, m);
579 Node* ret = graph()->NewNode(common()->Return(), zero, phi, start, m);
580 Node* end = graph()->NewNode(common()->End(1), ret); 564 Node* end = graph()->NewNode(common()->End(1), ret);
581 565
582 graph()->SetEnd(end); 566 graph()->SetEnd(end);
583 567
584 Schedule* schedule = ComputeAndVerifySchedule(18); 568 Schedule* schedule = ComputeAndVerifySchedule(17);
585 // Make sure the exception blocks as well as the handler are deferred. 569 // Make sure the exception blocks as well as the handler are deferred.
586 EXPECT_TRUE(schedule->block(ex1)->deferred()); 570 EXPECT_TRUE(schedule->block(ex1)->deferred());
587 EXPECT_TRUE(schedule->block(ex2)->deferred()); 571 EXPECT_TRUE(schedule->block(ex2)->deferred());
588 EXPECT_TRUE(schedule->block(hdl)->deferred()); 572 EXPECT_TRUE(schedule->block(hdl)->deferred());
589 EXPECT_FALSE(schedule->block(m)->deferred()); 573 EXPECT_FALSE(schedule->block(m)->deferred());
590 } 574 }
591 575
592 576
593 TARGET_TEST_F(SchedulerTest, TailCall) { 577 TARGET_TEST_F(SchedulerTest, TailCall) {
594 Node* start = graph()->NewNode(common()->Start(1)); 578 Node* start = graph()->NewNode(common()->Start(1));
(...skipping 17 matching lines...) Expand all
612 Node* sw = graph()->NewNode(common()->Switch(3), p0, start); 596 Node* sw = graph()->NewNode(common()->Switch(3), p0, start);
613 Node* c0 = graph()->NewNode(common()->IfValue(0), sw); 597 Node* c0 = graph()->NewNode(common()->IfValue(0), sw);
614 Node* v0 = graph()->NewNode(common()->Int32Constant(11)); 598 Node* v0 = graph()->NewNode(common()->Int32Constant(11));
615 Node* c1 = graph()->NewNode(common()->IfValue(1), sw); 599 Node* c1 = graph()->NewNode(common()->IfValue(1), sw);
616 Node* v1 = graph()->NewNode(common()->Int32Constant(22)); 600 Node* v1 = graph()->NewNode(common()->Int32Constant(22));
617 Node* d = graph()->NewNode(common()->IfDefault(), sw); 601 Node* d = graph()->NewNode(common()->IfDefault(), sw);
618 Node* vd = graph()->NewNode(common()->Int32Constant(33)); 602 Node* vd = graph()->NewNode(common()->Int32Constant(33));
619 Node* m = graph()->NewNode(common()->Merge(3), c0, c1, d); 603 Node* m = graph()->NewNode(common()->Merge(3), c0, c1, d);
620 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kWord32, 3), 604 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kWord32, 3),
621 v0, v1, vd, m); 605 v0, v1, vd, m);
622 Node* zero = graph()->NewNode(common()->Int32Constant(0)); 606 Node* ret = graph()->NewNode(common()->Return(), phi, start, m);
623 Node* ret = graph()->NewNode(common()->Return(), zero, phi, start, m);
624 Node* end = graph()->NewNode(common()->End(1), ret); 607 Node* end = graph()->NewNode(common()->End(1), ret);
625 608
626 graph()->SetEnd(end); 609 graph()->SetEnd(end);
627 610
628 ComputeAndVerifySchedule(17); 611 ComputeAndVerifySchedule(16);
629 } 612 }
630 613
631 614
632 TARGET_TEST_F(SchedulerTest, FloatingSwitch) { 615 TARGET_TEST_F(SchedulerTest, FloatingSwitch) {
633 Node* start = graph()->NewNode(common()->Start(1)); 616 Node* start = graph()->NewNode(common()->Start(1));
634 graph()->SetStart(start); 617 graph()->SetStart(start);
635 618
636 Node* p0 = graph()->NewNode(common()->Parameter(0), start); 619 Node* p0 = graph()->NewNode(common()->Parameter(0), start);
637 Node* sw = graph()->NewNode(common()->Switch(3), p0, start); 620 Node* sw = graph()->NewNode(common()->Switch(3), p0, start);
638 Node* c0 = graph()->NewNode(common()->IfValue(0), sw); 621 Node* c0 = graph()->NewNode(common()->IfValue(0), sw);
639 Node* v0 = graph()->NewNode(common()->Int32Constant(11)); 622 Node* v0 = graph()->NewNode(common()->Int32Constant(11));
640 Node* c1 = graph()->NewNode(common()->IfValue(1), sw); 623 Node* c1 = graph()->NewNode(common()->IfValue(1), sw);
641 Node* v1 = graph()->NewNode(common()->Int32Constant(22)); 624 Node* v1 = graph()->NewNode(common()->Int32Constant(22));
642 Node* d = graph()->NewNode(common()->IfDefault(), sw); 625 Node* d = graph()->NewNode(common()->IfDefault(), sw);
643 Node* vd = graph()->NewNode(common()->Int32Constant(33)); 626 Node* vd = graph()->NewNode(common()->Int32Constant(33));
644 Node* m = graph()->NewNode(common()->Merge(3), c0, c1, d); 627 Node* m = graph()->NewNode(common()->Merge(3), c0, c1, d);
645 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kWord32, 3), 628 Node* phi = graph()->NewNode(common()->Phi(MachineRepresentation::kWord32, 3),
646 v0, v1, vd, m); 629 v0, v1, vd, m);
647 Node* zero = graph()->NewNode(common()->Int32Constant(0)); 630 Node* ret = graph()->NewNode(common()->Return(), phi, start, start);
648 Node* ret = graph()->NewNode(common()->Return(), zero, phi, start, start);
649 Node* end = graph()->NewNode(common()->End(1), ret); 631 Node* end = graph()->NewNode(common()->End(1), ret);
650 632
651 graph()->SetEnd(end); 633 graph()->SetEnd(end);
652 634
653 ComputeAndVerifySchedule(17); 635 ComputeAndVerifySchedule(16);
654 } 636 }
655 637
656 638
657 TARGET_TEST_F(SchedulerTest, Terminate) { 639 TARGET_TEST_F(SchedulerTest, Terminate) {
658 Node* start = graph()->NewNode(common()->Start(1)); 640 Node* start = graph()->NewNode(common()->Start(1));
659 graph()->SetStart(start); 641 graph()->SetStart(start);
660 642
661 Node* loop = graph()->NewNode(common()->Loop(2), start, start); 643 Node* loop = graph()->NewNode(common()->Loop(2), start, start);
662 loop->ReplaceInput(1, loop); // self loop, NTL. 644 loop->ReplaceInput(1, loop); // self loop, NTL.
663 645
664 Node* effect = graph()->NewNode(common()->EffectPhi(2), start, start, loop); 646 Node* effect = graph()->NewNode(common()->EffectPhi(2), start, start, loop);
665 effect->ReplaceInput(1, effect); // self loop. 647 effect->ReplaceInput(1, effect); // self loop.
666 648
667 Node* terminate = graph()->NewNode(common()->Terminate(), effect, loop); 649 Node* terminate = graph()->NewNode(common()->Terminate(), effect, loop);
668 Node* end = graph()->NewNode(common()->End(1), terminate); 650 Node* end = graph()->NewNode(common()->End(1), terminate);
669 graph()->SetEnd(end); 651 graph()->SetEnd(end);
670 652
671 Schedule* schedule = ComputeAndVerifySchedule(6); 653 Schedule* schedule = ComputeAndVerifySchedule(6);
672 BasicBlock* block = schedule->block(loop); 654 BasicBlock* block = schedule->block(loop);
673 EXPECT_EQ(block, schedule->block(effect)); 655 EXPECT_EQ(block, schedule->block(effect));
674 EXPECT_GE(block->rpo_number(), 0); 656 EXPECT_GE(block->rpo_number(), 0);
675 } 657 }
676 658
677 } // namespace compiler 659 } // namespace compiler
678 } // namespace internal 660 } // namespace internal
679 } // namespace v8 661 } // namespace v8
OLDNEW
« no previous file with comments | « test/unittests/compiler/node-test-utils.cc ('k') | test/unittests/compiler/tail-call-optimization-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698