|
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 $3) (param $x i32) (result anyref) |
| 8 | + ;; CHECK: (func $selectify-fresh-lub (type $4) (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
|
|
30 | 30 | )
|
31 | 31 | )
|
32 | 32 |
|
33 |
| - ;; CHECK: (func $selectify-simple (type $1) (param $0 i32) (result i32) |
| 33 | + ;; CHECK: (func $selectify-simple (type $0) (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 $1) (param $x i32) (result i32) |
| 76 | + ;; CHECK: (func $restructure-br_if (type $0) (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 $0) |
| 107 | + ;; CHECK: (func $nothing (type $1) |
108 | 108 | ;; CHECK-NEXT: )
|
109 | 109 | (func $nothing)
|
110 | 110 |
|
111 | 111 |
|
112 |
| - ;; CHECK: (func $restructure-br_if-condition-reorderable (type $1) (param $x i32) (result i32) |
| 112 | + ;; CHECK: (func $restructure-br_if-condition-reorderable (type $0) (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 $1) (param $x i32) (result i32) |
| 149 | + ;; CHECK: (func $restructure-br_if-value-effectful (type $0) (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 $1) (param $x i32) (result i32) |
| 191 | + ;; CHECK: (func $restructure-br_if-value-effectful-corner-case-1 (type $0) (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
|
|
226 | 226 | )
|
227 | 227 | )
|
228 | 228 |
|
229 |
| - ;; CHECK: (func $get-i32 (type $4) (result i32) |
| 229 | + ;; CHECK: (func $get-i32 (type $2) (result i32) |
230 | 230 | ;; CHECK-NEXT: (i32.const 400)
|
231 | 231 | ;; CHECK-NEXT: )
|
232 | 232 | (func $get-i32 (result i32)
|
233 | 233 | (i32.const 400)
|
234 | 234 | )
|
235 | 235 |
|
236 |
| - ;; CHECK: (func $restructure-br_if-value-effectful-corner-case-2 (type $1) (param $x i32) (result i32) |
| 236 | + ;; CHECK: (func $restructure-br_if-value-effectful-corner-case-2 (type $0) (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 $1) (param $x i32) (result i32) |
| 275 | + ;; CHECK: (func $restructure-br_if-value-effectful-corner-case-3 (type $0) (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 $1) (param $x i32) (result i32) |
| 308 | + ;; CHECK: (func $restructure-br_if-value-effectful-corner-case-4 (type $0) (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 $0) |
| 343 | + ;; CHECK: (func $restructure-br_if-value-redundant-in-block-tail-1 (type $2) (result i32) |
| 344 | + ;; CHECK-NEXT: (block $parent (result i32) |
| 345 | + ;; CHECK-NEXT: (call $nothing) |
| 346 | + ;; CHECK-NEXT: (drop |
| 347 | + ;; CHECK-NEXT: (call $get-i32) |
| 348 | + ;; CHECK-NEXT: ) |
| 349 | + ;; CHECK-NEXT: (i32.const 1) |
| 350 | + ;; CHECK-NEXT: ) |
| 351 | + ;; CHECK-NEXT: ) |
| 352 | + (func $restructure-br_if-value-redundant-in-block-tail-1 (result i32) |
| 353 | + ;; The br_if's value is equal to the value right after it, so we can remove it. |
| 354 | + (block $parent (result i32) |
| 355 | + (call $nothing) |
| 356 | + (drop |
| 357 | + (br_if $parent |
| 358 | + (i32.const 1) |
| 359 | + (call $get-i32) |
| 360 | + ) |
| 361 | + ) |
| 362 | + (i32.const 1) |
| 363 | + ) |
| 364 | + ) |
| 365 | + |
| 366 | + ;; CHECK: (func $restructure-br_if-value-redundant-in-block-tail-2 (type $2) (result i32) |
| 367 | + ;; CHECK-NEXT: (block $parent (result i32) |
| 368 | + ;; CHECK-NEXT: (call $nothing) |
| 369 | + ;; CHECK-NEXT: (drop |
| 370 | + ;; CHECK-NEXT: (br_if $parent |
| 371 | + ;; CHECK-NEXT: (i32.const 2) |
| 372 | + ;; CHECK-NEXT: (call $get-i32) |
| 373 | + ;; CHECK-NEXT: ) |
| 374 | + ;; CHECK-NEXT: ) |
| 375 | + ;; CHECK-NEXT: (i32.const 1) |
| 376 | + ;; CHECK-NEXT: ) |
| 377 | + ;; CHECK-NEXT: ) |
| 378 | + (func $restructure-br_if-value-redundant-in-block-tail-2 (result i32) |
| 379 | + ;; As above, but now the value is different, so we do not optimize |
| 380 | + (block $parent (result i32) |
| 381 | + (call $nothing) |
| 382 | + (drop |
| 383 | + (br_if $parent |
| 384 | + (i32.const 2) |
| 385 | + (call $get-i32) |
| 386 | + ) |
| 387 | + ) |
| 388 | + (i32.const 1) |
| 389 | + ) |
| 390 | + ) |
| 391 | + |
| 392 | + ;; CHECK: (func $restructure-br_if-value-redundant-in-block-tail-3 (type $0) (param $x i32) (result i32) |
| 393 | + ;; CHECK-NEXT: (block $parent (result i32) |
| 394 | + ;; CHECK-NEXT: (call $nothing) |
| 395 | + ;; CHECK-NEXT: (drop |
| 396 | + ;; CHECK-NEXT: (br_if $parent |
| 397 | + ;; CHECK-NEXT: (call $get-i32) |
| 398 | + ;; CHECK-NEXT: (call $get-i32) |
| 399 | + ;; CHECK-NEXT: ) |
| 400 | + ;; CHECK-NEXT: ) |
| 401 | + ;; CHECK-NEXT: (call $get-i32) |
| 402 | + ;; CHECK-NEXT: ) |
| 403 | + ;; CHECK-NEXT: ) |
| 404 | + (func $restructure-br_if-value-redundant-in-block-tail-3 (param $x i32) (result i32) |
| 405 | + ;; As above, but now the value has effects, so we do not optimize |
| 406 | + (block $parent (result i32) |
| 407 | + (call $nothing) |
| 408 | + (drop |
| 409 | + (br_if $parent |
| 410 | + (call $get-i32) |
| 411 | + (call $get-i32) |
| 412 | + ) |
| 413 | + ) |
| 414 | + (call $get-i32) |
| 415 | + ) |
| 416 | + ) |
| 417 | + |
| 418 | + ;; CHECK: (func $restructure-br_if-value-redundant-in-block-tail-4 (type $2) (result i32) |
| 419 | + ;; CHECK-NEXT: (block $outer (result i32) |
| 420 | + ;; CHECK-NEXT: (block $inner (result i32) |
| 421 | + ;; CHECK-NEXT: (call $nothing) |
| 422 | + ;; CHECK-NEXT: (drop |
| 423 | + ;; CHECK-NEXT: (br_if $outer |
| 424 | + ;; CHECK-NEXT: (i32.const 1) |
| 425 | + ;; CHECK-NEXT: (call $get-i32) |
| 426 | + ;; CHECK-NEXT: ) |
| 427 | + ;; CHECK-NEXT: ) |
| 428 | + ;; CHECK-NEXT: (i32.const 1) |
| 429 | + ;; CHECK-NEXT: ) |
| 430 | + ;; CHECK-NEXT: ) |
| 431 | + ;; CHECK-NEXT: ) |
| 432 | + (func $restructure-br_if-value-redundant-in-block-tail-4 (result i32) |
| 433 | + ;; As above, but the br_if targets another block, so we do not optimize. |
| 434 | + (block $outer (result i32) |
| 435 | + (block $inner (result i32) |
| 436 | + (call $nothing) |
| 437 | + (drop |
| 438 | + (br_if $outer |
| 439 | + (i32.const 1) |
| 440 | + (call $get-i32) |
| 441 | + ) |
| 442 | + ) |
| 443 | + (i32.const 1) |
| 444 | + ) |
| 445 | + ) |
| 446 | + ) |
| 447 | + |
| 448 | + ;; CHECK: (func $restructure-br_if-value-redundant-in-block-tail-5 (type $2) (result i32) |
| 449 | + ;; CHECK-NEXT: (block $parent (result i32) |
| 450 | + ;; CHECK-NEXT: (call $nothing) |
| 451 | + ;; CHECK-NEXT: (br $parent |
| 452 | + ;; CHECK-NEXT: (i32.const 1) |
| 453 | + ;; CHECK-NEXT: ) |
| 454 | + ;; CHECK-NEXT: (i32.const 1) |
| 455 | + ;; CHECK-NEXT: ) |
| 456 | + ;; CHECK-NEXT: ) |
| 457 | + (func $restructure-br_if-value-redundant-in-block-tail-5 (result i32) |
| 458 | + ;; As above, but the br lacks a condition. We do not bother to optimize |
| 459 | + ;; the dead code after it, but also should not error here. |
| 460 | + (block $parent (result i32) |
| 461 | + (call $nothing) |
| 462 | + (br $parent |
| 463 | + (i32.const 1) |
| 464 | + ) |
| 465 | + (i32.const 1) |
| 466 | + ) |
| 467 | + ) |
| 468 | + |
| 469 | + ;; CHECK: (func $restructure-select-no-multivalue (type $1) |
344 | 470 | ;; CHECK-NEXT: (tuple.drop 2
|
345 |
| - ;; CHECK-NEXT: (block $block (type $2) (result i32 i32) |
| 471 | + ;; CHECK-NEXT: (block $block (type $3) (result i32 i32) |
346 | 472 | ;; CHECK-NEXT: (tuple.drop 2
|
347 | 473 | ;; CHECK-NEXT: (br_if $block
|
348 | 474 | ;; CHECK-NEXT: (tuple.make 2
|
|
387 | 513 | )
|
388 | 514 | )
|
389 | 515 |
|
390 |
| - ;; CHECK: (func $if-of-if (type $0) |
| 516 | + ;; CHECK: (func $if-of-if (type $1) |
391 | 517 | ;; CHECK-NEXT: (local $x i32)
|
392 | 518 | ;; CHECK-NEXT: (if
|
393 | 519 | ;; CHECK-NEXT: (select
|
|
421 | 547 | )
|
422 | 548 | )
|
423 | 549 |
|
424 |
| - ;; CHECK: (func $if-of-if-but-side-effects (type $0) |
| 550 | + ;; CHECK: (func $if-of-if-but-side-effects (type $1) |
425 | 551 | ;; CHECK-NEXT: (local $x i32)
|
426 | 552 | ;; CHECK-NEXT: (if
|
427 | 553 | ;; CHECK-NEXT: (local.tee $x
|
|
460 | 586 | )
|
461 | 587 | )
|
462 | 588 |
|
463 |
| - ;; CHECK: (func $if-of-if-but-too-costly (type $0) |
| 589 | + ;; CHECK: (func $if-of-if-but-too-costly (type $1) |
464 | 590 | ;; CHECK-NEXT: (local $x i32)
|
465 | 591 | ;; CHECK-NEXT: (if
|
466 | 592 | ;; CHECK-NEXT: (local.tee $x
|
|
515 | 641 | )
|
516 | 642 | )
|
517 | 643 |
|
518 |
| - ;; CHECK: (func $if-of-if-but-inner-else (type $0) |
| 644 | + ;; CHECK: (func $if-of-if-but-inner-else (type $1) |
519 | 645 | ;; CHECK-NEXT: (local $x i32)
|
520 | 646 | ;; CHECK-NEXT: (if
|
521 | 647 | ;; CHECK-NEXT: (local.tee $x
|
|
555 | 681 | )
|
556 | 682 | )
|
557 | 683 |
|
558 |
| - ;; CHECK: (func $if-of-if-but-outer-else (type $0) |
| 684 | + ;; CHECK: (func $if-of-if-but-outer-else (type $1) |
559 | 685 | ;; CHECK-NEXT: (local $x i32)
|
560 | 686 | ;; CHECK-NEXT: (if
|
561 | 687 | ;; CHECK-NEXT: (local.tee $x
|
|
595 | 721 | )
|
596 | 722 | )
|
597 | 723 |
|
598 |
| - ;; CHECK: (func $unreachable-if (type $0) |
| 724 | + ;; CHECK: (func $unreachable-if (type $1) |
599 | 725 | ;; CHECK-NEXT: (block $block
|
600 | 726 | ;; CHECK-NEXT: (if (result i32)
|
601 | 727 | ;; CHECK-NEXT: (unreachable)
|
|
625 | 751 | )
|
626 | 752 | )
|
627 | 753 |
|
628 |
| - ;; CHECK: (func $loop-with-unreachable-if (type $0) |
| 754 | + ;; CHECK: (func $loop-with-unreachable-if (type $1) |
629 | 755 | ;; CHECK-NEXT: (loop $label
|
630 | 756 | ;; CHECK-NEXT: (if (result i32)
|
631 | 757 | ;; CHECK-NEXT: (unreachable)
|
|
0 commit comments