|
30 | 30 | ) |
31 | 31 | ) |
32 | 32 |
|
33 | | - ;; CHECK: (func $selectify-simple (type $0) (param $0 i32) (result i32) |
| 33 | + ;; CHECK: (func $selectify-simple (type $1) (param $0 i32) (result i32) |
34 | 34 | ;; CHECK-NEXT: (select |
35 | 35 | ;; CHECK-NEXT: (i32.const 1) |
36 | 36 | ;; CHECK-NEXT: (i32.lt_u |
|
73 | 73 | ) |
74 | 74 | ) |
75 | 75 |
|
76 | | - ;; CHECK: (func $restructure-br_if (type $0) (param $x i32) (result i32) |
| 76 | + ;; CHECK: (func $restructure-br_if (type $1) (param $x i32) (result i32) |
77 | 77 | ;; CHECK-NEXT: (if (result i32) |
78 | 78 | ;; CHECK-NEXT: (local.get $x) |
79 | 79 | ;; CHECK-NEXT: (then |
|
104 | 104 | ) |
105 | 105 | ) |
106 | 106 |
|
107 | | - ;; CHECK: (func $nothing (type $1) |
| 107 | + ;; CHECK: (func $nothing (type $0) |
108 | 108 | ;; CHECK-NEXT: ) |
109 | 109 | (func $nothing) |
110 | 110 |
|
111 | 111 |
|
112 | | - ;; CHECK: (func $restructure-br_if-condition-reorderable (type $0) (param $x i32) (result i32) |
| 112 | + ;; CHECK: (func $restructure-br_if-condition-reorderable (type $1) (param $x i32) (result i32) |
113 | 113 | ;; CHECK-NEXT: (if (result i32) |
114 | 114 | ;; CHECK-NEXT: (block (result i32) |
115 | 115 | ;; CHECK-NEXT: (call $nothing) |
|
146 | 146 | ) |
147 | 147 | ) |
148 | 148 |
|
149 | | - ;; CHECK: (func $restructure-br_if-value-effectful (type $0) (param $x i32) (result i32) |
| 149 | + ;; CHECK: (func $restructure-br_if-value-effectful (type $1) (param $x i32) (result i32) |
150 | 150 | ;; CHECK-NEXT: (select |
151 | 151 | ;; CHECK-NEXT: (block (result i32) |
152 | 152 | ;; CHECK-NEXT: (call $nothing) |
|
188 | 188 | ) |
189 | 189 | ) |
190 | 190 |
|
191 | | - ;; CHECK: (func $restructure-br_if-value-effectful-corner-case-1 (type $0) (param $x i32) (result i32) |
| 191 | + ;; CHECK: (func $restructure-br_if-value-effectful-corner-case-1 (type $1) (param $x i32) (result i32) |
192 | 192 | ;; CHECK-NEXT: (block $x (result i32) |
193 | 193 | ;; CHECK-NEXT: (drop |
194 | 194 | ;; CHECK-NEXT: (br_if $x |
|
233 | 233 | (i32.const 400) |
234 | 234 | ) |
235 | 235 |
|
236 | | - ;; CHECK: (func $restructure-br_if-value-effectful-corner-case-2 (type $0) (param $x i32) (result i32) |
| 236 | + ;; CHECK: (func $restructure-br_if-value-effectful-corner-case-2 (type $1) (param $x i32) (result i32) |
237 | 237 | ;; CHECK-NEXT: (block $x (result i32) |
238 | 238 | ;; CHECK-NEXT: (drop |
239 | 239 | ;; CHECK-NEXT: (br_if $x |
|
272 | 272 | (call $get-i32) |
273 | 273 | ) |
274 | 274 | ) |
275 | | - ;; CHECK: (func $restructure-br_if-value-effectful-corner-case-3 (type $0) (param $x i32) (result i32) |
| 275 | + ;; CHECK: (func $restructure-br_if-value-effectful-corner-case-3 (type $1) (param $x i32) (result i32) |
276 | 276 | ;; CHECK-NEXT: (block $x (result i32) |
277 | 277 | ;; CHECK-NEXT: (drop |
278 | 278 | ;; CHECK-NEXT: (br_if $x |
|
305 | 305 | ) |
306 | 306 | ) |
307 | 307 |
|
308 | | - ;; CHECK: (func $restructure-br_if-value-effectful-corner-case-4 (type $0) (param $x i32) (result i32) |
| 308 | + ;; CHECK: (func $restructure-br_if-value-effectful-corner-case-4 (type $1) (param $x i32) (result i32) |
309 | 309 | ;; CHECK-NEXT: (block $x (result i32) |
310 | 310 | ;; CHECK-NEXT: (drop |
311 | 311 | ;; CHECK-NEXT: (br_if $x |
|
340 | 340 | ) |
341 | 341 | ) |
342 | 342 |
|
343 | | - ;; CHECK: (func $restructure-select-no-multivalue (type $1) |
| 343 | + ;; CHECK: (func $restructure-select-no-multivalue (type $0) |
344 | 344 | ;; CHECK-NEXT: (tuple.drop 2 |
345 | 345 | ;; CHECK-NEXT: (block $block (type $2) (result i32 i32) |
346 | 346 | ;; CHECK-NEXT: (tuple.drop 2 |
|
387 | 387 | ) |
388 | 388 | ) |
389 | 389 |
|
390 | | - ;; CHECK: (func $if-of-if (type $1) |
| 390 | + ;; CHECK: (func $if-of-if (type $0) |
391 | 391 | ;; CHECK-NEXT: (local $x i32) |
392 | 392 | ;; CHECK-NEXT: (if |
393 | 393 | ;; CHECK-NEXT: (select |
|
421 | 421 | ) |
422 | 422 | ) |
423 | 423 |
|
424 | | - ;; CHECK: (func $if-of-if-but-side-effects (type $1) |
| 424 | + ;; CHECK: (func $if-of-if-but-side-effects (type $0) |
425 | 425 | ;; CHECK-NEXT: (local $x i32) |
426 | 426 | ;; CHECK-NEXT: (if |
427 | 427 | ;; CHECK-NEXT: (local.tee $x |
|
460 | 460 | ) |
461 | 461 | ) |
462 | 462 |
|
463 | | - ;; CHECK: (func $if-of-if-but-too-costly (type $1) |
| 463 | + ;; CHECK: (func $if-of-if-but-too-costly (type $0) |
464 | 464 | ;; CHECK-NEXT: (local $x i32) |
465 | 465 | ;; CHECK-NEXT: (if |
466 | 466 | ;; CHECK-NEXT: (local.tee $x |
|
515 | 515 | ) |
516 | 516 | ) |
517 | 517 |
|
518 | | - ;; CHECK: (func $if-of-if-but-inner-else (type $1) |
| 518 | + ;; CHECK: (func $if-of-if-but-inner-else (type $0) |
519 | 519 | ;; CHECK-NEXT: (local $x i32) |
520 | 520 | ;; CHECK-NEXT: (if |
521 | 521 | ;; CHECK-NEXT: (local.tee $x |
|
555 | 555 | ) |
556 | 556 | ) |
557 | 557 |
|
558 | | - ;; CHECK: (func $if-of-if-but-outer-else (type $1) |
| 558 | + ;; CHECK: (func $if-of-if-but-outer-else (type $0) |
559 | 559 | ;; CHECK-NEXT: (local $x i32) |
560 | 560 | ;; CHECK-NEXT: (if |
561 | 561 | ;; CHECK-NEXT: (local.tee $x |
|
595 | 595 | ) |
596 | 596 | ) |
597 | 597 |
|
598 | | - ;; CHECK: (func $unreachable-if (type $1) |
| 598 | + ;; CHECK: (func $unreachable-if (type $0) |
599 | 599 | ;; CHECK-NEXT: (block $block |
600 | 600 | ;; CHECK-NEXT: (if (result i32) |
601 | 601 | ;; CHECK-NEXT: (unreachable) |
|
624 | 624 | ) |
625 | 625 | ) |
626 | 626 | ) |
| 627 | + |
| 628 | + ;; CHECK: (func $loop-with-unreachable-if (type $0) |
| 629 | + ;; CHECK-NEXT: (loop $label |
| 630 | + ;; CHECK-NEXT: (if (result i32) |
| 631 | + ;; CHECK-NEXT: (unreachable) |
| 632 | + ;; CHECK-NEXT: (then |
| 633 | + ;; CHECK-NEXT: (unreachable) |
| 634 | + ;; CHECK-NEXT: ) |
| 635 | + ;; CHECK-NEXT: (else |
| 636 | + ;; CHECK-NEXT: (i32.const 0) |
| 637 | + ;; CHECK-NEXT: ) |
| 638 | + ;; CHECK-NEXT: ) |
| 639 | + ;; CHECK-NEXT: (br $label) |
| 640 | + ;; CHECK-NEXT: ) |
| 641 | + ;; CHECK-NEXT: ) |
| 642 | + (func $loop-with-unreachable-if |
| 643 | + ;; We normally move brs right after an if into one of the if arms, when |
| 644 | + ;; possible. That is almost possible here, but the if condition is |
| 645 | + ;; unreachable, which allows one of the arms to have a concrete type. It is |
| 646 | + ;; invalid to append to such an arm, so we should do nothing (leaving this |
| 647 | + ;; for DCE). |
| 648 | + (loop $label |
| 649 | + (if (result i32) |
| 650 | + (unreachable) |
| 651 | + (then |
| 652 | + (unreachable) |
| 653 | + ) |
| 654 | + (else |
| 655 | + (i32.const 0) |
| 656 | + ) |
| 657 | + ) |
| 658 | + (br $label) |
| 659 | + ) |
| 660 | + ) |
627 | 661 | ) |
0 commit comments