OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 <functional> | 5 #include <functional> |
6 | 6 |
7 #include "src/compiler/graph.h" | 7 #include "src/compiler/graph.h" |
8 #include "src/compiler/node.h" | 8 #include "src/compiler/node.h" |
9 #include "src/compiler/operator.h" | 9 #include "src/compiler/operator.h" |
10 #include "test/cctest/cctest.h" | 10 #include "test/cctest/cctest.h" |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 #define CHECK_INPUTS(node, ...) \ | 134 #define CHECK_INPUTS(node, ...) \ |
135 do { \ | 135 do { \ |
136 Node* __array[] = {__VA_ARGS__}; \ | 136 Node* __array[] = {__VA_ARGS__}; \ |
137 int __size = \ | 137 int __size = \ |
138 __array[0] != NONE ? static_cast<int>(arraysize(__array)) : 0; \ | 138 __array[0] != NONE ? static_cast<int>(arraysize(__array)) : 0; \ |
139 CheckInputs(node, __array, __size); \ | 139 CheckInputs(node, __array, __size); \ |
140 } while (false) | 140 } while (false) |
141 | 141 |
142 | 142 |
143 TEST(NodeUseIteratorReplaceUses) { | 143 TEST(NodeUseIteratorReplaceUses) { |
144 Zone zone; | 144 base::AccountingAllocator allocator; |
| 145 Zone zone(&allocator); |
145 Graph graph(&zone); | 146 Graph graph(&zone); |
146 Node* n0 = graph.NewNode(&dummy_operator0); | 147 Node* n0 = graph.NewNode(&dummy_operator0); |
147 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 148 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
148 Node* n2 = graph.NewNode(&dummy_operator1, n0); | 149 Node* n2 = graph.NewNode(&dummy_operator1, n0); |
149 Node* n3 = graph.NewNode(&dummy_operator0); | 150 Node* n3 = graph.NewNode(&dummy_operator0); |
150 | 151 |
151 CHECK_USES(n0, n1, n2); | 152 CHECK_USES(n0, n1, n2); |
152 | 153 |
153 CHECK_INPUTS(n1, n0); | 154 CHECK_INPUTS(n1, n0); |
154 CHECK_INPUTS(n2, n0); | 155 CHECK_INPUTS(n2, n0); |
155 | 156 |
156 n0->ReplaceUses(n3); | 157 n0->ReplaceUses(n3); |
157 | 158 |
158 CHECK_USES(n0, NONE); | 159 CHECK_USES(n0, NONE); |
159 CHECK_USES(n1, NONE); | 160 CHECK_USES(n1, NONE); |
160 CHECK_USES(n2, NONE); | 161 CHECK_USES(n2, NONE); |
161 CHECK_USES(n3, n1, n2); | 162 CHECK_USES(n3, n1, n2); |
162 | 163 |
163 CHECK_INPUTS(n1, n3); | 164 CHECK_INPUTS(n1, n3); |
164 CHECK_INPUTS(n2, n3); | 165 CHECK_INPUTS(n2, n3); |
165 } | 166 } |
166 | 167 |
167 | 168 |
168 TEST(NodeUseIteratorReplaceUsesSelf) { | 169 TEST(NodeUseIteratorReplaceUsesSelf) { |
169 Zone zone; | 170 base::AccountingAllocator allocator; |
| 171 Zone zone(&allocator); |
170 Graph graph(&zone); | 172 Graph graph(&zone); |
171 Node* n0 = graph.NewNode(&dummy_operator0); | 173 Node* n0 = graph.NewNode(&dummy_operator0); |
172 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 174 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
173 | 175 |
174 CHECK_USES(n0, n1); | 176 CHECK_USES(n0, n1); |
175 CHECK_USES(n1, NONE); | 177 CHECK_USES(n1, NONE); |
176 | 178 |
177 n1->ReplaceInput(0, n1); // Create self-reference. | 179 n1->ReplaceInput(0, n1); // Create self-reference. |
178 | 180 |
179 CHECK_USES(n0, NONE); | 181 CHECK_USES(n0, NONE); |
180 CHECK_USES(n1, n1); | 182 CHECK_USES(n1, n1); |
181 | 183 |
182 Node* n2 = graph.NewNode(&dummy_operator0); | 184 Node* n2 = graph.NewNode(&dummy_operator0); |
183 | 185 |
184 n1->ReplaceUses(n2); | 186 n1->ReplaceUses(n2); |
185 | 187 |
186 CHECK_USES(n0, NONE); | 188 CHECK_USES(n0, NONE); |
187 CHECK_USES(n1, NONE); | 189 CHECK_USES(n1, NONE); |
188 CHECK_USES(n2, n1); | 190 CHECK_USES(n2, n1); |
189 } | 191 } |
190 | 192 |
191 | 193 |
192 TEST(ReplaceInput) { | 194 TEST(ReplaceInput) { |
193 Zone zone; | 195 base::AccountingAllocator allocator; |
| 196 Zone zone(&allocator); |
194 Graph graph(&zone); | 197 Graph graph(&zone); |
195 Node* n0 = graph.NewNode(&dummy_operator0); | 198 Node* n0 = graph.NewNode(&dummy_operator0); |
196 Node* n1 = graph.NewNode(&dummy_operator0); | 199 Node* n1 = graph.NewNode(&dummy_operator0); |
197 Node* n2 = graph.NewNode(&dummy_operator0); | 200 Node* n2 = graph.NewNode(&dummy_operator0); |
198 Node* n3 = graph.NewNode(&dummy_operator3, n0, n1, n2); | 201 Node* n3 = graph.NewNode(&dummy_operator3, n0, n1, n2); |
199 Node* n4 = graph.NewNode(&dummy_operator0); | 202 Node* n4 = graph.NewNode(&dummy_operator0); |
200 | 203 |
201 CHECK_USES(n0, n3); | 204 CHECK_USES(n0, n3); |
202 CHECK_USES(n1, n3); | 205 CHECK_USES(n1, n3); |
203 CHECK_USES(n2, n3); | 206 CHECK_USES(n2, n3); |
204 CHECK_USES(n3, NONE); | 207 CHECK_USES(n3, NONE); |
205 CHECK_USES(n4, NONE); | 208 CHECK_USES(n4, NONE); |
206 | 209 |
207 CHECK_INPUTS(n3, n0, n1, n2); | 210 CHECK_INPUTS(n3, n0, n1, n2); |
208 | 211 |
209 n3->ReplaceInput(1, n4); | 212 n3->ReplaceInput(1, n4); |
210 | 213 |
211 CHECK_USES(n1, NONE); | 214 CHECK_USES(n1, NONE); |
212 CHECK_USES(n4, n3); | 215 CHECK_USES(n4, n3); |
213 | 216 |
214 CHECK_INPUTS(n3, n0, n4, n2); | 217 CHECK_INPUTS(n3, n0, n4, n2); |
215 } | 218 } |
216 | 219 |
217 | 220 |
218 TEST(OwnedBy) { | 221 TEST(OwnedBy) { |
219 Zone zone; | 222 base::AccountingAllocator allocator; |
| 223 Zone zone(&allocator); |
220 Graph graph(&zone); | 224 Graph graph(&zone); |
221 | 225 |
222 { | 226 { |
223 Node* n0 = graph.NewNode(&dummy_operator0); | 227 Node* n0 = graph.NewNode(&dummy_operator0); |
224 Node* n1 = graph.NewNode(&dummy_operator0); | 228 Node* n1 = graph.NewNode(&dummy_operator0); |
225 | 229 |
226 CHECK(!n0->OwnedBy(n1)); | 230 CHECK(!n0->OwnedBy(n1)); |
227 CHECK(!n1->OwnedBy(n0)); | 231 CHECK(!n1->OwnedBy(n0)); |
228 | 232 |
229 Node* n2 = graph.NewNode(&dummy_operator1, n0); | 233 Node* n2 = graph.NewNode(&dummy_operator1, n0); |
(...skipping 29 matching lines...) Expand all Loading... |
259 CHECK(!n1->OwnedBy(n2)); | 263 CHECK(!n1->OwnedBy(n2)); |
260 CHECK(!n2->OwnedBy(n0)); | 264 CHECK(!n2->OwnedBy(n0)); |
261 CHECK(!n2->OwnedBy(n1)); | 265 CHECK(!n2->OwnedBy(n1)); |
262 CHECK(n3->OwnedBy(n2)); | 266 CHECK(n3->OwnedBy(n2)); |
263 CHECK(!n2->OwnedBy(n3)); | 267 CHECK(!n2->OwnedBy(n3)); |
264 } | 268 } |
265 } | 269 } |
266 | 270 |
267 | 271 |
268 TEST(Uses) { | 272 TEST(Uses) { |
269 Zone zone; | 273 base::AccountingAllocator allocator; |
| 274 Zone zone(&allocator); |
270 Graph graph(&zone); | 275 Graph graph(&zone); |
271 | 276 |
272 Node* n0 = graph.NewNode(&dummy_operator0); | 277 Node* n0 = graph.NewNode(&dummy_operator0); |
273 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 278 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
274 | 279 |
275 CHECK_USES(n0, n1); | 280 CHECK_USES(n0, n1); |
276 CHECK_USES(n1, NONE); | 281 CHECK_USES(n1, NONE); |
277 | 282 |
278 Node* n2 = graph.NewNode(&dummy_operator1, n0); | 283 Node* n2 = graph.NewNode(&dummy_operator1, n0); |
279 | 284 |
280 CHECK_USES(n0, n1, n2); | 285 CHECK_USES(n0, n1, n2); |
281 CHECK_USES(n2, NONE); | 286 CHECK_USES(n2, NONE); |
282 | 287 |
283 Node* n3 = graph.NewNode(&dummy_operator1, n0); | 288 Node* n3 = graph.NewNode(&dummy_operator1, n0); |
284 | 289 |
285 CHECK_USES(n0, n1, n2, n3); | 290 CHECK_USES(n0, n1, n2, n3); |
286 CHECK_USES(n3, NONE); | 291 CHECK_USES(n3, NONE); |
287 } | 292 } |
288 | 293 |
289 | 294 |
290 TEST(Inputs) { | 295 TEST(Inputs) { |
291 Zone zone; | 296 base::AccountingAllocator allocator; |
| 297 Zone zone(&allocator); |
292 Graph graph(&zone); | 298 Graph graph(&zone); |
293 | 299 |
294 Node* n0 = graph.NewNode(&dummy_operator0); | 300 Node* n0 = graph.NewNode(&dummy_operator0); |
295 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 301 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
296 Node* n2 = graph.NewNode(&dummy_operator1, n0); | 302 Node* n2 = graph.NewNode(&dummy_operator1, n0); |
297 Node* n3 = graph.NewNode(&dummy_operator3, n0, n1, n2); | 303 Node* n3 = graph.NewNode(&dummy_operator3, n0, n1, n2); |
298 | 304 |
299 CHECK_INPUTS(n3, n0, n1, n2); | 305 CHECK_INPUTS(n3, n0, n1, n2); |
300 | 306 |
301 Node* n4 = graph.NewNode(&dummy_operator3, n0, n1, n2); | 307 Node* n4 = graph.NewNode(&dummy_operator3, n0, n1, n2); |
302 n3->AppendInput(graph.zone(), n4); | 308 n3->AppendInput(graph.zone(), n4); |
303 | 309 |
304 CHECK_INPUTS(n3, n0, n1, n2, n4); | 310 CHECK_INPUTS(n3, n0, n1, n2, n4); |
305 CHECK_USES(n4, n3); | 311 CHECK_USES(n4, n3); |
306 | 312 |
307 n3->AppendInput(graph.zone(), n4); | 313 n3->AppendInput(graph.zone(), n4); |
308 | 314 |
309 CHECK_INPUTS(n3, n0, n1, n2, n4, n4); | 315 CHECK_INPUTS(n3, n0, n1, n2, n4, n4); |
310 CHECK_USES(n4, n3, n3); | 316 CHECK_USES(n4, n3, n3); |
311 | 317 |
312 Node* n5 = graph.NewNode(&dummy_operator1, n4); | 318 Node* n5 = graph.NewNode(&dummy_operator1, n4); |
313 | 319 |
314 CHECK_USES(n4, n3, n3, n5); | 320 CHECK_USES(n4, n3, n3, n5); |
315 } | 321 } |
316 | 322 |
317 | 323 |
318 TEST(RemoveInput) { | 324 TEST(RemoveInput) { |
319 Zone zone; | 325 base::AccountingAllocator allocator; |
| 326 Zone zone(&allocator); |
320 Graph graph(&zone); | 327 Graph graph(&zone); |
321 | 328 |
322 Node* n0 = graph.NewNode(&dummy_operator0); | 329 Node* n0 = graph.NewNode(&dummy_operator0); |
323 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 330 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
324 Node* n2 = graph.NewNode(&dummy_operator2, n0, n1); | 331 Node* n2 = graph.NewNode(&dummy_operator2, n0, n1); |
325 | 332 |
326 CHECK_INPUTS(n0, NONE); | 333 CHECK_INPUTS(n0, NONE); |
327 CHECK_INPUTS(n1, n0); | 334 CHECK_INPUTS(n1, n0); |
328 CHECK_INPUTS(n2, n0, n1); | 335 CHECK_INPUTS(n2, n0, n1); |
329 CHECK_USES(n0, n1, n2); | 336 CHECK_USES(n0, n1, n2); |
330 | 337 |
331 n1->RemoveInput(0); | 338 n1->RemoveInput(0); |
332 CHECK_INPUTS(n1, NONE); | 339 CHECK_INPUTS(n1, NONE); |
333 CHECK_USES(n0, n2); | 340 CHECK_USES(n0, n2); |
334 | 341 |
335 n2->RemoveInput(0); | 342 n2->RemoveInput(0); |
336 CHECK_INPUTS(n2, n1); | 343 CHECK_INPUTS(n2, n1); |
337 CHECK_USES(n0, NONE); | 344 CHECK_USES(n0, NONE); |
338 CHECK_USES(n1, n2); | 345 CHECK_USES(n1, n2); |
339 | 346 |
340 n2->RemoveInput(0); | 347 n2->RemoveInput(0); |
341 CHECK_INPUTS(n2, NONE); | 348 CHECK_INPUTS(n2, NONE); |
342 CHECK_USES(n0, NONE); | 349 CHECK_USES(n0, NONE); |
343 CHECK_USES(n1, NONE); | 350 CHECK_USES(n1, NONE); |
344 CHECK_USES(n2, NONE); | 351 CHECK_USES(n2, NONE); |
345 } | 352 } |
346 | 353 |
347 | 354 |
348 TEST(AppendInputsAndIterator) { | 355 TEST(AppendInputsAndIterator) { |
349 Zone zone; | 356 base::AccountingAllocator allocator; |
| 357 Zone zone(&allocator); |
350 Graph graph(&zone); | 358 Graph graph(&zone); |
351 | 359 |
352 Node* n0 = graph.NewNode(&dummy_operator0); | 360 Node* n0 = graph.NewNode(&dummy_operator0); |
353 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 361 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
354 Node* n2 = graph.NewNode(&dummy_operator2, n0, n1); | 362 Node* n2 = graph.NewNode(&dummy_operator2, n0, n1); |
355 | 363 |
356 CHECK_INPUTS(n0, NONE); | 364 CHECK_INPUTS(n0, NONE); |
357 CHECK_INPUTS(n1, n0); | 365 CHECK_INPUTS(n1, n0); |
358 CHECK_INPUTS(n2, n0, n1); | 366 CHECK_INPUTS(n2, n0, n1); |
359 CHECK_USES(n0, n1, n2); | 367 CHECK_USES(n0, n1, n2); |
360 | 368 |
361 Node* n3 = graph.NewNode(&dummy_operator0); | 369 Node* n3 = graph.NewNode(&dummy_operator0); |
362 | 370 |
363 n2->AppendInput(graph.zone(), n3); | 371 n2->AppendInput(graph.zone(), n3); |
364 | 372 |
365 CHECK_INPUTS(n2, n0, n1, n3); | 373 CHECK_INPUTS(n2, n0, n1, n3); |
366 CHECK_USES(n3, n2); | 374 CHECK_USES(n3, n2); |
367 } | 375 } |
368 | 376 |
369 | 377 |
370 TEST(NullInputsSimple) { | 378 TEST(NullInputsSimple) { |
371 Zone zone; | 379 base::AccountingAllocator allocator; |
| 380 Zone zone(&allocator); |
372 Graph graph(&zone); | 381 Graph graph(&zone); |
373 | 382 |
374 Node* n0 = graph.NewNode(&dummy_operator0); | 383 Node* n0 = graph.NewNode(&dummy_operator0); |
375 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 384 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
376 Node* n2 = graph.NewNode(&dummy_operator2, n0, n1); | 385 Node* n2 = graph.NewNode(&dummy_operator2, n0, n1); |
377 | 386 |
378 CHECK_INPUTS(n0, NONE); | 387 CHECK_INPUTS(n0, NONE); |
379 CHECK_INPUTS(n1, n0); | 388 CHECK_INPUTS(n1, n0); |
380 CHECK_INPUTS(n2, n0, n1); | 389 CHECK_INPUTS(n2, n0, n1); |
381 CHECK_USES(n0, n1, n2); | 390 CHECK_USES(n0, n1, n2); |
382 | 391 |
383 n2->ReplaceInput(0, nullptr); | 392 n2->ReplaceInput(0, nullptr); |
384 | 393 |
385 CHECK_INPUTS(n2, NULL, n1); | 394 CHECK_INPUTS(n2, NULL, n1); |
386 | 395 |
387 CHECK_USES(n0, n1); | 396 CHECK_USES(n0, n1); |
388 | 397 |
389 n2->ReplaceInput(1, nullptr); | 398 n2->ReplaceInput(1, nullptr); |
390 | 399 |
391 CHECK_INPUTS(n2, NULL, NULL); | 400 CHECK_INPUTS(n2, NULL, NULL); |
392 | 401 |
393 CHECK_USES(n1, NONE); | 402 CHECK_USES(n1, NONE); |
394 } | 403 } |
395 | 404 |
396 | 405 |
397 TEST(NullInputsAppended) { | 406 TEST(NullInputsAppended) { |
398 Zone zone; | 407 base::AccountingAllocator allocator; |
| 408 Zone zone(&allocator); |
399 Graph graph(&zone); | 409 Graph graph(&zone); |
400 | 410 |
401 Node* n0 = graph.NewNode(&dummy_operator0); | 411 Node* n0 = graph.NewNode(&dummy_operator0); |
402 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 412 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
403 Node* n2 = graph.NewNode(&dummy_operator1, n0); | 413 Node* n2 = graph.NewNode(&dummy_operator1, n0); |
404 Node* n3 = graph.NewNode(&dummy_operator1, n0); | 414 Node* n3 = graph.NewNode(&dummy_operator1, n0); |
405 n3->AppendInput(graph.zone(), n1); | 415 n3->AppendInput(graph.zone(), n1); |
406 n3->AppendInput(graph.zone(), n2); | 416 n3->AppendInput(graph.zone(), n2); |
407 | 417 |
408 CHECK_INPUTS(n3, n0, n1, n2); | 418 CHECK_INPUTS(n3, n0, n1, n2); |
409 CHECK_USES(n0, n1, n2, n3); | 419 CHECK_USES(n0, n1, n2, n3); |
410 CHECK_USES(n1, n3); | 420 CHECK_USES(n1, n3); |
411 CHECK_USES(n2, n3); | 421 CHECK_USES(n2, n3); |
412 | 422 |
413 n3->ReplaceInput(1, NULL); | 423 n3->ReplaceInput(1, NULL); |
414 CHECK_USES(n1, NONE); | 424 CHECK_USES(n1, NONE); |
415 | 425 |
416 CHECK_INPUTS(n3, n0, NULL, n2); | 426 CHECK_INPUTS(n3, n0, NULL, n2); |
417 } | 427 } |
418 | 428 |
419 | 429 |
420 TEST(ReplaceUsesFromAppendedInputs) { | 430 TEST(ReplaceUsesFromAppendedInputs) { |
421 Zone zone; | 431 base::AccountingAllocator allocator; |
| 432 Zone zone(&allocator); |
422 Graph graph(&zone); | 433 Graph graph(&zone); |
423 | 434 |
424 Node* n0 = graph.NewNode(&dummy_operator0); | 435 Node* n0 = graph.NewNode(&dummy_operator0); |
425 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 436 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
426 Node* n2 = graph.NewNode(&dummy_operator1, n0); | 437 Node* n2 = graph.NewNode(&dummy_operator1, n0); |
427 Node* n3 = graph.NewNode(&dummy_operator0); | 438 Node* n3 = graph.NewNode(&dummy_operator0); |
428 | 439 |
429 CHECK_INPUTS(n2, n0); | 440 CHECK_INPUTS(n2, n0); |
430 | 441 |
431 n2->AppendInput(graph.zone(), n1); | 442 n2->AppendInput(graph.zone(), n1); |
432 CHECK_INPUTS(n2, n0, n1); | 443 CHECK_INPUTS(n2, n0, n1); |
433 CHECK_USES(n1, n2); | 444 CHECK_USES(n1, n2); |
434 | 445 |
435 n2->AppendInput(graph.zone(), n0); | 446 n2->AppendInput(graph.zone(), n0); |
436 CHECK_INPUTS(n2, n0, n1, n0); | 447 CHECK_INPUTS(n2, n0, n1, n0); |
437 CHECK_USES(n1, n2); | 448 CHECK_USES(n1, n2); |
438 CHECK_USES(n0, n2, n1, n2); | 449 CHECK_USES(n0, n2, n1, n2); |
439 | 450 |
440 n0->ReplaceUses(n3); | 451 n0->ReplaceUses(n3); |
441 | 452 |
442 CHECK_USES(n0, NONE); | 453 CHECK_USES(n0, NONE); |
443 CHECK_INPUTS(n2, n3, n1, n3); | 454 CHECK_INPUTS(n2, n3, n1, n3); |
444 CHECK_USES(n3, n2, n1, n2); | 455 CHECK_USES(n3, n2, n1, n2); |
445 } | 456 } |
446 | 457 |
447 | 458 |
448 TEST(ReplaceInputMultipleUses) { | 459 TEST(ReplaceInputMultipleUses) { |
449 Zone zone; | 460 base::AccountingAllocator allocator; |
| 461 Zone zone(&allocator); |
450 Graph graph(&zone); | 462 Graph graph(&zone); |
451 | 463 |
452 Node* n0 = graph.NewNode(&dummy_operator0); | 464 Node* n0 = graph.NewNode(&dummy_operator0); |
453 Node* n1 = graph.NewNode(&dummy_operator0); | 465 Node* n1 = graph.NewNode(&dummy_operator0); |
454 Node* n2 = graph.NewNode(&dummy_operator1, n0); | 466 Node* n2 = graph.NewNode(&dummy_operator1, n0); |
455 n2->ReplaceInput(0, n1); | 467 n2->ReplaceInput(0, n1); |
456 CHECK_EQ(0, n0->UseCount()); | 468 CHECK_EQ(0, n0->UseCount()); |
457 CHECK_EQ(1, n1->UseCount()); | 469 CHECK_EQ(1, n1->UseCount()); |
458 | 470 |
459 Node* n3 = graph.NewNode(&dummy_operator1, n0); | 471 Node* n3 = graph.NewNode(&dummy_operator1, n0); |
460 n3->ReplaceInput(0, n1); | 472 n3->ReplaceInput(0, n1); |
461 CHECK_EQ(0, n0->UseCount()); | 473 CHECK_EQ(0, n0->UseCount()); |
462 CHECK_EQ(2, n1->UseCount()); | 474 CHECK_EQ(2, n1->UseCount()); |
463 } | 475 } |
464 | 476 |
465 | 477 |
466 TEST(TrimInputCountInline) { | 478 TEST(TrimInputCountInline) { |
467 Zone zone; | 479 base::AccountingAllocator allocator; |
| 480 Zone zone(&allocator); |
468 Graph graph(&zone); | 481 Graph graph(&zone); |
469 | 482 |
470 { | 483 { |
471 Node* n0 = graph.NewNode(&dummy_operator0); | 484 Node* n0 = graph.NewNode(&dummy_operator0); |
472 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 485 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
473 n1->TrimInputCount(1); | 486 n1->TrimInputCount(1); |
474 CHECK_INPUTS(n1, n0); | 487 CHECK_INPUTS(n1, n0); |
475 CHECK_USES(n0, n1); | 488 CHECK_USES(n0, n1); |
476 } | 489 } |
477 | 490 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
525 Node* n0 = graph.NewNode(&dummy_operator0); | 538 Node* n0 = graph.NewNode(&dummy_operator0); |
526 Node* n2 = graph.NewNode(&dummy_operator2, n0, n0); | 539 Node* n2 = graph.NewNode(&dummy_operator2, n0, n0); |
527 n2->TrimInputCount(0); | 540 n2->TrimInputCount(0); |
528 CHECK_INPUTS(n2, NONE); | 541 CHECK_INPUTS(n2, NONE); |
529 CHECK_USES(n0, NONE); | 542 CHECK_USES(n0, NONE); |
530 } | 543 } |
531 } | 544 } |
532 | 545 |
533 | 546 |
534 TEST(TrimInputCountOutOfLine1) { | 547 TEST(TrimInputCountOutOfLine1) { |
535 Zone zone; | 548 base::AccountingAllocator allocator; |
| 549 Zone zone(&allocator); |
536 Graph graph(&zone); | 550 Graph graph(&zone); |
537 | 551 |
538 { | 552 { |
539 Node* n0 = graph.NewNode(&dummy_operator0); | 553 Node* n0 = graph.NewNode(&dummy_operator0); |
540 Node* n1 = graph.NewNode(&dummy_operator0); | 554 Node* n1 = graph.NewNode(&dummy_operator0); |
541 n1->AppendInput(graph.zone(), n0); | 555 n1->AppendInput(graph.zone(), n0); |
542 CHECK_INPUTS(n1, n0); | 556 CHECK_INPUTS(n1, n0); |
543 CHECK_USES(n0, n1); | 557 CHECK_USES(n0, n1); |
544 | 558 |
545 n1->TrimInputCount(1); | 559 n1->TrimInputCount(1); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
619 CHECK_INPUTS(n2, n0, n0); | 633 CHECK_INPUTS(n2, n0, n0); |
620 CHECK_USES(n0, n2, n2); | 634 CHECK_USES(n0, n2, n2); |
621 n2->TrimInputCount(0); | 635 n2->TrimInputCount(0); |
622 CHECK_INPUTS(n2, NONE); | 636 CHECK_INPUTS(n2, NONE); |
623 CHECK_USES(n0, NONE); | 637 CHECK_USES(n0, NONE); |
624 } | 638 } |
625 } | 639 } |
626 | 640 |
627 | 641 |
628 TEST(TrimInputCountOutOfLine2) { | 642 TEST(TrimInputCountOutOfLine2) { |
629 Zone zone; | 643 base::AccountingAllocator allocator; |
| 644 Zone zone(&allocator); |
630 Graph graph(&zone); | 645 Graph graph(&zone); |
631 | 646 |
632 { | 647 { |
633 Node* n0 = graph.NewNode(&dummy_operator0); | 648 Node* n0 = graph.NewNode(&dummy_operator0); |
634 Node* n1 = graph.NewNode(&dummy_operator0); | 649 Node* n1 = graph.NewNode(&dummy_operator0); |
635 Node* n2 = graph.NewNode(&dummy_operator1, n0); | 650 Node* n2 = graph.NewNode(&dummy_operator1, n0); |
636 n2->AppendInput(graph.zone(), n1); | 651 n2->AppendInput(graph.zone(), n1); |
637 CHECK_INPUTS(n2, n0, n1); | 652 CHECK_INPUTS(n2, n0, n1); |
638 n2->TrimInputCount(2); | 653 n2->TrimInputCount(2); |
639 CHECK_INPUTS(n2, n0, n1); | 654 CHECK_INPUTS(n2, n0, n1); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
688 CHECK_EQ(2, n0->UseCount()); | 703 CHECK_EQ(2, n0->UseCount()); |
689 n2->TrimInputCount(0); | 704 n2->TrimInputCount(0); |
690 CHECK_EQ(0, n2->InputCount()); | 705 CHECK_EQ(0, n2->InputCount()); |
691 CHECK_EQ(0, n0->UseCount()); | 706 CHECK_EQ(0, n0->UseCount()); |
692 CHECK_EQ(0, n2->UseCount()); | 707 CHECK_EQ(0, n2->UseCount()); |
693 } | 708 } |
694 } | 709 } |
695 | 710 |
696 | 711 |
697 TEST(NullAllInputs) { | 712 TEST(NullAllInputs) { |
698 Zone zone; | 713 base::AccountingAllocator allocator; |
| 714 Zone zone(&allocator); |
699 Graph graph(&zone); | 715 Graph graph(&zone); |
700 | 716 |
701 for (int i = 0; i < 2; i++) { | 717 for (int i = 0; i < 2; i++) { |
702 Node* n0 = graph.NewNode(&dummy_operator0); | 718 Node* n0 = graph.NewNode(&dummy_operator0); |
703 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 719 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
704 Node* n2; | 720 Node* n2; |
705 if (i == 0) { | 721 if (i == 0) { |
706 n2 = graph.NewNode(&dummy_operator2, n0, n1); | 722 n2 = graph.NewNode(&dummy_operator2, n0, n1); |
707 CHECK_INPUTS(n2, n0, n1); | 723 CHECK_INPUTS(n2, n0, n1); |
708 } else { | 724 } else { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
740 | 756 |
741 CHECK_INPUTS(n0, NONE); | 757 CHECK_INPUTS(n0, NONE); |
742 CHECK_INPUTS(n1, NULL); | 758 CHECK_INPUTS(n1, NULL); |
743 CHECK_USES(n0, NONE); | 759 CHECK_USES(n0, NONE); |
744 CHECK_USES(n1, NONE); | 760 CHECK_USES(n1, NONE); |
745 } | 761 } |
746 } | 762 } |
747 | 763 |
748 | 764 |
749 TEST(AppendAndTrim) { | 765 TEST(AppendAndTrim) { |
750 Zone zone; | 766 base::AccountingAllocator allocator; |
| 767 Zone zone(&allocator); |
751 Graph graph(&zone); | 768 Graph graph(&zone); |
752 | 769 |
753 Node* nodes[] = { | 770 Node* nodes[] = { |
754 graph.NewNode(&dummy_operator0), graph.NewNode(&dummy_operator0), | 771 graph.NewNode(&dummy_operator0), graph.NewNode(&dummy_operator0), |
755 graph.NewNode(&dummy_operator0), graph.NewNode(&dummy_operator0), | 772 graph.NewNode(&dummy_operator0), graph.NewNode(&dummy_operator0), |
756 graph.NewNode(&dummy_operator0)}; | 773 graph.NewNode(&dummy_operator0)}; |
757 | 774 |
758 int max = static_cast<int>(arraysize(nodes)); | 775 int max = static_cast<int>(arraysize(nodes)); |
759 | 776 |
760 Node* last = graph.NewNode(&dummy_operator0); | 777 Node* last = graph.NewNode(&dummy_operator0); |
(...skipping 19 matching lines...) Expand all Loading... |
780 if (j >= i) CHECK_USES(nodes[j], NONE); | 797 if (j >= i) CHECK_USES(nodes[j], NONE); |
781 } | 798 } |
782 | 799 |
783 CHECK_USES(last, NONE); | 800 CHECK_USES(last, NONE); |
784 } | 801 } |
785 } | 802 } |
786 | 803 |
787 } // namespace compiler | 804 } // namespace compiler |
788 } // namespace internal | 805 } // namespace internal |
789 } // namespace v8 | 806 } // namespace v8 |
OLD | NEW |