| 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 |