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 ZoneForTesting zone; |
145 Graph graph(&zone); | 145 Graph graph(&zone); |
146 Node* n0 = graph.NewNode(&dummy_operator0); | 146 Node* n0 = graph.NewNode(&dummy_operator0); |
147 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 147 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
148 Node* n2 = graph.NewNode(&dummy_operator1, n0); | 148 Node* n2 = graph.NewNode(&dummy_operator1, n0); |
149 Node* n3 = graph.NewNode(&dummy_operator0); | 149 Node* n3 = graph.NewNode(&dummy_operator0); |
150 | 150 |
151 CHECK_USES(n0, n1, n2); | 151 CHECK_USES(n0, n1, n2); |
152 | 152 |
153 CHECK_INPUTS(n1, n0); | 153 CHECK_INPUTS(n1, n0); |
154 CHECK_INPUTS(n2, n0); | 154 CHECK_INPUTS(n2, n0); |
155 | 155 |
156 n0->ReplaceUses(n3); | 156 n0->ReplaceUses(n3); |
157 | 157 |
158 CHECK_USES(n0, NONE); | 158 CHECK_USES(n0, NONE); |
159 CHECK_USES(n1, NONE); | 159 CHECK_USES(n1, NONE); |
160 CHECK_USES(n2, NONE); | 160 CHECK_USES(n2, NONE); |
161 CHECK_USES(n3, n1, n2); | 161 CHECK_USES(n3, n1, n2); |
162 | 162 |
163 CHECK_INPUTS(n1, n3); | 163 CHECK_INPUTS(n1, n3); |
164 CHECK_INPUTS(n2, n3); | 164 CHECK_INPUTS(n2, n3); |
165 } | 165 } |
166 | 166 |
167 | 167 |
168 TEST(NodeUseIteratorReplaceUsesSelf) { | 168 TEST(NodeUseIteratorReplaceUsesSelf) { |
169 Zone zone; | 169 ZoneForTesting zone; |
170 Graph graph(&zone); | 170 Graph graph(&zone); |
171 Node* n0 = graph.NewNode(&dummy_operator0); | 171 Node* n0 = graph.NewNode(&dummy_operator0); |
172 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 172 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
173 | 173 |
174 CHECK_USES(n0, n1); | 174 CHECK_USES(n0, n1); |
175 CHECK_USES(n1, NONE); | 175 CHECK_USES(n1, NONE); |
176 | 176 |
177 n1->ReplaceInput(0, n1); // Create self-reference. | 177 n1->ReplaceInput(0, n1); // Create self-reference. |
178 | 178 |
179 CHECK_USES(n0, NONE); | 179 CHECK_USES(n0, NONE); |
180 CHECK_USES(n1, n1); | 180 CHECK_USES(n1, n1); |
181 | 181 |
182 Node* n2 = graph.NewNode(&dummy_operator0); | 182 Node* n2 = graph.NewNode(&dummy_operator0); |
183 | 183 |
184 n1->ReplaceUses(n2); | 184 n1->ReplaceUses(n2); |
185 | 185 |
186 CHECK_USES(n0, NONE); | 186 CHECK_USES(n0, NONE); |
187 CHECK_USES(n1, NONE); | 187 CHECK_USES(n1, NONE); |
188 CHECK_USES(n2, n1); | 188 CHECK_USES(n2, n1); |
189 } | 189 } |
190 | 190 |
191 | 191 |
192 TEST(ReplaceInput) { | 192 TEST(ReplaceInput) { |
193 Zone zone; | 193 ZoneForTesting zone; |
194 Graph graph(&zone); | 194 Graph graph(&zone); |
195 Node* n0 = graph.NewNode(&dummy_operator0); | 195 Node* n0 = graph.NewNode(&dummy_operator0); |
196 Node* n1 = graph.NewNode(&dummy_operator0); | 196 Node* n1 = graph.NewNode(&dummy_operator0); |
197 Node* n2 = graph.NewNode(&dummy_operator0); | 197 Node* n2 = graph.NewNode(&dummy_operator0); |
198 Node* n3 = graph.NewNode(&dummy_operator3, n0, n1, n2); | 198 Node* n3 = graph.NewNode(&dummy_operator3, n0, n1, n2); |
199 Node* n4 = graph.NewNode(&dummy_operator0); | 199 Node* n4 = graph.NewNode(&dummy_operator0); |
200 | 200 |
201 CHECK_USES(n0, n3); | 201 CHECK_USES(n0, n3); |
202 CHECK_USES(n1, n3); | 202 CHECK_USES(n1, n3); |
203 CHECK_USES(n2, n3); | 203 CHECK_USES(n2, n3); |
204 CHECK_USES(n3, NONE); | 204 CHECK_USES(n3, NONE); |
205 CHECK_USES(n4, NONE); | 205 CHECK_USES(n4, NONE); |
206 | 206 |
207 CHECK_INPUTS(n3, n0, n1, n2); | 207 CHECK_INPUTS(n3, n0, n1, n2); |
208 | 208 |
209 n3->ReplaceInput(1, n4); | 209 n3->ReplaceInput(1, n4); |
210 | 210 |
211 CHECK_USES(n1, NONE); | 211 CHECK_USES(n1, NONE); |
212 CHECK_USES(n4, n3); | 212 CHECK_USES(n4, n3); |
213 | 213 |
214 CHECK_INPUTS(n3, n0, n4, n2); | 214 CHECK_INPUTS(n3, n0, n4, n2); |
215 } | 215 } |
216 | 216 |
217 | 217 |
218 TEST(OwnedBy) { | 218 TEST(OwnedBy) { |
219 Zone zone; | 219 ZoneForTesting zone; |
220 Graph graph(&zone); | 220 Graph graph(&zone); |
221 | 221 |
222 { | 222 { |
223 Node* n0 = graph.NewNode(&dummy_operator0); | 223 Node* n0 = graph.NewNode(&dummy_operator0); |
224 Node* n1 = graph.NewNode(&dummy_operator0); | 224 Node* n1 = graph.NewNode(&dummy_operator0); |
225 | 225 |
226 CHECK(!n0->OwnedBy(n1)); | 226 CHECK(!n0->OwnedBy(n1)); |
227 CHECK(!n1->OwnedBy(n0)); | 227 CHECK(!n1->OwnedBy(n0)); |
228 | 228 |
229 Node* n2 = graph.NewNode(&dummy_operator1, n0); | 229 Node* n2 = graph.NewNode(&dummy_operator1, n0); |
(...skipping 29 matching lines...) Expand all Loading... |
259 CHECK(!n1->OwnedBy(n2)); | 259 CHECK(!n1->OwnedBy(n2)); |
260 CHECK(!n2->OwnedBy(n0)); | 260 CHECK(!n2->OwnedBy(n0)); |
261 CHECK(!n2->OwnedBy(n1)); | 261 CHECK(!n2->OwnedBy(n1)); |
262 CHECK(n3->OwnedBy(n2)); | 262 CHECK(n3->OwnedBy(n2)); |
263 CHECK(!n2->OwnedBy(n3)); | 263 CHECK(!n2->OwnedBy(n3)); |
264 } | 264 } |
265 } | 265 } |
266 | 266 |
267 | 267 |
268 TEST(Uses) { | 268 TEST(Uses) { |
269 Zone zone; | 269 ZoneForTesting zone; |
270 Graph graph(&zone); | 270 Graph graph(&zone); |
271 | 271 |
272 Node* n0 = graph.NewNode(&dummy_operator0); | 272 Node* n0 = graph.NewNode(&dummy_operator0); |
273 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 273 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
274 | 274 |
275 CHECK_USES(n0, n1); | 275 CHECK_USES(n0, n1); |
276 CHECK_USES(n1, NONE); | 276 CHECK_USES(n1, NONE); |
277 | 277 |
278 Node* n2 = graph.NewNode(&dummy_operator1, n0); | 278 Node* n2 = graph.NewNode(&dummy_operator1, n0); |
279 | 279 |
280 CHECK_USES(n0, n1, n2); | 280 CHECK_USES(n0, n1, n2); |
281 CHECK_USES(n2, NONE); | 281 CHECK_USES(n2, NONE); |
282 | 282 |
283 Node* n3 = graph.NewNode(&dummy_operator1, n0); | 283 Node* n3 = graph.NewNode(&dummy_operator1, n0); |
284 | 284 |
285 CHECK_USES(n0, n1, n2, n3); | 285 CHECK_USES(n0, n1, n2, n3); |
286 CHECK_USES(n3, NONE); | 286 CHECK_USES(n3, NONE); |
287 } | 287 } |
288 | 288 |
289 | 289 |
290 TEST(Inputs) { | 290 TEST(Inputs) { |
291 Zone zone; | 291 ZoneForTesting zone; |
292 Graph graph(&zone); | 292 Graph graph(&zone); |
293 | 293 |
294 Node* n0 = graph.NewNode(&dummy_operator0); | 294 Node* n0 = graph.NewNode(&dummy_operator0); |
295 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 295 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
296 Node* n2 = graph.NewNode(&dummy_operator1, n0); | 296 Node* n2 = graph.NewNode(&dummy_operator1, n0); |
297 Node* n3 = graph.NewNode(&dummy_operator3, n0, n1, n2); | 297 Node* n3 = graph.NewNode(&dummy_operator3, n0, n1, n2); |
298 | 298 |
299 CHECK_INPUTS(n3, n0, n1, n2); | 299 CHECK_INPUTS(n3, n0, n1, n2); |
300 | 300 |
301 Node* n4 = graph.NewNode(&dummy_operator3, n0, n1, n2); | 301 Node* n4 = graph.NewNode(&dummy_operator3, n0, n1, n2); |
302 n3->AppendInput(graph.zone(), n4); | 302 n3->AppendInput(graph.zone(), n4); |
303 | 303 |
304 CHECK_INPUTS(n3, n0, n1, n2, n4); | 304 CHECK_INPUTS(n3, n0, n1, n2, n4); |
305 CHECK_USES(n4, n3); | 305 CHECK_USES(n4, n3); |
306 | 306 |
307 n3->AppendInput(graph.zone(), n4); | 307 n3->AppendInput(graph.zone(), n4); |
308 | 308 |
309 CHECK_INPUTS(n3, n0, n1, n2, n4, n4); | 309 CHECK_INPUTS(n3, n0, n1, n2, n4, n4); |
310 CHECK_USES(n4, n3, n3); | 310 CHECK_USES(n4, n3, n3); |
311 | 311 |
312 Node* n5 = graph.NewNode(&dummy_operator1, n4); | 312 Node* n5 = graph.NewNode(&dummy_operator1, n4); |
313 | 313 |
314 CHECK_USES(n4, n3, n3, n5); | 314 CHECK_USES(n4, n3, n3, n5); |
315 } | 315 } |
316 | 316 |
317 | 317 |
318 TEST(RemoveInput) { | 318 TEST(RemoveInput) { |
319 Zone zone; | 319 ZoneForTesting zone; |
320 Graph graph(&zone); | 320 Graph graph(&zone); |
321 | 321 |
322 Node* n0 = graph.NewNode(&dummy_operator0); | 322 Node* n0 = graph.NewNode(&dummy_operator0); |
323 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 323 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
324 Node* n2 = graph.NewNode(&dummy_operator2, n0, n1); | 324 Node* n2 = graph.NewNode(&dummy_operator2, n0, n1); |
325 | 325 |
326 CHECK_INPUTS(n0, NONE); | 326 CHECK_INPUTS(n0, NONE); |
327 CHECK_INPUTS(n1, n0); | 327 CHECK_INPUTS(n1, n0); |
328 CHECK_INPUTS(n2, n0, n1); | 328 CHECK_INPUTS(n2, n0, n1); |
329 CHECK_USES(n0, n1, n2); | 329 CHECK_USES(n0, n1, n2); |
330 | 330 |
331 n1->RemoveInput(0); | 331 n1->RemoveInput(0); |
332 CHECK_INPUTS(n1, NONE); | 332 CHECK_INPUTS(n1, NONE); |
333 CHECK_USES(n0, n2); | 333 CHECK_USES(n0, n2); |
334 | 334 |
335 n2->RemoveInput(0); | 335 n2->RemoveInput(0); |
336 CHECK_INPUTS(n2, n1); | 336 CHECK_INPUTS(n2, n1); |
337 CHECK_USES(n0, NONE); | 337 CHECK_USES(n0, NONE); |
338 CHECK_USES(n1, n2); | 338 CHECK_USES(n1, n2); |
339 | 339 |
340 n2->RemoveInput(0); | 340 n2->RemoveInput(0); |
341 CHECK_INPUTS(n2, NONE); | 341 CHECK_INPUTS(n2, NONE); |
342 CHECK_USES(n0, NONE); | 342 CHECK_USES(n0, NONE); |
343 CHECK_USES(n1, NONE); | 343 CHECK_USES(n1, NONE); |
344 CHECK_USES(n2, NONE); | 344 CHECK_USES(n2, NONE); |
345 } | 345 } |
346 | 346 |
347 | 347 |
348 TEST(AppendInputsAndIterator) { | 348 TEST(AppendInputsAndIterator) { |
349 Zone zone; | 349 ZoneForTesting zone; |
350 Graph graph(&zone); | 350 Graph graph(&zone); |
351 | 351 |
352 Node* n0 = graph.NewNode(&dummy_operator0); | 352 Node* n0 = graph.NewNode(&dummy_operator0); |
353 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 353 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
354 Node* n2 = graph.NewNode(&dummy_operator2, n0, n1); | 354 Node* n2 = graph.NewNode(&dummy_operator2, n0, n1); |
355 | 355 |
356 CHECK_INPUTS(n0, NONE); | 356 CHECK_INPUTS(n0, NONE); |
357 CHECK_INPUTS(n1, n0); | 357 CHECK_INPUTS(n1, n0); |
358 CHECK_INPUTS(n2, n0, n1); | 358 CHECK_INPUTS(n2, n0, n1); |
359 CHECK_USES(n0, n1, n2); | 359 CHECK_USES(n0, n1, n2); |
360 | 360 |
361 Node* n3 = graph.NewNode(&dummy_operator0); | 361 Node* n3 = graph.NewNode(&dummy_operator0); |
362 | 362 |
363 n2->AppendInput(graph.zone(), n3); | 363 n2->AppendInput(graph.zone(), n3); |
364 | 364 |
365 CHECK_INPUTS(n2, n0, n1, n3); | 365 CHECK_INPUTS(n2, n0, n1, n3); |
366 CHECK_USES(n3, n2); | 366 CHECK_USES(n3, n2); |
367 } | 367 } |
368 | 368 |
369 | 369 |
370 TEST(NullInputsSimple) { | 370 TEST(NullInputsSimple) { |
371 Zone zone; | 371 ZoneForTesting zone; |
372 Graph graph(&zone); | 372 Graph graph(&zone); |
373 | 373 |
374 Node* n0 = graph.NewNode(&dummy_operator0); | 374 Node* n0 = graph.NewNode(&dummy_operator0); |
375 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 375 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
376 Node* n2 = graph.NewNode(&dummy_operator2, n0, n1); | 376 Node* n2 = graph.NewNode(&dummy_operator2, n0, n1); |
377 | 377 |
378 CHECK_INPUTS(n0, NONE); | 378 CHECK_INPUTS(n0, NONE); |
379 CHECK_INPUTS(n1, n0); | 379 CHECK_INPUTS(n1, n0); |
380 CHECK_INPUTS(n2, n0, n1); | 380 CHECK_INPUTS(n2, n0, n1); |
381 CHECK_USES(n0, n1, n2); | 381 CHECK_USES(n0, n1, n2); |
382 | 382 |
383 n2->ReplaceInput(0, nullptr); | 383 n2->ReplaceInput(0, nullptr); |
384 | 384 |
385 CHECK_INPUTS(n2, NULL, n1); | 385 CHECK_INPUTS(n2, NULL, n1); |
386 | 386 |
387 CHECK_USES(n0, n1); | 387 CHECK_USES(n0, n1); |
388 | 388 |
389 n2->ReplaceInput(1, nullptr); | 389 n2->ReplaceInput(1, nullptr); |
390 | 390 |
391 CHECK_INPUTS(n2, NULL, NULL); | 391 CHECK_INPUTS(n2, NULL, NULL); |
392 | 392 |
393 CHECK_USES(n1, NONE); | 393 CHECK_USES(n1, NONE); |
394 } | 394 } |
395 | 395 |
396 | 396 |
397 TEST(NullInputsAppended) { | 397 TEST(NullInputsAppended) { |
398 Zone zone; | 398 ZoneForTesting zone; |
399 Graph graph(&zone); | 399 Graph graph(&zone); |
400 | 400 |
401 Node* n0 = graph.NewNode(&dummy_operator0); | 401 Node* n0 = graph.NewNode(&dummy_operator0); |
402 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 402 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
403 Node* n2 = graph.NewNode(&dummy_operator1, n0); | 403 Node* n2 = graph.NewNode(&dummy_operator1, n0); |
404 Node* n3 = graph.NewNode(&dummy_operator1, n0); | 404 Node* n3 = graph.NewNode(&dummy_operator1, n0); |
405 n3->AppendInput(graph.zone(), n1); | 405 n3->AppendInput(graph.zone(), n1); |
406 n3->AppendInput(graph.zone(), n2); | 406 n3->AppendInput(graph.zone(), n2); |
407 | 407 |
408 CHECK_INPUTS(n3, n0, n1, n2); | 408 CHECK_INPUTS(n3, n0, n1, n2); |
409 CHECK_USES(n0, n1, n2, n3); | 409 CHECK_USES(n0, n1, n2, n3); |
410 CHECK_USES(n1, n3); | 410 CHECK_USES(n1, n3); |
411 CHECK_USES(n2, n3); | 411 CHECK_USES(n2, n3); |
412 | 412 |
413 n3->ReplaceInput(1, NULL); | 413 n3->ReplaceInput(1, NULL); |
414 CHECK_USES(n1, NONE); | 414 CHECK_USES(n1, NONE); |
415 | 415 |
416 CHECK_INPUTS(n3, n0, NULL, n2); | 416 CHECK_INPUTS(n3, n0, NULL, n2); |
417 } | 417 } |
418 | 418 |
419 | 419 |
420 TEST(ReplaceUsesFromAppendedInputs) { | 420 TEST(ReplaceUsesFromAppendedInputs) { |
421 Zone zone; | 421 ZoneForTesting zone; |
422 Graph graph(&zone); | 422 Graph graph(&zone); |
423 | 423 |
424 Node* n0 = graph.NewNode(&dummy_operator0); | 424 Node* n0 = graph.NewNode(&dummy_operator0); |
425 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 425 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
426 Node* n2 = graph.NewNode(&dummy_operator1, n0); | 426 Node* n2 = graph.NewNode(&dummy_operator1, n0); |
427 Node* n3 = graph.NewNode(&dummy_operator0); | 427 Node* n3 = graph.NewNode(&dummy_operator0); |
428 | 428 |
429 CHECK_INPUTS(n2, n0); | 429 CHECK_INPUTS(n2, n0); |
430 | 430 |
431 n2->AppendInput(graph.zone(), n1); | 431 n2->AppendInput(graph.zone(), n1); |
432 CHECK_INPUTS(n2, n0, n1); | 432 CHECK_INPUTS(n2, n0, n1); |
433 CHECK_USES(n1, n2); | 433 CHECK_USES(n1, n2); |
434 | 434 |
435 n2->AppendInput(graph.zone(), n0); | 435 n2->AppendInput(graph.zone(), n0); |
436 CHECK_INPUTS(n2, n0, n1, n0); | 436 CHECK_INPUTS(n2, n0, n1, n0); |
437 CHECK_USES(n1, n2); | 437 CHECK_USES(n1, n2); |
438 CHECK_USES(n0, n2, n1, n2); | 438 CHECK_USES(n0, n2, n1, n2); |
439 | 439 |
440 n0->ReplaceUses(n3); | 440 n0->ReplaceUses(n3); |
441 | 441 |
442 CHECK_USES(n0, NONE); | 442 CHECK_USES(n0, NONE); |
443 CHECK_INPUTS(n2, n3, n1, n3); | 443 CHECK_INPUTS(n2, n3, n1, n3); |
444 CHECK_USES(n3, n2, n1, n2); | 444 CHECK_USES(n3, n2, n1, n2); |
445 } | 445 } |
446 | 446 |
447 | 447 |
448 TEST(ReplaceInputMultipleUses) { | 448 TEST(ReplaceInputMultipleUses) { |
449 Zone zone; | 449 ZoneForTesting zone; |
450 Graph graph(&zone); | 450 Graph graph(&zone); |
451 | 451 |
452 Node* n0 = graph.NewNode(&dummy_operator0); | 452 Node* n0 = graph.NewNode(&dummy_operator0); |
453 Node* n1 = graph.NewNode(&dummy_operator0); | 453 Node* n1 = graph.NewNode(&dummy_operator0); |
454 Node* n2 = graph.NewNode(&dummy_operator1, n0); | 454 Node* n2 = graph.NewNode(&dummy_operator1, n0); |
455 n2->ReplaceInput(0, n1); | 455 n2->ReplaceInput(0, n1); |
456 CHECK_EQ(0, n0->UseCount()); | 456 CHECK_EQ(0, n0->UseCount()); |
457 CHECK_EQ(1, n1->UseCount()); | 457 CHECK_EQ(1, n1->UseCount()); |
458 | 458 |
459 Node* n3 = graph.NewNode(&dummy_operator1, n0); | 459 Node* n3 = graph.NewNode(&dummy_operator1, n0); |
460 n3->ReplaceInput(0, n1); | 460 n3->ReplaceInput(0, n1); |
461 CHECK_EQ(0, n0->UseCount()); | 461 CHECK_EQ(0, n0->UseCount()); |
462 CHECK_EQ(2, n1->UseCount()); | 462 CHECK_EQ(2, n1->UseCount()); |
463 } | 463 } |
464 | 464 |
465 | 465 |
466 TEST(TrimInputCountInline) { | 466 TEST(TrimInputCountInline) { |
467 Zone zone; | 467 ZoneForTesting zone; |
468 Graph graph(&zone); | 468 Graph graph(&zone); |
469 | 469 |
470 { | 470 { |
471 Node* n0 = graph.NewNode(&dummy_operator0); | 471 Node* n0 = graph.NewNode(&dummy_operator0); |
472 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 472 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
473 n1->TrimInputCount(1); | 473 n1->TrimInputCount(1); |
474 CHECK_INPUTS(n1, n0); | 474 CHECK_INPUTS(n1, n0); |
475 CHECK_USES(n0, n1); | 475 CHECK_USES(n0, n1); |
476 } | 476 } |
477 | 477 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
525 Node* n0 = graph.NewNode(&dummy_operator0); | 525 Node* n0 = graph.NewNode(&dummy_operator0); |
526 Node* n2 = graph.NewNode(&dummy_operator2, n0, n0); | 526 Node* n2 = graph.NewNode(&dummy_operator2, n0, n0); |
527 n2->TrimInputCount(0); | 527 n2->TrimInputCount(0); |
528 CHECK_INPUTS(n2, NONE); | 528 CHECK_INPUTS(n2, NONE); |
529 CHECK_USES(n0, NONE); | 529 CHECK_USES(n0, NONE); |
530 } | 530 } |
531 } | 531 } |
532 | 532 |
533 | 533 |
534 TEST(TrimInputCountOutOfLine1) { | 534 TEST(TrimInputCountOutOfLine1) { |
535 Zone zone; | 535 ZoneForTesting zone; |
536 Graph graph(&zone); | 536 Graph graph(&zone); |
537 | 537 |
538 { | 538 { |
539 Node* n0 = graph.NewNode(&dummy_operator0); | 539 Node* n0 = graph.NewNode(&dummy_operator0); |
540 Node* n1 = graph.NewNode(&dummy_operator0); | 540 Node* n1 = graph.NewNode(&dummy_operator0); |
541 n1->AppendInput(graph.zone(), n0); | 541 n1->AppendInput(graph.zone(), n0); |
542 CHECK_INPUTS(n1, n0); | 542 CHECK_INPUTS(n1, n0); |
543 CHECK_USES(n0, n1); | 543 CHECK_USES(n0, n1); |
544 | 544 |
545 n1->TrimInputCount(1); | 545 n1->TrimInputCount(1); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
619 CHECK_INPUTS(n2, n0, n0); | 619 CHECK_INPUTS(n2, n0, n0); |
620 CHECK_USES(n0, n2, n2); | 620 CHECK_USES(n0, n2, n2); |
621 n2->TrimInputCount(0); | 621 n2->TrimInputCount(0); |
622 CHECK_INPUTS(n2, NONE); | 622 CHECK_INPUTS(n2, NONE); |
623 CHECK_USES(n0, NONE); | 623 CHECK_USES(n0, NONE); |
624 } | 624 } |
625 } | 625 } |
626 | 626 |
627 | 627 |
628 TEST(TrimInputCountOutOfLine2) { | 628 TEST(TrimInputCountOutOfLine2) { |
629 Zone zone; | 629 ZoneForTesting zone; |
630 Graph graph(&zone); | 630 Graph graph(&zone); |
631 | 631 |
632 { | 632 { |
633 Node* n0 = graph.NewNode(&dummy_operator0); | 633 Node* n0 = graph.NewNode(&dummy_operator0); |
634 Node* n1 = graph.NewNode(&dummy_operator0); | 634 Node* n1 = graph.NewNode(&dummy_operator0); |
635 Node* n2 = graph.NewNode(&dummy_operator1, n0); | 635 Node* n2 = graph.NewNode(&dummy_operator1, n0); |
636 n2->AppendInput(graph.zone(), n1); | 636 n2->AppendInput(graph.zone(), n1); |
637 CHECK_INPUTS(n2, n0, n1); | 637 CHECK_INPUTS(n2, n0, n1); |
638 n2->TrimInputCount(2); | 638 n2->TrimInputCount(2); |
639 CHECK_INPUTS(n2, n0, n1); | 639 CHECK_INPUTS(n2, n0, n1); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
688 CHECK_EQ(2, n0->UseCount()); | 688 CHECK_EQ(2, n0->UseCount()); |
689 n2->TrimInputCount(0); | 689 n2->TrimInputCount(0); |
690 CHECK_EQ(0, n2->InputCount()); | 690 CHECK_EQ(0, n2->InputCount()); |
691 CHECK_EQ(0, n0->UseCount()); | 691 CHECK_EQ(0, n0->UseCount()); |
692 CHECK_EQ(0, n2->UseCount()); | 692 CHECK_EQ(0, n2->UseCount()); |
693 } | 693 } |
694 } | 694 } |
695 | 695 |
696 | 696 |
697 TEST(NullAllInputs) { | 697 TEST(NullAllInputs) { |
698 Zone zone; | 698 ZoneForTesting zone; |
699 Graph graph(&zone); | 699 Graph graph(&zone); |
700 | 700 |
701 for (int i = 0; i < 2; i++) { | 701 for (int i = 0; i < 2; i++) { |
702 Node* n0 = graph.NewNode(&dummy_operator0); | 702 Node* n0 = graph.NewNode(&dummy_operator0); |
703 Node* n1 = graph.NewNode(&dummy_operator1, n0); | 703 Node* n1 = graph.NewNode(&dummy_operator1, n0); |
704 Node* n2; | 704 Node* n2; |
705 if (i == 0) { | 705 if (i == 0) { |
706 n2 = graph.NewNode(&dummy_operator2, n0, n1); | 706 n2 = graph.NewNode(&dummy_operator2, n0, n1); |
707 CHECK_INPUTS(n2, n0, n1); | 707 CHECK_INPUTS(n2, n0, n1); |
708 } else { | 708 } else { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
740 | 740 |
741 CHECK_INPUTS(n0, NONE); | 741 CHECK_INPUTS(n0, NONE); |
742 CHECK_INPUTS(n1, NULL); | 742 CHECK_INPUTS(n1, NULL); |
743 CHECK_USES(n0, NONE); | 743 CHECK_USES(n0, NONE); |
744 CHECK_USES(n1, NONE); | 744 CHECK_USES(n1, NONE); |
745 } | 745 } |
746 } | 746 } |
747 | 747 |
748 | 748 |
749 TEST(AppendAndTrim) { | 749 TEST(AppendAndTrim) { |
750 Zone zone; | 750 ZoneForTesting zone; |
751 Graph graph(&zone); | 751 Graph graph(&zone); |
752 | 752 |
753 Node* nodes[] = { | 753 Node* nodes[] = { |
754 graph.NewNode(&dummy_operator0), graph.NewNode(&dummy_operator0), | 754 graph.NewNode(&dummy_operator0), graph.NewNode(&dummy_operator0), |
755 graph.NewNode(&dummy_operator0), graph.NewNode(&dummy_operator0), | 755 graph.NewNode(&dummy_operator0), graph.NewNode(&dummy_operator0), |
756 graph.NewNode(&dummy_operator0)}; | 756 graph.NewNode(&dummy_operator0)}; |
757 | 757 |
758 int max = static_cast<int>(arraysize(nodes)); | 758 int max = static_cast<int>(arraysize(nodes)); |
759 | 759 |
760 Node* last = graph.NewNode(&dummy_operator0); | 760 Node* last = graph.NewNode(&dummy_operator0); |
(...skipping 19 matching lines...) Expand all Loading... |
780 if (j >= i) CHECK_USES(nodes[j], NONE); | 780 if (j >= i) CHECK_USES(nodes[j], NONE); |
781 } | 781 } |
782 | 782 |
783 CHECK_USES(last, NONE); | 783 CHECK_USES(last, NONE); |
784 } | 784 } |
785 } | 785 } |
786 | 786 |
787 } // namespace compiler | 787 } // namespace compiler |
788 } // namespace internal | 788 } // namespace internal |
789 } // namespace v8 | 789 } // namespace v8 |
OLD | NEW |