| ;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. |
| ;; RUN: wasm-opt %s -all --precompute -S -o - | filecheck %s |
| |
| (module |
| |
| ;; CHECK: (type $shared-func (shared (func (result (ref null (shared func)))))) |
| (type $shared-func (shared (func (result (ref null (shared func)))))) |
| |
| ;; CHECK: (type $func (func (result funcref))) |
| (type $func (func (result funcref))) |
| |
| ;; CHECK: (type $2 (func (result (ref $shared-func)))) |
| |
| ;; CHECK: (elem declare func $test $test-shared) |
| |
| ;; CHECK: (func $test (type $func) (result funcref) |
| ;; CHECK-NEXT: (return |
| ;; CHECK-NEXT: (ref.func $test) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $test (type $func) (result funcref) |
| (block |
| (return |
| (ref.func $test) |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $test-shared (type $shared-func) (result (ref null (shared func))) |
| ;; CHECK-NEXT: (return |
| ;; CHECK-NEXT: (ref.func $test-shared) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $test-shared (type $shared-func) |
| (block |
| (return |
| (ref.func $test-shared) |
| ) |
| ) |
| ) |
| |
| ;; CHECK: (func $precompute-nested-brs (type $2) (result (ref $shared-func)) |
| ;; CHECK-NEXT: (ref.func $test-shared) |
| ;; CHECK-NEXT: ) |
| (func $precompute-nested-brs (result (ref $shared-func)) |
| ;; We have two nested brs here, and we can precompute it all. While doing so |
| ;; we must not get confused between the targets and values: one sends a |
| ;; shared func, the other a normal func, so the types are different, and any |
| ;; mistake there will fail validation (say, if we reused the ref.func from |
| ;; the inner br when generating the outer one). |
| (block $shared (result (ref $shared-func)) |
| (drop |
| (block $func (result (ref $func)) |
| (br_if $func |
| (ref.func $test) |
| (br $shared |
| (ref.func $test-shared) |
| ) |
| ) |
| ) |
| ) |
| (ref.func $test-shared) |
| ) |
| ) |
| ) |