|
4485 | 4485 | ) |
4486 | 4486 | ) |
4487 | 4487 | ) |
| 4488 | + |
| 4489 | +;; Pops require fixups. |
| 4490 | +(module |
| 4491 | + (type $struct (struct (field (mut i32)))) |
| 4492 | + |
| 4493 | + (type $array (array (mut i32))) |
| 4494 | + |
| 4495 | + ;; CHECK: (type $0 (func)) |
| 4496 | + |
| 4497 | + ;; CHECK: (type $1 (func (param i32))) |
| 4498 | + |
| 4499 | + ;; CHECK: (type $2 (struct (field (mut i32)) (field (mut i32)) (field (mut i32)))) |
| 4500 | + |
| 4501 | + ;; CHECK: (tag $tag (param i32)) |
| 4502 | + (tag $tag (param i32)) |
| 4503 | + |
| 4504 | + ;; CHECK: (func $struct-with-pop (type $0) |
| 4505 | + ;; CHECK-NEXT: (local $0 i32) |
| 4506 | + ;; CHECK-NEXT: (local $1 i32) |
| 4507 | + ;; CHECK-NEXT: (local $2 i32) |
| 4508 | + ;; CHECK-NEXT: (try |
| 4509 | + ;; CHECK-NEXT: (do |
| 4510 | + ;; CHECK-NEXT: (nop) |
| 4511 | + ;; CHECK-NEXT: ) |
| 4512 | + ;; CHECK-NEXT: (catch $tag |
| 4513 | + ;; CHECK-NEXT: (local.set $2 |
| 4514 | + ;; CHECK-NEXT: (pop i32) |
| 4515 | + ;; CHECK-NEXT: ) |
| 4516 | + ;; CHECK-NEXT: (drop |
| 4517 | + ;; CHECK-NEXT: (block (result nullref) |
| 4518 | + ;; CHECK-NEXT: (local.set $1 |
| 4519 | + ;; CHECK-NEXT: (local.get $2) |
| 4520 | + ;; CHECK-NEXT: ) |
| 4521 | + ;; CHECK-NEXT: (local.set $0 |
| 4522 | + ;; CHECK-NEXT: (local.get $1) |
| 4523 | + ;; CHECK-NEXT: ) |
| 4524 | + ;; CHECK-NEXT: (ref.null none) |
| 4525 | + ;; CHECK-NEXT: ) |
| 4526 | + ;; CHECK-NEXT: ) |
| 4527 | + ;; CHECK-NEXT: ) |
| 4528 | + ;; CHECK-NEXT: ) |
| 4529 | + ;; CHECK-NEXT: ) |
| 4530 | + (func $struct-with-pop |
| 4531 | + (try |
| 4532 | + (do |
| 4533 | + (nop) |
| 4534 | + ) |
| 4535 | + (catch $tag |
| 4536 | + (drop |
| 4537 | + ;; We create a block when we replace the struct with locals, which the |
| 4538 | + ;; pop must be moved out of. |
| 4539 | + (struct.new $struct |
| 4540 | + (pop i32) |
| 4541 | + ) |
| 4542 | + ) |
| 4543 | + ) |
| 4544 | + ) |
| 4545 | + ) |
| 4546 | + |
| 4547 | + ;; CHECK: (func $array-with-pop (type $0) |
| 4548 | + ;; CHECK-NEXT: (local $0 i32) |
| 4549 | + ;; CHECK-NEXT: (local $1 i32) |
| 4550 | + ;; CHECK-NEXT: (local $2 i32) |
| 4551 | + ;; CHECK-NEXT: (local $3 i32) |
| 4552 | + ;; CHECK-NEXT: (local $4 i32) |
| 4553 | + ;; CHECK-NEXT: (local $5 i32) |
| 4554 | + ;; CHECK-NEXT: (local $6 i32) |
| 4555 | + ;; CHECK-NEXT: (local $7 i32) |
| 4556 | + ;; CHECK-NEXT: (try |
| 4557 | + ;; CHECK-NEXT: (do |
| 4558 | + ;; CHECK-NEXT: (nop) |
| 4559 | + ;; CHECK-NEXT: ) |
| 4560 | + ;; CHECK-NEXT: (catch $tag |
| 4561 | + ;; CHECK-NEXT: (local.set $7 |
| 4562 | + ;; CHECK-NEXT: (pop i32) |
| 4563 | + ;; CHECK-NEXT: ) |
| 4564 | + ;; CHECK-NEXT: (drop |
| 4565 | + ;; CHECK-NEXT: (block (result (ref null $2)) |
| 4566 | + ;; CHECK-NEXT: (local.set $0 |
| 4567 | + ;; CHECK-NEXT: (local.get $7) |
| 4568 | + ;; CHECK-NEXT: ) |
| 4569 | + ;; CHECK-NEXT: (block (result nullref) |
| 4570 | + ;; CHECK-NEXT: (local.set $4 |
| 4571 | + ;; CHECK-NEXT: (local.get $0) |
| 4572 | + ;; CHECK-NEXT: ) |
| 4573 | + ;; CHECK-NEXT: (local.set $5 |
| 4574 | + ;; CHECK-NEXT: (local.get $0) |
| 4575 | + ;; CHECK-NEXT: ) |
| 4576 | + ;; CHECK-NEXT: (local.set $6 |
| 4577 | + ;; CHECK-NEXT: (local.get $0) |
| 4578 | + ;; CHECK-NEXT: ) |
| 4579 | + ;; CHECK-NEXT: (local.set $1 |
| 4580 | + ;; CHECK-NEXT: (local.get $4) |
| 4581 | + ;; CHECK-NEXT: ) |
| 4582 | + ;; CHECK-NEXT: (local.set $2 |
| 4583 | + ;; CHECK-NEXT: (local.get $5) |
| 4584 | + ;; CHECK-NEXT: ) |
| 4585 | + ;; CHECK-NEXT: (local.set $3 |
| 4586 | + ;; CHECK-NEXT: (local.get $6) |
| 4587 | + ;; CHECK-NEXT: ) |
| 4588 | + ;; CHECK-NEXT: (ref.null none) |
| 4589 | + ;; CHECK-NEXT: ) |
| 4590 | + ;; CHECK-NEXT: ) |
| 4591 | + ;; CHECK-NEXT: ) |
| 4592 | + ;; CHECK-NEXT: ) |
| 4593 | + ;; CHECK-NEXT: ) |
| 4594 | + ;; CHECK-NEXT: ) |
| 4595 | + (func $array-with-pop |
| 4596 | + (try |
| 4597 | + (do |
| 4598 | + (nop) |
| 4599 | + ) |
| 4600 | + (catch $tag |
| 4601 | + (drop |
| 4602 | + ;; As above, but with an array |
| 4603 | + (array.new $array |
| 4604 | + (pop i32) |
| 4605 | + (i32.const 3) |
| 4606 | + ) |
| 4607 | + ) |
| 4608 | + ) |
| 4609 | + ) |
| 4610 | + ) |
| 4611 | +) |
0 commit comments