|
5 | 5 |
|
6 | 6 | (module
|
7 | 7 | ;; Regression test in which we need to calculate a proper LUB.
|
8 |
| - ;; CHECK: (func $selectify-fresh-lub (type $4) (param $x i32) (result anyref) |
| 8 | + ;; CHECK: (func $selectify-fresh-lub (type $5) (param $x i32) (result anyref) |
9 | 9 | ;; CHECK-NEXT: (select (result i31ref)
|
10 | 10 | ;; CHECK-NEXT: (ref.null none)
|
11 | 11 | ;; CHECK-NEXT: (ref.i31
|
|
340 | 340 | )
|
341 | 341 | )
|
342 | 342 |
|
| 343 | + ;; CHECK: (func $restructure-br_if-constant-branch-1 (type $3) (param $x i32) |
| 344 | + ;; CHECK-NEXT: (local $1 i32) |
| 345 | + ;; CHECK-NEXT: (drop |
| 346 | + ;; CHECK-NEXT: (block $x (result i32) |
| 347 | + ;; CHECK-NEXT: (drop |
| 348 | + ;; CHECK-NEXT: (block |
| 349 | + ;; CHECK-NEXT: (local.set $1 |
| 350 | + ;; CHECK-NEXT: (local.tee $x |
| 351 | + ;; CHECK-NEXT: (i32.const 42) |
| 352 | + ;; CHECK-NEXT: ) |
| 353 | + ;; CHECK-NEXT: ) |
| 354 | + ;; CHECK-NEXT: (br $x |
| 355 | + ;; CHECK-NEXT: (i32.const 10) |
| 356 | + ;; CHECK-NEXT: ) |
| 357 | + ;; CHECK-NEXT: ) |
| 358 | + ;; CHECK-NEXT: ) |
| 359 | + ;; CHECK-NEXT: (i32.const 20) |
| 360 | + ;; CHECK-NEXT: ) |
| 361 | + ;; CHECK-NEXT: ) |
| 362 | + ;; CHECK-NEXT: (drop |
| 363 | + ;; CHECK-NEXT: (block $x0 (result i32) |
| 364 | + ;; CHECK-NEXT: (drop |
| 365 | + ;; CHECK-NEXT: (block (result i32) |
| 366 | + ;; CHECK-NEXT: (i32.const 10) |
| 367 | + ;; CHECK-NEXT: ) |
| 368 | + ;; CHECK-NEXT: ) |
| 369 | + ;; CHECK-NEXT: (i32.const 20) |
| 370 | + ;; CHECK-NEXT: ) |
| 371 | + ;; CHECK-NEXT: ) |
| 372 | + ;; CHECK-NEXT: ) |
| 373 | + (func $restructure-br_if-constant-branch-1 (param $x i32) |
| 374 | + ;; We can see a nonzero constant falls through the tee, so this br always happens. |
| 375 | + (drop |
| 376 | + (block $x (result i32) |
| 377 | + (drop |
| 378 | + (br_if $x |
| 379 | + (i32.const 10) |
| 380 | + (local.tee $x |
| 381 | + (i32.const 42) |
| 382 | + ) |
| 383 | + ) |
| 384 | + ) |
| 385 | + (i32.const 20) |
| 386 | + ) |
| 387 | + ) |
| 388 | + ;; We can see the zero condition, so just let the control flow fall through. |
| 389 | + (drop |
| 390 | + (block $x (result i32) |
| 391 | + (drop |
| 392 | + (br_if $x |
| 393 | + (i32.const 10) |
| 394 | + (i32.const 0) |
| 395 | + ) |
| 396 | + ) |
| 397 | + (i32.const 20) |
| 398 | + ) |
| 399 | + ) |
| 400 | + ) |
| 401 | + ;; CHECK: (func $restructure-br_if-constant-branch-2 (type $3) (param $x i32) |
| 402 | + ;; CHECK-NEXT: (local $1 i32) |
| 403 | + ;; CHECK-NEXT: (local $2 i32) |
| 404 | + ;; CHECK-NEXT: (block $x |
| 405 | + ;; CHECK-NEXT: (block |
| 406 | + ;; CHECK-NEXT: (local.set $1 |
| 407 | + ;; CHECK-NEXT: (local.tee $x |
| 408 | + ;; CHECK-NEXT: (i32.const 1) |
| 409 | + ;; CHECK-NEXT: ) |
| 410 | + ;; CHECK-NEXT: ) |
| 411 | + ;; CHECK-NEXT: (br $x) |
| 412 | + ;; CHECK-NEXT: ) |
| 413 | + ;; CHECK-NEXT: ) |
| 414 | + ;; CHECK-NEXT: (block $x0 |
| 415 | + ;; CHECK-NEXT: (block |
| 416 | + ;; CHECK-NEXT: (local.set $2 |
| 417 | + ;; CHECK-NEXT: (local.tee $x |
| 418 | + ;; CHECK-NEXT: (i32.const 0) |
| 419 | + ;; CHECK-NEXT: ) |
| 420 | + ;; CHECK-NEXT: ) |
| 421 | + ;; CHECK-NEXT: ) |
| 422 | + ;; CHECK-NEXT: ) |
| 423 | + ;; CHECK-NEXT: ) |
| 424 | + (func $restructure-br_if-constant-branch-2 (param $x i32) |
| 425 | + ;; as before, but now there is no value. |
| 426 | + (block $x |
| 427 | + (br_if $x |
| 428 | + (local.tee $x |
| 429 | + (i32.const 1) |
| 430 | + ) |
| 431 | + ) |
| 432 | + ) |
| 433 | + (block $x |
| 434 | + (br_if $x |
| 435 | + (local.tee $x |
| 436 | + (i32.const 0) |
| 437 | + ) |
| 438 | + ) |
| 439 | + ) |
| 440 | + ) |
| 441 | + |
| 442 | + |
343 | 443 | ;; CHECK: (func $restructure-br_if-value-redundant-in-block-tail-1 (type $2) (result i32)
|
344 | 444 | ;; CHECK-NEXT: (block $parent (result i32)
|
345 | 445 | ;; CHECK-NEXT: (call $nothing)
|
|
473 | 573 | ;; CHECK-NEXT: (br_if $block
|
474 | 574 | ;; CHECK-NEXT: (local.get $temp)
|
475 | 575 | ;; CHECK-NEXT: (local.tee $temp
|
476 |
| - ;; CHECK-NEXT: (i32.const 1) |
| 576 | + ;; CHECK-NEXT: (local.get $temp) |
477 | 577 | ;; CHECK-NEXT: )
|
478 | 578 | ;; CHECK-NEXT: )
|
479 | 579 | ;; CHECK-NEXT: )
|
|
489 | 589 | (br_if $block
|
490 | 590 | (local.get $temp)
|
491 | 591 | (local.tee $temp
|
492 |
| - (i32.const 1) |
| 592 | + (local.get $temp) |
493 | 593 | )
|
494 | 594 | )
|
495 | 595 | )
|
|
498 | 598 | )
|
499 | 599 |
|
500 | 600 | ;; CHECK: (func $restructure-select-no-multivalue (type $1)
|
| 601 | + ;; CHECK-NEXT: (local $x i32) |
501 | 602 | ;; CHECK-NEXT: (tuple.drop 2
|
502 |
| - ;; CHECK-NEXT: (block $block (type $3) (result i32 i32) |
| 603 | + ;; CHECK-NEXT: (block $block (type $4) (result i32 i32) |
503 | 604 | ;; CHECK-NEXT: (tuple.drop 2
|
504 | 605 | ;; CHECK-NEXT: (br_if $block
|
505 | 606 | ;; CHECK-NEXT: (tuple.make 2
|
|
508 | 609 | ;; CHECK-NEXT: (i32.const 2)
|
509 | 610 | ;; CHECK-NEXT: )
|
510 | 611 | ;; CHECK-NEXT: )
|
511 |
| - ;; CHECK-NEXT: (i32.const 3) |
| 612 | + ;; CHECK-NEXT: (local.get $x) |
512 | 613 | ;; CHECK-NEXT: )
|
513 | 614 | ;; CHECK-NEXT: )
|
514 | 615 | ;; CHECK-NEXT: (tuple.make 2
|
|
519 | 620 | ;; CHECK-NEXT: )
|
520 | 621 | ;; CHECK-NEXT: )
|
521 | 622 | (func $restructure-select-no-multivalue
|
| 623 | + (local $x i32) |
522 | 624 | (tuple.drop 2
|
523 | 625 | (block $block (result i32 i32)
|
524 | 626 | (tuple.drop 2
|
|
533 | 635 | (i32.const 2)
|
534 | 636 | )
|
535 | 637 | )
|
536 |
| - (i32.const 3) |
| 638 | + (local.get $x) |
537 | 639 | )
|
538 | 640 | )
|
539 | 641 | (tuple.make 2
|
|
0 commit comments