| ;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited. |
| ;; RUN: wasm-opt %s -all -S -o - | filecheck %s |
| ;; RUN: wasm-opt %s -all --roundtrip -S -o - | filecheck %s --check-prefix=RTRIP |
| (module |
| ;; CHECK: (type $t (struct (field (mut waitqueue)))) |
| ;; RTRIP: (type $t (struct (field (mut waitqueue)))) |
| (type $t (struct (field (mut waitqueue)))) |
| |
| ;; CHECK: (global $g (ref $t) (struct.new $t |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: )) |
| ;; RTRIP: (global $g (ref $t) (struct.new $t |
| ;; RTRIP-NEXT: (i32.const 0) |
| ;; RTRIP-NEXT: )) |
| (global $g (ref $t) (struct.new $t (i32.const 0))) |
| |
| |
| ;; CHECK: (func $wait (type $0) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (struct.wait $t 0 |
| ;; CHECK-NEXT: (global.get $g) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (i64.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; RTRIP: (func $wait (type $0) |
| ;; RTRIP-NEXT: (drop |
| ;; RTRIP-NEXT: (struct.wait $t 0 |
| ;; RTRIP-NEXT: (global.get $g) |
| ;; RTRIP-NEXT: (i32.const 0) |
| ;; RTRIP-NEXT: (i64.const 0) |
| ;; RTRIP-NEXT: ) |
| ;; RTRIP-NEXT: ) |
| ;; RTRIP-NEXT: ) |
| (func $wait |
| (drop (struct.wait $t 0 (global.get $g) (i32.const 0) (i64.const 0))) |
| ) |
| |
| ;; CHECK: (func $notify (type $0) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (struct.notify $t 0 |
| ;; CHECK-NEXT: (global.get $g) |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; RTRIP: (func $notify (type $0) |
| ;; RTRIP-NEXT: (drop |
| ;; RTRIP-NEXT: (struct.notify $t 0 |
| ;; RTRIP-NEXT: (global.get $g) |
| ;; RTRIP-NEXT: (i32.const 1) |
| ;; RTRIP-NEXT: ) |
| ;; RTRIP-NEXT: ) |
| ;; RTRIP-NEXT: ) |
| (func $notify |
| (drop (struct.notify $t 0 (global.get $g) (i32.const 1))) |
| ) |
| |
| ;; CHECK: (func $wait-unreachable (type $0) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block ;; (replaces unreachable StructWait we can't emit) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i64.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; RTRIP: (func $wait-unreachable (type $0) |
| ;; RTRIP-NEXT: (drop |
| ;; RTRIP-NEXT: (unreachable) |
| ;; RTRIP-NEXT: ) |
| ;; RTRIP-NEXT: ) |
| (func $wait-unreachable |
| (drop (struct.wait $t 0 (unreachable) (i32.const 0) (i64.const 0))) |
| ) |
| |
| ;; CHECK: (func $notify-unreachable (type $0) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block ;; (replaces unreachable StructNotify we can't emit) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; RTRIP: (func $notify-unreachable (type $0) |
| ;; RTRIP-NEXT: (drop |
| ;; RTRIP-NEXT: (unreachable) |
| ;; RTRIP-NEXT: ) |
| ;; RTRIP-NEXT: ) |
| (func $notify-unreachable |
| (drop (struct.notify $t 0 (unreachable) (i32.const 1))) |
| ) |
| |
| ;; CHECK: (func $wait-none (type $0) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block ;; (replaces unreachable StructWait we can't emit) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (ref.null none) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i64.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; RTRIP: (func $wait-none (type $0) |
| ;; RTRIP-NEXT: (drop |
| ;; RTRIP-NEXT: (ref.null none) |
| ;; RTRIP-NEXT: ) |
| ;; RTRIP-NEXT: (drop |
| ;; RTRIP-NEXT: (i32.const 0) |
| ;; RTRIP-NEXT: ) |
| ;; RTRIP-NEXT: (drop |
| ;; RTRIP-NEXT: (i64.const 0) |
| ;; RTRIP-NEXT: ) |
| ;; RTRIP-NEXT: (drop |
| ;; RTRIP-NEXT: (unreachable) |
| ;; RTRIP-NEXT: ) |
| ;; RTRIP-NEXT: ) |
| (func $wait-none |
| (drop (struct.wait $t 0 (ref.null none) (i32.const 0) (i64.const 0))) |
| ) |
| |
| ;; CHECK: (func $notify-none (type $0) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (block ;; (replaces unreachable StructNotify we can't emit) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (ref.null none) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (unreachable) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; RTRIP: (func $notify-none (type $0) |
| ;; RTRIP-NEXT: (drop |
| ;; RTRIP-NEXT: (ref.null none) |
| ;; RTRIP-NEXT: ) |
| ;; RTRIP-NEXT: (drop |
| ;; RTRIP-NEXT: (i32.const 1) |
| ;; RTRIP-NEXT: ) |
| ;; RTRIP-NEXT: (drop |
| ;; RTRIP-NEXT: (unreachable) |
| ;; RTRIP-NEXT: ) |
| ;; RTRIP-NEXT: ) |
| (func $notify-none |
| (drop (struct.notify $t 0 (ref.null none) (i32.const 1))) |
| ) |
| |
| ;; CHECK: (func $struct-get-set (type $0) |
| ;; CHECK-NEXT: (drop |
| ;; CHECK-NEXT: (struct.get_u $t 0 |
| ;; CHECK-NEXT: (global.get $g) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (struct.set $t 0 |
| ;; CHECK-NEXT: (global.get $g) |
| ;; CHECK-NEXT: (i32.const 1) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; RTRIP: (func $struct-get-set (type $0) |
| ;; RTRIP-NEXT: (drop |
| ;; RTRIP-NEXT: (struct.get_u $t 0 |
| ;; RTRIP-NEXT: (global.get $g) |
| ;; RTRIP-NEXT: ) |
| ;; RTRIP-NEXT: ) |
| ;; RTRIP-NEXT: (struct.set $t 0 |
| ;; RTRIP-NEXT: (global.get $g) |
| ;; RTRIP-NEXT: (i32.const 1) |
| ;; RTRIP-NEXT: ) |
| ;; RTRIP-NEXT: ) |
| (func $struct-get-set |
| (drop (struct.get $t 0 (global.get $g))) |
| (struct.set $t 0 (global.get $g) (i32.const 1)) |
| ) |
| ) |