summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/lit/passes/asyncify.wast1334
-rw-r--r--test/lit/passes/asyncify_enable-multivalue.wast2795
-rw-r--r--test/lit/passes/asyncify_mod-asyncify-always-and-only-unwind.wast508
-rw-r--r--test/lit/passes/asyncify_mod-asyncify-always-and-only-unwind_O.wast135
-rw-r--r--test/lit/passes/asyncify_mod-asyncify-never-unwind.wast526
-rw-r--r--test/lit/passes/asyncify_mod-asyncify-never-unwind_O.wast150
-rw-r--r--test/lit/passes/asyncify_optimize-level=1.wast1627
-rw-r--r--test/lit/passes/asyncify_pass-arg=asyncify-addlist@foo.wast193
-rw-r--r--test/lit/passes/asyncify_pass-arg=asyncify-addlist@foo_pass-arg=asyncify-ignore-indirect.wast233
-rw-r--r--test/lit/passes/asyncify_pass-arg=asyncify-asserts_pass-arg=asyncify-onlylist@waka.wast249
-rw-r--r--test/lit/passes/asyncify_pass-arg=asyncify-blacklist@foo,bar.wast308
-rw-r--r--test/lit/passes/asyncify_pass-arg=asyncify-ignore-imports.wast305
-rw-r--r--test/lit/passes/asyncify_pass-arg=asyncify-ignore-indirect.wast579
-rw-r--r--test/lit/passes/asyncify_pass-arg=asyncify-imports@env.import,env.import2.wast1886
-rw-r--r--test/lit/passes/asyncify_pass-arg=asyncify-onlylist@foo,bar.wast308
-rw-r--r--test/lit/passes/asyncify_pass-arg=asyncify-verbose.wast386
-rw-r--r--test/passes/asyncify.txt1261
-rw-r--r--test/passes/asyncify.wast53
-rw-r--r--test/passes/asyncify_enable-multivalue.txt2592
-rw-r--r--test/passes/asyncify_enable-multivalue.wast157
-rw-r--r--test/passes/asyncify_mod-asyncify-always-and-only-unwind.txt470
-rw-r--r--test/passes/asyncify_mod-asyncify-always-and-only-unwind.wast20
-rw-r--r--test/passes/asyncify_mod-asyncify-always-and-only-unwind_O.txt94
-rw-r--r--test/passes/asyncify_mod-asyncify-always-and-only-unwind_O.wast24
-rw-r--r--test/passes/asyncify_mod-asyncify-never-unwind.txt488
-rw-r--r--test/passes/asyncify_mod-asyncify-never-unwind.wast20
-rw-r--r--test/passes/asyncify_mod-asyncify-never-unwind_O.txt109
-rw-r--r--test/passes/asyncify_mod-asyncify-never-unwind_O.wast24
-rw-r--r--test/passes/asyncify_optimize-level=1.txt1511
-rw-r--r--test/passes/asyncify_optimize-level=1.wast97
-rw-r--r--test/passes/asyncify_pass-arg=asyncify-addlist@foo.txt162
-rw-r--r--test/passes/asyncify_pass-arg=asyncify-addlist@foo.wast13
-rw-r--r--test/passes/asyncify_pass-arg=asyncify-addlist@foo_pass-arg=asyncify-ignore-indirect.txt196
-rw-r--r--test/passes/asyncify_pass-arg=asyncify-addlist@foo_pass-arg=asyncify-ignore-indirect.wast18
-rw-r--r--test/passes/asyncify_pass-arg=asyncify-asserts_pass-arg=asyncify-onlylist@waka.txt205
-rw-r--r--test/passes/asyncify_pass-arg=asyncify-asserts_pass-arg=asyncify-onlylist@waka.wast25
-rw-r--r--test/passes/asyncify_pass-arg=asyncify-blacklist@foo,bar.txt270
-rw-r--r--test/passes/asyncify_pass-arg=asyncify-blacklist@foo,bar.wast20
-rw-r--r--test/passes/asyncify_pass-arg=asyncify-ignore-imports.txt260
-rw-r--r--test/passes/asyncify_pass-arg=asyncify-ignore-imports.wast26
-rw-r--r--test/passes/asyncify_pass-arg=asyncify-ignore-indirect.txt534
-rw-r--r--test/passes/asyncify_pass-arg=asyncify-ignore-indirect.wast26
-rw-r--r--test/passes/asyncify_pass-arg=asyncify-imports@env.import,env.import2.txt1708
-rw-r--r--test/passes/asyncify_pass-arg=asyncify-imports@env.import,env.import2.wast146
-rw-r--r--test/passes/asyncify_pass-arg=asyncify-onlylist@foo,bar.txt270
-rw-r--r--test/passes/asyncify_pass-arg=asyncify-onlylist@foo,bar.wast20
-rw-r--r--test/passes/asyncify_pass-arg=asyncify-verbose.txt355
-rw-r--r--test/passes/asyncify_pass-arg=asyncify-verbose.wast17
48 files changed, 11522 insertions, 11191 deletions
diff --git a/test/lit/passes/asyncify.wast b/test/lit/passes/asyncify.wast
new file mode 100644
index 000000000..7c52f1476
--- /dev/null
+++ b/test/lit/passes/asyncify.wast
@@ -0,0 +1,1334 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+;; NOTE: This test was ported using port_test.py and could be cleaned up.
+
+;; RUN: foreach %s %t wasm-opt --asyncify -S -o - | filecheck %s
+
+(module
+ ;; CHECK: (type $f (func (param i32)))
+ (type $f (func (param i32)))
+ (memory 1 2)
+ ;; CHECK: (type $i32_i32_=>_none (func (param i32 i32)))
+
+ ;; CHECK: (type $none_=>_none (func))
+
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (import "env" "import" (func $import))
+ (import "env" "import" (func $import))
+ ;; CHECK: (import "env" "import2" (func $import2 (param i32)))
+ (import "env" "import2" (func $import2 (param i32)))
+ (table funcref (elem $liveness2 $liveness2))
+ ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0))
+
+ ;; CHECK: (memory $0 1 2)
+
+ ;; CHECK: (table $0 2 2 funcref)
+
+ ;; CHECK: (elem (i32.const 0) $liveness2 $liveness2)
+
+ ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind))
+
+ ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
+
+ ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind))
+
+ ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
+
+ ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state))
+
+ ;; CHECK: (func $liveness1 (param $live0 i32) (param $dead0 i32)
+ ;; CHECK-NEXT: (local $live1 i32)
+ ;; CHECK-NEXT: (local $dead1 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (local $6 i32)
+ ;; CHECK-NEXT: (local $7 i32)
+ ;; CHECK-NEXT: (local $8 i32)
+ ;; CHECK-NEXT: (local $9 i32)
+ ;; CHECK-NEXT: (local $10 i32)
+ ;; CHECK-NEXT: (local $11 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -8)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $10
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $live0
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $10)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $live1
+ ;; CHECK-NEXT: (i32.load offset=4
+ ;; CHECK-NEXT: (local.get $10)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $8
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $9
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (local.get $dead0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (local.get $dead1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $9)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $6
+ ;; CHECK-NEXT: (local.get $live0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $7
+ ;; CHECK-NEXT: (local.get $live1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $7)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $8)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $11
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $11)
+ ;; CHECK-NEXT: (local.get $live0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store offset=4
+ ;; CHECK-NEXT: (local.get $11)
+ ;; CHECK-NEXT: (local.get $live1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 8)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $liveness1 (param $live0 i32) (param $dead0 i32)
+ (local $live1 i32)
+ (local $dead1 i32)
+ (drop (local.get $dead0))
+ (drop (local.get $dead1))
+ (call $import)
+ (drop (local.get $live0))
+ (drop (local.get $live1))
+ )
+ ;; CHECK: (func $liveness2 (param $live0 i32) (param $dead0 i32)
+ ;; CHECK-NEXT: (local $live1 i32)
+ ;; CHECK-NEXT: (local $dead1 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (local $6 i32)
+ ;; CHECK-NEXT: (local $7 i32)
+ ;; CHECK-NEXT: (local $8 i32)
+ ;; CHECK-NEXT: (local $9 i32)
+ ;; CHECK-NEXT: (local $10 i32)
+ ;; CHECK-NEXT: (local $11 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -8)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $10
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $live0
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $10)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $live1
+ ;; CHECK-NEXT: (i32.load offset=4
+ ;; CHECK-NEXT: (local.get $10)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $8
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $9
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (local.get $dead0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (local.get $dead1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $9)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $6
+ ;; CHECK-NEXT: (local.get $live0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $7
+ ;; CHECK-NEXT: (local.get $live1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $7)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $8)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $11
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $11)
+ ;; CHECK-NEXT: (local.get $live0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store offset=4
+ ;; CHECK-NEXT: (local.get $11)
+ ;; CHECK-NEXT: (local.get $live1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 8)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $liveness2 (param $live0 i32) (param $dead0 i32)
+ (local $live1 i32)
+ (local $dead1 i32)
+ (drop (local.get $dead0))
+ (drop (local.get $dead1))
+ (call $import)
+ (drop (local.get $live0))
+ (drop (local.get $live1))
+ )
+ ;; CHECK: (func $liveness3 (param $live0 i32) (param $dead0 i32)
+ ;; CHECK-NEXT: (local $live1 i32)
+ ;; CHECK-NEXT: (local $dead1 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (local $6 i32)
+ ;; CHECK-NEXT: (local $7 i32)
+ ;; CHECK-NEXT: (local $8 i32)
+ ;; CHECK-NEXT: (local $9 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -8)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $8
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $live0
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $8)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $live1
+ ;; CHECK-NEXT: (i32.load offset=4
+ ;; CHECK-NEXT: (local.get $8)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $6
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $7
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $7)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (local.get $live0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $7)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (local.get $live1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $9
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $9)
+ ;; CHECK-NEXT: (local.get $live0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store offset=4
+ ;; CHECK-NEXT: (local.get $9)
+ ;; CHECK-NEXT: (local.get $live1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 8)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $liveness3 (param $live0 i32) (param $dead0 i32)
+ (local $live1 i32)
+ (local $dead1 i32)
+ (call $import)
+ (drop (local.get $live0))
+ (call $import)
+ (drop (local.get $live1))
+ )
+ ;; CHECK: (func $liveness4 (param $live0 i32) (param $dead0 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (local $6 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $live0
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.or
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (local.get $live0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $6
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: (local.get $live0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $liveness4 (param $live0 i32) (param $dead0 i32)
+ (if (i32.const 0)
+ (call $import)
+ )
+ (drop (local.get $live0))
+ )
+ ;; CHECK: (func $liveness5 (param $dead0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $dead0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.or
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $dead0
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (local.get $dead0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $liveness5 (param $dead0 i32)
+ (drop (local.get $dead0))
+ (if (i32.const 0)
+ (call $import) ;; live before and after call, but not during
+ )
+ (local.set $dead0 (i32.const 1))
+ (drop (local.get $dead0))
+ )
+ ;; CHECK: (func $liveness-call-kills (param $live i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $live)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import2
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $liveness-call-kills (param $live i32)
+ (call $import2 (local.get $live))
+ )
+ ;; CHECK: (func $liveness-indirect-kills (param $live0 i32) (param $live1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (local $6 i32)
+ ;; CHECK-NEXT: (local $7 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -8)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $6
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (i32.load offset=4
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (local.get $live0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (local.get $live1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call_indirect (type $f)
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $7
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $7)
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store offset=4
+ ;; CHECK-NEXT: (local.get $7)
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 8)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $liveness-indirect-kills (param $live0 i32) (param $live1 i32)
+ (call_indirect (type $f) (local.get $live0) (local.get $live1))
+ )
+)
+;; CHECK: (func $asyncify_start_unwind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_unwind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_start_rewind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_rewind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_get_state (result i32)
+;; CHECK-NEXT: (global.get $__asyncify_state)
+;; CHECK-NEXT: )
diff --git a/test/lit/passes/asyncify_enable-multivalue.wast b/test/lit/passes/asyncify_enable-multivalue.wast
new file mode 100644
index 000000000..5f7ec2a6e
--- /dev/null
+++ b/test/lit/passes/asyncify_enable-multivalue.wast
@@ -0,0 +1,2795 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+;; NOTE: This test was ported using port_test.py and could be cleaned up.
+
+;; RUN: foreach %s %t wasm-opt --asyncify --enable-multivalue -S -o - | filecheck %s
+
+;; Pre-existing imports that the pass turns into the implementations.
+(module
+ (memory 1 2)
+ (import "asyncify" "start_unwind" (func $asyncify_start_unwind (param i32)))
+ (import "asyncify" "stop_unwind" (func $asyncify_stop_unwind))
+ (import "asyncify" "start_rewind" (func $asyncify_start_rewind (param i32)))
+ (import "asyncify" "stop_rewind" (func $asyncify_stop_rewind))
+ ;; CHECK: (type $none_=>_none (func))
+
+ ;; CHECK: (type $i32_=>_none (func (param i32)))
+
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (global $sleeping (mut i32) (i32.const 0))
+ (global $sleeping (mut i32) (i32.const 0))
+ ;; do a sleep operation: start a sleep if running, or resume after a sleep
+ ;; if we just rewound.
+ ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0))
+
+ ;; CHECK: (memory $0 1 2)
+
+ ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind))
+
+ ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
+
+ ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind))
+
+ ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
+
+ ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state))
+
+ ;; CHECK: (func $do_sleep
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (global.get $sleeping)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (block $block
+ ;; CHECK-NEXT: (global.set $sleeping
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $asyncify_start_unwind
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block $block0
+ ;; CHECK-NEXT: (global.set $sleeping
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $asyncify_stop_rewind)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $do_sleep
+ (if
+ (i32.eqz (global.get $sleeping))
+ (block
+ (global.set $sleeping (i32.const 1))
+ ;; we should set up the data at address 4 around here
+ (call $asyncify_start_unwind (i32.const 4))
+ )
+ (block
+ (global.set $sleeping (i32.const 0))
+ (call $asyncify_stop_rewind)
+ )
+ )
+ )
+ ;; a function that does some work and has a sleep (async pause/resume) in the middle
+ ;; CHECK: (func $work
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $stuff)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $do_sleep)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $stuff)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $work
+ (call $stuff) ;; do some work
+ (call $do_sleep) ;; take a break
+ (call $stuff) ;; do some more work
+ )
+ ;; CHECK: (func $stuff
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $stuff)
+ ;; the first event called from the main event loop: just call into $work
+ ;; CHECK: (func $first_event
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $work)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $first_event
+ (call $work)
+ ;; work will sleep, so we exit through here while it is paused
+ )
+ ;; the second event called from the main event loop: to resume $work,
+ ;; stop the unwind, then prepare a rewind, and initiate it by doing
+ ;; the call to rewind the call stack back up to where it was
+ ;; CHECK: (func $second_event
+ ;; CHECK-NEXT: (call $asyncify_stop_unwind)
+ ;; CHECK-NEXT: (call $asyncify_start_rewind
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $work)
+ ;; CHECK-NEXT: )
+ (func $second_event
+ (call $asyncify_stop_unwind)
+ (call $asyncify_start_rewind (i32.const 4))
+ (call $work)
+ )
+ ;; a function that can't do a sleep
+ ;; CHECK: (func $never_sleep
+ ;; CHECK-NEXT: (call $stuff)
+ ;; CHECK-NEXT: (call $stuff)
+ ;; CHECK-NEXT: (call $stuff)
+ ;; CHECK-NEXT: )
+ (func $never_sleep
+ (call $stuff)
+ (call $stuff)
+ (call $stuff)
+ )
+)
+;; Calls to imports that will call into asyncify themselves.
+;; CHECK: (func $asyncify_start_unwind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_unwind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_start_rewind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_rewind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_get_state (result i32)
+;; CHECK-NEXT: (global.get $__asyncify_state)
+;; CHECK-NEXT: )
+(module
+ (memory 1 2)
+ ;; CHECK: (type $none_=>_none (func))
+
+ ;; CHECK: (type $i32_=>_none (func (param i32)))
+
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32)))
+
+ ;; CHECK: (type $none_=>_i32_i64 (func (result i32 i64)))
+
+ ;; CHECK: (import "env" "import" (func $import))
+ (import "env" "import" (func $import))
+ ;; CHECK: (import "env" "import2" (func $import2 (result i32)))
+ (import "env" "import2" (func $import2 (result i32)))
+ ;; CHECK: (import "env" "import3" (func $import3 (param i32)))
+ (import "env" "import3" (func $import3 (param i32)))
+ ;; CHECK: (import "env" "import-mv" (func $import-mv (result i32 i64)))
+ (import "env" "import-mv" (func $import-mv (result i32 i64)))
+ ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0))
+
+ ;; CHECK: (memory $0 1 2)
+
+ ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind))
+
+ ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
+
+ ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind))
+
+ ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
+
+ ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state))
+
+ ;; CHECK: (func $calls-import
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $calls-import
+ (call $import)
+ )
+ ;; CHECK: (func $calls-import2 (result i32)
+ ;; CHECK-NEXT: (local $temp i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (local $6 i32)
+ ;; CHECK-NEXT: (local $7 i32)
+ ;; CHECK-NEXT: (local $8 i32)
+ ;; CHECK-NEXT: (local $9 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $8
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $8)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $6
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $7
+ ;; CHECK-NEXT: (call $import2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $7)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $temp
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (local.get $temp)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $9
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $9)
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ (func $calls-import2 (result i32)
+ (local $temp i32)
+ (local.set $temp (call $import2))
+ (return (local.get $temp))
+ )
+ ;; CHECK: (func $calls-import2-drop
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (call $import2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-import2-drop
+ (drop (call $import2))
+ )
+ ;; CHECK: (func $calls-nothing
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (i32.const 17)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-nothing
+ (drop (i32.eqz (i32.const 17)))
+ )
+ ;; CHECK: (func $many-locals (param $x i32) (result i32)
+ ;; CHECK-NEXT: (local $y i32)
+ ;; CHECK-NEXT: (local $z (f32 i64))
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (local $6 i32)
+ ;; CHECK-NEXT: (local $7 i32)
+ ;; CHECK-NEXT: (local $8 i32)
+ ;; CHECK-NEXT: (local $9 i32)
+ ;; CHECK-NEXT: (local $10 i32)
+ ;; CHECK-NEXT: (local $11 i32)
+ ;; CHECK-NEXT: (local $12 i32)
+ ;; CHECK-NEXT: (local $13 i32)
+ ;; CHECK-NEXT: (local $14 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $13
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $y
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $13)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $11
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $12
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (loop $l
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (local.get $y)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $x
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $6
+ ;; CHECK-NEXT: (i32.div_s
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: (i32.const 3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $y
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $7
+ ;; CHECK-NEXT: (local.get $y)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br_if $l
+ ;; CHECK-NEXT: (local.get $7)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $12)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $8
+ ;; CHECK-NEXT: (local.get $y)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (local.get $8)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $11)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $14
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $14)
+ ;; CHECK-NEXT: (local.get $y)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ (func $many-locals (param $x i32) (result i32)
+ (local $y i32)
+ (local $z (f32 i64))
+ (loop $l
+ (local.set $x
+ (i32.add (local.get $y) (i32.const 1))
+ )
+ (local.set $y
+ (i32.div_s (local.get $x) (i32.const 3))
+ )
+ (br_if $l (local.get $y))
+ )
+ (call $import)
+ (return (local.get $y))
+ )
+ ;; CHECK: (func $calls-import2-if (param $x i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.or
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $calls-import2-if (param $x i32)
+ (if (local.get $x)
+ (call $import)
+ )
+ )
+ ;; CHECK: (func $calls-import2-if-else (param $x i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (local $6 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.or
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import3
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.or
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import3
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $6
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-import2-if-else (param $x i32)
+ (if (local.get $x)
+ (call $import3 (i32.const 1))
+ (call $import3 (i32.const 2))
+ )
+ )
+ ;; CHECK: (func $calls-import2-if-else-oneside (param $x i32) (result i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (local $6 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $6
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.or
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.or
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import3
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (i32.const 3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ (func $calls-import2-if-else-oneside (param $x i32) (result i32)
+ (if (local.get $x)
+ (return (i32.const 1))
+ (call $import3 (i32.const 2))
+ )
+ (return (i32.const 3))
+ )
+ ;; CHECK: (func $calls-import2-if-else-oneside2 (param $x i32) (result i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (local $6 i32)
+ ;; CHECK-NEXT: (local $7 i32)
+ ;; CHECK-NEXT: (local $8 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $7
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $7)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $6
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.or
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import3
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.or
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (i32.const 3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $8
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $8)
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ (func $calls-import2-if-else-oneside2 (param $x i32) (result i32)
+ (if (local.get $x)
+ (call $import3 (i32.const 1))
+ (return (i32.const 2))
+ )
+ (return (i32.const 3))
+ )
+ ;; CHECK: (func $calls-mv
+ ;; CHECK-NEXT: (local $x (i32 i64))
+ ;; CHECK-NEXT: (local $1 (i32 i64))
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 (i32 i64))
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (local $6 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -12)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (tuple.make
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i64.load offset=4 align=4
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (call $import-mv)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $x
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $6
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: (tuple.extract 0
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i64.store offset=4 align=4
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: (tuple.extract 1
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 12)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-mv
+ (local $x (i32 i64))
+ (local.set $x (call $import-mv))
+ )
+ ;; CHECK: (func $calls-loop (param $x i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (local $6 i32)
+ ;; CHECK-NEXT: (local $7 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $6
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $x
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (loop $l
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import3
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $x
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br_if $l
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $7
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $7)
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-loop (param $x i32)
+ (loop $l
+ (call $import3 (i32.const 1))
+ (local.set $x
+ (i32.add (local.get $x) (i32.const 1))
+ )
+ (br_if $l
+ (local.get $x)
+ )
+ )
+ )
+ ;; CHECK: (func $calls-loop2
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (loop $l
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (call $import2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br_if $l
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-loop2
+ (loop $l
+ (br_if $l
+ (call $import2)
+ )
+ )
+ )
+ ;; CHECK: (func $calls-mix
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $boring)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $boring)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $calls-mix
+ (call $boring)
+ (call $import)
+ (call $boring)
+ (call $import)
+ )
+ ;; CHECK: (func $boring
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $boring)
+ ;; CHECK: (func $calls-mix-deep
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $boring-deep)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import-deep)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $boring)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $calls-mix-deep
+ (call $boring-deep)
+ (call $import-deep)
+ (call $boring)
+ (call $import)
+ )
+ ;; CHECK: (func $boring-deep
+ ;; CHECK-NEXT: (call $boring)
+ ;; CHECK-NEXT: )
+ (func $boring-deep
+ (call $boring)
+ )
+ ;; CHECK: (func $import-deep
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $import-deep
+ (call $import)
+ )
+)
+;; empty module, in particular with no memory
+;; CHECK: (func $asyncify_start_unwind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_unwind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_start_rewind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_rewind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_get_state (result i32)
+;; CHECK-NEXT: (global.get $__asyncify_state)
+;; CHECK-NEXT: )
+(module
+)
+;; CHECK: (type $i32_=>_none (func (param i32)))
+
+;; CHECK: (type $none_=>_none (func))
+
+;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0))
+
+;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0))
+
+;; CHECK: (memory $0 1 1)
+
+;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind))
+
+;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
+
+;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind))
+
+;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
+
+;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state))
+
+;; CHECK: (func $asyncify_start_unwind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_unwind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_start_rewind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_rewind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_get_state (result i32)
+;; CHECK-NEXT: (global.get $__asyncify_state)
+;; CHECK-NEXT: )
diff --git a/test/lit/passes/asyncify_mod-asyncify-always-and-only-unwind.wast b/test/lit/passes/asyncify_mod-asyncify-always-and-only-unwind.wast
new file mode 100644
index 000000000..80c0aa8c8
--- /dev/null
+++ b/test/lit/passes/asyncify_mod-asyncify-always-and-only-unwind.wast
@@ -0,0 +1,508 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+;; NOTE: This test was ported using port_test.py and could be cleaned up.
+
+;; RUN: foreach %s %t wasm-opt --asyncify --mod-asyncify-always-and-only-unwind -S -o - | filecheck %s
+
+(module
+ (memory 1 2)
+ ;; CHECK: (type $none_=>_none (func))
+
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (type $i32_=>_none (func (param i32)))
+
+ ;; CHECK: (import "env" "import" (func $import))
+ (import "env" "import" (func $import))
+ ;; CHECK: (import "env" "import2" (func $import2 (result i32)))
+ (import "env" "import2" (func $import2 (result i32)))
+ ;; CHECK: (import "env" "import3" (func $import3 (param i32)))
+ (import "env" "import3" (func $import3 (param i32)))
+ ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0))
+
+ ;; CHECK: (memory $0 1 2)
+
+ ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind))
+
+ ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
+
+ ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind))
+
+ ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
+
+ ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state))
+
+ ;; CHECK: (func $calls-import
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $calls-import
+ (call $import)
+ )
+ ;; CHECK: (func $calls-import2 (result i32)
+ ;; CHECK-NEXT: (local $temp i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (local $6 i32)
+ ;; CHECK-NEXT: (local $7 i32)
+ ;; CHECK-NEXT: (local $8 i32)
+ ;; CHECK-NEXT: (local $9 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $8
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $8)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $6
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $7
+ ;; CHECK-NEXT: (call $import2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $7)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $temp
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (local.get $temp)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $9
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $9)
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ (func $calls-import2 (result i32)
+ (local $temp i32)
+ (local.set $temp (call $import2))
+ (return (local.get $temp))
+ )
+ ;; CHECK: (func $calls-import2-drop
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (call $import2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-import2-drop
+ (drop (call $import2))
+ )
+ ;; CHECK: (func $calls-nothing
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (i32.const 17)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-nothing
+ (drop (i32.eqz (i32.const 17)))
+ )
+)
+;; CHECK: (func $asyncify_start_unwind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_unwind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_start_rewind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_rewind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_get_state (result i32)
+;; CHECK-NEXT: (global.get $__asyncify_state)
+;; CHECK-NEXT: )
diff --git a/test/lit/passes/asyncify_mod-asyncify-always-and-only-unwind_O.wast b/test/lit/passes/asyncify_mod-asyncify-always-and-only-unwind_O.wast
new file mode 100644
index 000000000..491343f6a
--- /dev/null
+++ b/test/lit/passes/asyncify_mod-asyncify-always-and-only-unwind_O.wast
@@ -0,0 +1,135 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+;; NOTE: This test was ported using port_test.py and could be cleaned up.
+
+;; RUN: foreach %s %t wasm-opt --asyncify --mod-asyncify-always-and-only-unwind -O -S -o - | filecheck %s
+
+(module
+ (memory 1 2)
+ ;; CHECK: (type $none_=>_none (func))
+
+ ;; CHECK: (type $i32_=>_none (func (param i32)))
+
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (import "env" "import" (func $import))
+ (import "env" "import" (func $import))
+ (import "env" "import2" (func $import2 (result i32)))
+ (import "env" "import3" (func $import3 (param i32)))
+ ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0))
+
+ ;; CHECK: (memory $0 1 2)
+
+ ;; CHECK: (export "calls-import" (func $calls-import))
+ (export "calls-import" (func $calls-import))
+ ;; CHECK: (export "calls-import2" (func $calls-import))
+ (export "calls-import2" (func $calls-import))
+ ;; CHECK: (export "calls-import2-drop" (func $calls-import))
+ (export "calls-import2-drop" (func $calls-import))
+ ;; CHECK: (export "calls-nothing" (func $calls-import))
+ (export "calls-nothing" (func $calls-import))
+ ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind))
+
+ ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
+
+ ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind))
+
+ ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_unwind))
+
+ ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state))
+
+ ;; CHECK: (func $calls-import (; has Stack IR ;)
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-import
+ (call $import)
+ )
+ (func $calls-import2 (result i32)
+ (local $temp i32)
+ (local.set $temp (call $import2))
+ (return (local.get $temp))
+ )
+ (func $calls-import2-drop
+ (drop (call $import2))
+ )
+ (func $calls-nothing
+ (drop (i32.eqz (i32.const 17)))
+ )
+)
+;; CHECK: (func $asyncify_start_unwind (; has Stack IR ;) (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_unwind (; has Stack IR ;)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_start_rewind (; has Stack IR ;) (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_get_state (; has Stack IR ;) (result i32)
+;; CHECK-NEXT: (global.get $__asyncify_state)
+;; CHECK-NEXT: )
diff --git a/test/lit/passes/asyncify_mod-asyncify-never-unwind.wast b/test/lit/passes/asyncify_mod-asyncify-never-unwind.wast
new file mode 100644
index 000000000..b572971f9
--- /dev/null
+++ b/test/lit/passes/asyncify_mod-asyncify-never-unwind.wast
@@ -0,0 +1,526 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+;; NOTE: This test was ported using port_test.py and could be cleaned up.
+
+;; RUN: foreach %s %t wasm-opt --asyncify --mod-asyncify-never-unwind -S -o - | filecheck %s
+
+(module
+ (memory 1 2)
+ ;; CHECK: (type $none_=>_none (func))
+
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (type $i32_=>_none (func (param i32)))
+
+ ;; CHECK: (import "env" "import" (func $import))
+ (import "env" "import" (func $import))
+ ;; CHECK: (import "env" "import2" (func $import2 (result i32)))
+ (import "env" "import2" (func $import2 (result i32)))
+ ;; CHECK: (import "env" "import3" (func $import3 (param i32)))
+ (import "env" "import3" (func $import3 (param i32)))
+ ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0))
+
+ ;; CHECK: (memory $0 1 2)
+
+ ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind))
+
+ ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
+
+ ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind))
+
+ ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
+
+ ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state))
+
+ ;; CHECK: (func $calls-import
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $calls-import
+ (call $import)
+ )
+ ;; CHECK: (func $calls-import2 (result i32)
+ ;; CHECK-NEXT: (local $temp i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (local $6 i32)
+ ;; CHECK-NEXT: (local $7 i32)
+ ;; CHECK-NEXT: (local $8 i32)
+ ;; CHECK-NEXT: (local $9 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $8
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $8)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $6
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $7
+ ;; CHECK-NEXT: (call $import2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $7)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $temp
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (local.get $temp)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $9
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $9)
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ (func $calls-import2 (result i32)
+ (local $temp i32)
+ (local.set $temp (call $import2))
+ (return (local.get $temp))
+ )
+ ;; CHECK: (func $calls-import2-drop
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (call $import2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-import2-drop
+ (drop (call $import2))
+ )
+ ;; CHECK: (func $calls-nothing
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (i32.const 17)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-nothing
+ (drop (i32.eqz (i32.const 17)))
+ )
+)
+;; CHECK: (func $asyncify_start_unwind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_unwind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_start_rewind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_rewind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_get_state (result i32)
+;; CHECK-NEXT: (global.get $__asyncify_state)
+;; CHECK-NEXT: )
diff --git a/test/lit/passes/asyncify_mod-asyncify-never-unwind_O.wast b/test/lit/passes/asyncify_mod-asyncify-never-unwind_O.wast
new file mode 100644
index 000000000..95d418aac
--- /dev/null
+++ b/test/lit/passes/asyncify_mod-asyncify-never-unwind_O.wast
@@ -0,0 +1,150 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+;; NOTE: This test was ported using port_test.py and could be cleaned up.
+
+;; RUN: foreach %s %t wasm-opt --asyncify --mod-asyncify-never-unwind -O -S -o - | filecheck %s
+
+(module
+ (memory 1 2)
+ ;; CHECK: (type $none_=>_none (func))
+
+ ;; CHECK: (type $i32_=>_none (func (param i32)))
+
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (import "env" "import" (func $import))
+ (import "env" "import" (func $import))
+ (import "env" "import2" (func $import2 (result i32)))
+ (import "env" "import3" (func $import3 (param i32)))
+ ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0))
+
+ ;; CHECK: (memory $0 1 2)
+
+ ;; CHECK: (export "calls-import" (func $calls-import))
+ (export "calls-import" (func $calls-import))
+ ;; CHECK: (export "calls-import2" (func $calls-import))
+ (export "calls-import2" (func $calls-import))
+ ;; CHECK: (export "calls-import2-drop" (func $calls-import))
+ (export "calls-import2-drop" (func $calls-import))
+ ;; CHECK: (export "calls-nothing" (func $calls-import))
+ (export "calls-nothing" (func $calls-import))
+ ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind))
+
+ ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
+
+ ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind))
+
+ ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_unwind))
+
+ ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state))
+
+ ;; CHECK: (func $calls-import (; has Stack IR ;)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block (result i32)
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-import
+ (call $import)
+ )
+ (func $calls-import2 (result i32)
+ (local $temp i32)
+ (local.set $temp (call $import2))
+ (return (local.get $temp))
+ )
+ (func $calls-import2-drop
+ (drop (call $import2))
+ )
+ (func $calls-nothing
+ (drop (i32.eqz (i32.const 17)))
+ )
+)
+;; CHECK: (func $asyncify_start_unwind (; has Stack IR ;) (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_unwind (; has Stack IR ;)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_start_rewind (; has Stack IR ;) (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_get_state (; has Stack IR ;) (result i32)
+;; CHECK-NEXT: (global.get $__asyncify_state)
+;; CHECK-NEXT: )
diff --git a/test/lit/passes/asyncify_optimize-level=1.wast b/test/lit/passes/asyncify_optimize-level=1.wast
new file mode 100644
index 000000000..9406691c4
--- /dev/null
+++ b/test/lit/passes/asyncify_optimize-level=1.wast
@@ -0,0 +1,1627 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+;; NOTE: This test was ported using port_test.py and could be cleaned up.
+
+;; RUN: foreach %s %t wasm-opt --asyncify --optimize-level=1 -S -o - | filecheck %s
+
+(module
+ (memory 1 2)
+ ;; CHECK: (type $none_=>_none (func))
+
+ ;; CHECK: (type $i32_=>_none (func (param i32)))
+
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32)))
+
+ ;; CHECK: (import "env" "import" (func $import))
+ (import "env" "import" (func $import))
+ ;; CHECK: (import "env" "import2" (func $import2 (result i32)))
+ (import "env" "import2" (func $import2 (result i32)))
+ ;; CHECK: (import "env" "import3" (func $import3 (param i32)))
+ (import "env" "import3" (func $import3 (param i32)))
+ ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0))
+
+ ;; CHECK: (memory $0 1 2)
+
+ ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind))
+
+ ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
+
+ ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind))
+
+ ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
+
+ ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state))
+
+ ;; CHECK: (func $calls-import
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block (result i32)
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (br_if $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-import
+ (call $import)
+ )
+ ;; CHECK: (func $calls-import2 (result i32)
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block (result i32)
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (call $import2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (br_if $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ (func $calls-import2 (result i32)
+ (local $temp i32)
+ (local.set $temp (call $import2))
+ (return (local.get $temp))
+ )
+ ;; CHECK: (func $calls-import2-drop
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block (result i32)
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (call $import2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (br_if $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-import2-drop
+ (drop (call $import2))
+ )
+ ;; CHECK: (func $calls-nothing
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $calls-nothing
+ (drop (i32.eqz (i32.const 17)))
+ )
+ ;; CHECK: (func $many-locals (param $0 i32) (result i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (loop $l
+ ;; CHECK-NEXT: (br_if $l
+ ;; CHECK-NEXT: (local.tee $1
+ ;; CHECK-NEXT: (i32.div_s
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (br_if $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ (func $many-locals (param $x i32) (result i32)
+ (local $y i32)
+ (loop $l
+ (local.set $x
+ (i32.add (local.get $y) (i32.const 1))
+ )
+ (local.set $y
+ (i32.div_s (local.get $x) (i32.const 3))
+ )
+ (br_if $l (local.get $y))
+ )
+ (call $import)
+ (return (local.get $y))
+ )
+ ;; CHECK: (func $calls-import2-if (param $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.or
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (br_if $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-import2-if (param $x i32)
+ (if (local.get $x)
+ (call $import)
+ )
+ )
+ ;; CHECK: (func $calls-import2-if-else (param $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.or
+ ;; CHECK-NEXT: (local.tee $1
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import3
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (br_if $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.or
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import3
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (br_if $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-import2-if-else (param $x i32)
+ (if (local.get $x)
+ (call $import3 (i32.const 1))
+ (call $import3 (i32.const 2))
+ )
+ )
+ ;; CHECK: (func $calls-import2-if-else-oneside (param $0 i32) (result i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.or
+ ;; CHECK-NEXT: (local.tee $2
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.or
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import3
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (br_if $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (i32.const 3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ (func $calls-import2-if-else-oneside (param $x i32) (result i32)
+ (if (local.get $x)
+ (return (i32.const 1))
+ (call $import3 (i32.const 2))
+ )
+ (return (i32.const 3))
+ )
+ ;; CHECK: (func $calls-import2-if-else-oneside2 (param $0 i32) (result i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.or
+ ;; CHECK-NEXT: (local.tee $1
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import3
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (br_if $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.or
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (i32.const 3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ (func $calls-import2-if-else-oneside2 (param $x i32) (result i32)
+ (if (local.get $x)
+ (call $import3 (i32.const 1))
+ (return (i32.const 2))
+ )
+ (return (i32.const 3))
+ )
+ ;; CHECK: (func $calls-loop (param $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (loop $l
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import3
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (br_if $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br_if $l
+ ;; CHECK-NEXT: (local.tee $0
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-loop (param $x i32)
+ (loop $l
+ (call $import3 (i32.const 1))
+ (local.set $x
+ (i32.add (local.get $x) (i32.const 1))
+ )
+ (br_if $l
+ (local.get $x)
+ )
+ )
+ )
+ ;; CHECK: (func $calls-loop2
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (loop $l
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (call $import2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (br_if $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br_if $l
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-loop2
+ (loop $l
+ (br_if $l
+ (call $import2)
+ )
+ )
+ )
+ ;; CHECK: (func $calls-mix
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $boring)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (br_if $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $boring)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (br_if $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-mix
+ (call $boring)
+ (call $import)
+ (call $boring)
+ (call $import)
+ )
+ ;; CHECK: (func $boring
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $boring)
+ ;; CHECK: (func $calls-mix-deep
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $boring-deep)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import-deep)
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (br_if $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $boring)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (br_if $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-mix-deep
+ (call $boring-deep)
+ (call $import-deep)
+ (call $boring)
+ (call $import)
+ )
+ ;; CHECK: (func $boring-deep
+ ;; CHECK-NEXT: (call $boring)
+ ;; CHECK-NEXT: )
+ (func $boring-deep
+ (call $boring)
+ )
+ ;; CHECK: (func $import-deep
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (select
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block (result i32)
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.sub
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (br_if $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $import-deep
+ (call $import)
+ )
+)
+
+;; CHECK: (func $asyncify_start_unwind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_unwind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_start_rewind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_rewind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_get_state (result i32)
+;; CHECK-NEXT: (global.get $__asyncify_state)
+;; CHECK-NEXT: )
diff --git a/test/lit/passes/asyncify_pass-arg=asyncify-addlist@foo.wast b/test/lit/passes/asyncify_pass-arg=asyncify-addlist@foo.wast
new file mode 100644
index 000000000..aed1e015f
--- /dev/null
+++ b/test/lit/passes/asyncify_pass-arg=asyncify-addlist@foo.wast
@@ -0,0 +1,193 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+;; NOTE: This test was ported using port_test.py and could be cleaned up.
+
+;; RUN: foreach %s %t wasm-opt --asyncify --pass-arg=asyncify-addlist@foo -S -o - | filecheck %s
+
+(module
+ (memory 1 2)
+ ;; CHECK: (type $none_=>_none (func))
+
+ ;; CHECK: (type $i32_=>_none (func (param i32)))
+
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (import "env" "import" (func $import))
+ (import "env" "import" (func $import))
+ ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0))
+
+ ;; CHECK: (memory $0 1 2)
+
+ ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind))
+
+ ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
+
+ ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind))
+
+ ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
+
+ ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state))
+
+ ;; CHECK: (func $foo
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.tee $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $nothing)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $foo ;; doesn't look like it needs instrumentation, but in add list
+ (call $nothing)
+ )
+ ;; CHECK: (func $bar
+ ;; CHECK-NEXT: (call $nothing)
+ ;; CHECK-NEXT: )
+ (func $bar ;; doesn't look like it needs instrumentation, and not in add list
+ (call $nothing)
+ )
+ ;; CHECK: (func $nothing
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $nothing
+ )
+)
+
+;; CHECK: (func $asyncify_start_unwind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_unwind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_start_rewind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_rewind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_get_state (result i32)
+;; CHECK-NEXT: (global.get $__asyncify_state)
+;; CHECK-NEXT: )
diff --git a/test/lit/passes/asyncify_pass-arg=asyncify-addlist@foo_pass-arg=asyncify-ignore-indirect.wast b/test/lit/passes/asyncify_pass-arg=asyncify-addlist@foo_pass-arg=asyncify-ignore-indirect.wast
new file mode 100644
index 000000000..b514cdae0
--- /dev/null
+++ b/test/lit/passes/asyncify_pass-arg=asyncify-addlist@foo_pass-arg=asyncify-ignore-indirect.wast
@@ -0,0 +1,233 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+;; NOTE: This test was ported using port_test.py and could be cleaned up.
+
+;; RUN: foreach %s %t wasm-opt --asyncify --pass-arg=asyncify-addlist@foo --pass-arg=asyncify-ignore-indirect -S -o - | filecheck %s
+
+(module
+ ;; CHECK: (type $t (func))
+ (type $t (func))
+ (memory 1 2)
+ (table 1 funcref)
+ (elem (i32.const 0))
+ ;; CHECK: (type $i32_=>_none (func (param i32)))
+
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (import "env" "import" (func $import))
+ (import "env" "import" (func $import))
+ ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0))
+
+ ;; CHECK: (memory $0 1 2)
+
+ ;; CHECK: (table $0 1 funcref)
+
+ ;; CHECK: (elem (i32.const 0))
+
+ ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind))
+
+ ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
+
+ ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind))
+
+ ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
+
+ ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state))
+
+ ;; CHECK: (func $foo
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $nothing)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call_indirect (type $t)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $foo ;; doesn't look like it needs instrumentation, but in add list
+ (call $nothing)
+ (call_indirect (type $t) (i32.const 0))
+ )
+ ;; CHECK: (func $bar
+ ;; CHECK-NEXT: (call $nothing)
+ ;; CHECK-NEXT: (call_indirect (type $t)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $bar ;; doesn't look like it needs instrumentation, and not in add list
+ (call $nothing)
+ (call_indirect (type $t) (i32.const 0))
+ )
+ ;; CHECK: (func $nothing
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $nothing
+ )
+)
+
+;; CHECK: (func $asyncify_start_unwind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_unwind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_start_rewind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_rewind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_get_state (result i32)
+;; CHECK-NEXT: (global.get $__asyncify_state)
+;; CHECK-NEXT: )
diff --git a/test/lit/passes/asyncify_pass-arg=asyncify-asserts_pass-arg=asyncify-onlylist@waka.wast b/test/lit/passes/asyncify_pass-arg=asyncify-asserts_pass-arg=asyncify-onlylist@waka.wast
new file mode 100644
index 000000000..8f263efc8
--- /dev/null
+++ b/test/lit/passes/asyncify_pass-arg=asyncify-asserts_pass-arg=asyncify-onlylist@waka.wast
@@ -0,0 +1,249 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+;; NOTE: This test was ported using port_test.py and could be cleaned up.
+
+;; RUN: foreach %s %t wasm-opt --asyncify --pass-arg=asyncify-asserts --pass-arg=asyncify-onlylist@waka -S -o - | filecheck %s
+
+(module
+ (memory 1 2)
+ ;; CHECK: (type $f (func))
+ (type $f (func))
+ ;; CHECK: (type $i32_=>_none (func (param i32)))
+
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (import "env" "import" (func $import))
+ (import "env" "import" (func $import))
+ ;; CHECK: (import "env" "import2" (func $import2 (result i32)))
+ (import "env" "import2" (func $import2 (result i32)))
+ ;; CHECK: (import "env" "import3" (func $import3 (param i32)))
+ (import "env" "import3" (func $import3 (param i32)))
+ (table funcref (elem $calls-import2-drop $calls-import2-drop))
+ ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0))
+
+ ;; CHECK: (memory $0 1 2)
+
+ ;; CHECK: (table $0 2 2 funcref)
+
+ ;; CHECK: (elem (i32.const 0) $calls-import2-drop $calls-import2-drop)
+
+ ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind))
+
+ ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
+
+ ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind))
+
+ ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
+
+ ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state))
+
+ ;; CHECK: (func $calls-import
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.ne
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-import
+ (call $import)
+ )
+ ;; CHECK: (func $calls-import2-drop
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block (result i32)
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (call $import2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.ne
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-import2-drop
+ (drop (call $import2))
+ )
+ ;; CHECK: (func $returns (result i32)
+ ;; CHECK-NEXT: (local $x i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (local $6 i32)
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (block (result i32)
+ ;; CHECK-NEXT: (local.set $6
+ ;; CHECK-NEXT: (call $import2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.ne
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $x
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $returns (result i32)
+ (local $x i32)
+ (local.set $x (call $import2))
+ (local.get $x)
+ )
+ ;; CHECK: (func $calls-indirect (param $x i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call_indirect (type $f)
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.ne
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-indirect (param $x i32)
+ (call_indirect (type $f)
+ (local.get $x)
+ )
+ )
+)
+
+;; CHECK: (func $asyncify_start_unwind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_unwind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_start_rewind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_rewind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_get_state (result i32)
+;; CHECK-NEXT: (global.get $__asyncify_state)
+;; CHECK-NEXT: )
diff --git a/test/lit/passes/asyncify_pass-arg=asyncify-blacklist@foo,bar.wast b/test/lit/passes/asyncify_pass-arg=asyncify-blacklist@foo,bar.wast
new file mode 100644
index 000000000..66462900f
--- /dev/null
+++ b/test/lit/passes/asyncify_pass-arg=asyncify-blacklist@foo,bar.wast
@@ -0,0 +1,308 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+;; NOTE: This test was ported using port_test.py and could be cleaned up.
+
+;; RUN: foreach %s %t wasm-opt --asyncify --pass-arg=asyncify-blacklist@foo,bar -S -o - | filecheck %s
+
+(module
+ (memory 1 2)
+ ;; CHECK: (type $none_=>_none (func))
+
+ ;; CHECK: (type $i32_=>_none (func (param i32)))
+
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (import "env" "import" (func $import))
+ (import "env" "import" (func $import))
+ ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0))
+
+ ;; CHECK: (memory $0 1 2)
+
+ ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind))
+
+ ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
+
+ ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind))
+
+ ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
+
+ ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state))
+
+ ;; CHECK: (func $foo
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: )
+ (func $foo
+ (call $import)
+ )
+ ;; CHECK: (func $bar
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: )
+ (func $bar
+ (call $import)
+ )
+ ;; CHECK: (func $baz
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $baz
+ (call $import)
+ )
+ ;; CHECK: (func $other1
+ ;; CHECK-NEXT: (call $foo)
+ ;; CHECK-NEXT: )
+ (func $other1
+ (call $foo)
+ )
+ ;; CHECK: (func $other2
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $baz)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $other2
+ (call $baz)
+ )
+)
+
+;; CHECK: (func $asyncify_start_unwind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_unwind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_start_rewind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_rewind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_get_state (result i32)
+;; CHECK-NEXT: (global.get $__asyncify_state)
+;; CHECK-NEXT: )
diff --git a/test/lit/passes/asyncify_pass-arg=asyncify-ignore-imports.wast b/test/lit/passes/asyncify_pass-arg=asyncify-ignore-imports.wast
new file mode 100644
index 000000000..41297c6ba
--- /dev/null
+++ b/test/lit/passes/asyncify_pass-arg=asyncify-ignore-imports.wast
@@ -0,0 +1,305 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+;; NOTE: This test was ported using port_test.py and could be cleaned up.
+
+;; RUN: foreach %s %t wasm-opt --asyncify --pass-arg=asyncify-ignore-imports -S -o - | filecheck %s
+
+(module
+ (memory 1 2)
+ ;; CHECK: (type $f (func))
+ (type $f (func))
+ ;; CHECK: (type $i32_=>_none (func (param i32)))
+
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (import "env" "import" (func $import))
+ (import "env" "import" (func $import))
+ ;; CHECK: (import "env" "import2" (func $import2 (result i32)))
+ (import "env" "import2" (func $import2 (result i32)))
+ ;; CHECK: (import "env" "import3" (func $import3 (param i32)))
+ (import "env" "import3" (func $import3 (param i32)))
+ (table funcref (elem $calls-import2-drop $calls-import2-drop))
+ ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0))
+
+ ;; CHECK: (memory $0 1 2)
+
+ ;; CHECK: (table $0 2 2 funcref)
+
+ ;; CHECK: (elem (i32.const 0) $calls-import2-drop $calls-import2-drop)
+
+ ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind))
+
+ ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
+
+ ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind))
+
+ ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
+
+ ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state))
+
+ ;; CHECK: (func $calls-import
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: )
+ (func $calls-import
+ (call $import)
+ )
+ ;; CHECK: (func $calls-import2-drop
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (call $import2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-import2-drop
+ (drop (call $import2))
+ )
+ ;; CHECK: (func $calls-import2-if-else (param $x i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (call $import3
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $import3
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-import2-if-else (param $x i32)
+ (if (local.get $x)
+ (call $import3 (i32.const 1))
+ (call $import3 (i32.const 2))
+ )
+ )
+ ;; CHECK: (func $calls-indirect (param $x i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call_indirect (type $f)
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-indirect (param $x i32)
+ (call_indirect (type $f)
+ (local.get $x)
+ )
+ )
+)
+
+;; CHECK: (func $asyncify_start_unwind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_unwind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_start_rewind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_rewind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_get_state (result i32)
+;; CHECK-NEXT: (global.get $__asyncify_state)
+;; CHECK-NEXT: )
diff --git a/test/lit/passes/asyncify_pass-arg=asyncify-ignore-indirect.wast b/test/lit/passes/asyncify_pass-arg=asyncify-ignore-indirect.wast
new file mode 100644
index 000000000..8fb5518e4
--- /dev/null
+++ b/test/lit/passes/asyncify_pass-arg=asyncify-ignore-indirect.wast
@@ -0,0 +1,579 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+;; NOTE: This test was ported using port_test.py and could be cleaned up.
+
+;; RUN: foreach %s %t wasm-opt --asyncify --pass-arg=asyncify-ignore-indirect -S -o - | filecheck %s
+
+(module
+ (memory 1 2)
+ ;; CHECK: (type $f (func))
+ (type $f (func))
+ ;; CHECK: (type $i32_=>_none (func (param i32)))
+
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (import "env" "import" (func $import))
+ (import "env" "import" (func $import))
+ ;; CHECK: (import "env" "import2" (func $import2 (result i32)))
+ (import "env" "import2" (func $import2 (result i32)))
+ ;; CHECK: (import "env" "import3" (func $import3 (param i32)))
+ (import "env" "import3" (func $import3 (param i32)))
+ (table funcref (elem $calls-import2-drop $calls-import2-drop))
+ ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0))
+
+ ;; CHECK: (memory $0 1 2)
+
+ ;; CHECK: (table $0 2 2 funcref)
+
+ ;; CHECK: (elem (i32.const 0) $calls-import2-drop $calls-import2-drop)
+
+ ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind))
+
+ ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
+
+ ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind))
+
+ ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
+
+ ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state))
+
+ ;; CHECK: (func $calls-import
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $calls-import
+ (call $import)
+ )
+ ;; CHECK: (func $calls-import2-drop
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (call $import2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-import2-drop
+ (drop (call $import2))
+ )
+ ;; CHECK: (func $calls-import2-if-else (param $x i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (local $6 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.or
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import3
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.or
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import3
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $6
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-import2-if-else (param $x i32)
+ (if (local.get $x)
+ (call $import3 (i32.const 1))
+ (call $import3 (i32.const 2))
+ )
+ )
+ ;; CHECK: (func $calls-indirect (param $x i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call_indirect (type $f)
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-indirect (param $x i32)
+ (call_indirect (type $f)
+ (local.get $x)
+ )
+ )
+)
+
+;; CHECK: (func $asyncify_start_unwind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_unwind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_start_rewind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_rewind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_get_state (result i32)
+;; CHECK-NEXT: (global.get $__asyncify_state)
+;; CHECK-NEXT: )
diff --git a/test/lit/passes/asyncify_pass-arg=asyncify-imports@env.import,env.import2.wast b/test/lit/passes/asyncify_pass-arg=asyncify-imports@env.import,env.import2.wast
new file mode 100644
index 000000000..7ca59a47c
--- /dev/null
+++ b/test/lit/passes/asyncify_pass-arg=asyncify-imports@env.import,env.import2.wast
@@ -0,0 +1,1886 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+;; NOTE: This test was ported using port_test.py and could be cleaned up.
+
+;; RUN: foreach %s %t wasm-opt --asyncify --pass-arg=asyncify-imports@env.import,env.import2 -S -o - | filecheck %s
+
+;; Pre-existing imports that the pass turns into the implementations.
+(module
+ (memory 1 2)
+ (import "asyncify" "start_unwind" (func $asyncify_start_unwind (param i32)))
+ (import "asyncify" "start_rewind" (func $asyncify_start_rewind (param i32)))
+ (import "asyncify" "stop_rewind" (func $asyncify_stop_rewind))
+ ;; CHECK: (type $none_=>_none (func))
+
+ ;; CHECK: (type $i32_=>_none (func (param i32)))
+
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (global $sleeping (mut i32) (i32.const 0))
+ (global $sleeping (mut i32) (i32.const 0))
+ ;; do a sleep operation: start a sleep if running, or resume after a sleep
+ ;; if we just rewound.
+ ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0))
+
+ ;; CHECK: (memory $0 1 2)
+
+ ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind))
+
+ ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
+
+ ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind))
+
+ ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
+
+ ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state))
+
+ ;; CHECK: (func $do_sleep
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (global.get $sleeping)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (block $block
+ ;; CHECK-NEXT: (global.set $sleeping
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $asyncify_start_unwind
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block $block0
+ ;; CHECK-NEXT: (global.set $sleeping
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $asyncify_stop_rewind)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $do_sleep
+ (if
+ (i32.eqz (global.get $sleeping))
+ (block
+ (global.set $sleeping (i32.const 1))
+ ;; we should set up the data at address 4 around here
+ (call $asyncify_start_unwind (i32.const 4))
+ )
+ (block
+ (global.set $sleeping (i32.const 0))
+ (call $asyncify_stop_rewind)
+ )
+ )
+ )
+ ;; a function that does some work and has a sleep (async pause/resume) in the middle
+ ;; CHECK: (func $work
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $stuff)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $do_sleep)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $stuff)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $work
+ (call $stuff) ;; do some work
+ (call $do_sleep) ;; take a break
+ (call $stuff) ;; do some more work
+ )
+ ;; CHECK: (func $stuff
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $stuff)
+ ;; the first event called from the main event loop: just call into $work
+ ;; CHECK: (func $first_event
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $work)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $first_event
+ (call $work)
+ ;; work will sleep, so we exit through here while it is paused
+ )
+ ;; the second event called from the main event loop: to resume $work,
+ ;; initiate a rewind, and then do the call to start things back up
+ ;; CHECK: (func $second_event
+ ;; CHECK-NEXT: (call $asyncify_start_rewind
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $work)
+ ;; CHECK-NEXT: )
+ (func $second_event
+ (call $asyncify_start_rewind (i32.const 4))
+ (call $work)
+ )
+ ;; a function that can't do a sleep
+ ;; CHECK: (func $never_sleep
+ ;; CHECK-NEXT: (call $stuff)
+ ;; CHECK-NEXT: (call $stuff)
+ ;; CHECK-NEXT: (call $stuff)
+ ;; CHECK-NEXT: )
+ (func $never_sleep
+ (call $stuff)
+ (call $stuff)
+ (call $stuff)
+ )
+)
+;; Calls to imports that will call into asyncify themselves.
+;; CHECK: (func $asyncify_start_unwind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_unwind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_start_rewind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_rewind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_get_state (result i32)
+;; CHECK-NEXT: (global.get $__asyncify_state)
+;; CHECK-NEXT: )
+(module
+ (memory 1 2)
+ ;; CHECK: (type $none_=>_none (func))
+
+ ;; CHECK: (type $i32_=>_none (func (param i32)))
+
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (type $i32_=>_i32 (func (param i32) (result i32)))
+
+ ;; CHECK: (import "env" "import" (func $import))
+ (import "env" "import" (func $import))
+ ;; CHECK: (import "env" "import2" (func $import2 (result i32)))
+ (import "env" "import2" (func $import2 (result i32)))
+ ;; CHECK: (import "env" "import3" (func $import3 (param i32)))
+ (import "env" "import3" (func $import3 (param i32)))
+ ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0))
+
+ ;; CHECK: (memory $0 1 2)
+
+ ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind))
+
+ ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
+
+ ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind))
+
+ ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
+
+ ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state))
+
+ ;; CHECK: (func $calls-import
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $calls-import
+ (call $import)
+ )
+ ;; CHECK: (func $calls-import2 (result i32)
+ ;; CHECK-NEXT: (local $temp i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (local $6 i32)
+ ;; CHECK-NEXT: (local $7 i32)
+ ;; CHECK-NEXT: (local $8 i32)
+ ;; CHECK-NEXT: (local $9 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $8
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $8)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $6
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $7
+ ;; CHECK-NEXT: (call $import2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $7)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $temp
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (local.get $temp)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $9
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $9)
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ (func $calls-import2 (result i32)
+ (local $temp i32)
+ (local.set $temp (call $import2))
+ (return (local.get $temp))
+ )
+ ;; CHECK: (func $calls-import2-drop
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (call $import2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-import2-drop
+ (drop (call $import2))
+ )
+ ;; CHECK: (func $calls-nothing
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (i32.eqz
+ ;; CHECK-NEXT: (i32.const 17)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-nothing
+ (drop (i32.eqz (i32.const 17)))
+ )
+ ;; CHECK: (func $many-locals (param $x i32) (result i32)
+ ;; CHECK-NEXT: (local $y i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (local $6 i32)
+ ;; CHECK-NEXT: (local $7 i32)
+ ;; CHECK-NEXT: (local $8 i32)
+ ;; CHECK-NEXT: (local $9 i32)
+ ;; CHECK-NEXT: (local $10 i32)
+ ;; CHECK-NEXT: (local $11 i32)
+ ;; CHECK-NEXT: (local $12 i32)
+ ;; CHECK-NEXT: (local $13 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $12
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $y
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $12)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $10
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $11
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (loop $l
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (local.get $y)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $x
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (i32.div_s
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: (i32.const 3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $y
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $6
+ ;; CHECK-NEXT: (local.get $y)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br_if $l
+ ;; CHECK-NEXT: (local.get $6)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $11)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $7
+ ;; CHECK-NEXT: (local.get $y)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (local.get $7)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $10)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $13
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $13)
+ ;; CHECK-NEXT: (local.get $y)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ (func $many-locals (param $x i32) (result i32)
+ (local $y i32)
+ (loop $l
+ (local.set $x
+ (i32.add (local.get $y) (i32.const 1))
+ )
+ (local.set $y
+ (i32.div_s (local.get $x) (i32.const 3))
+ )
+ (br_if $l (local.get $y))
+ )
+ (call $import)
+ (return (local.get $y))
+ )
+ ;; CHECK: (func $calls-import2-if (param $x i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.or
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $calls-import2-if (param $x i32)
+ (if (local.get $x)
+ (call $import)
+ )
+ )
+ ;; CHECK: (func $calls-import2-if-else (param $x i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (call $import3
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $import3
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-import2-if-else (param $x i32)
+ (if (local.get $x)
+ (call $import3 (i32.const 1))
+ (call $import3 (i32.const 2))
+ )
+ )
+ ;; CHECK: (func $calls-import2-if-else-oneside (param $x i32) (result i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $import3
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (i32.const 3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-import2-if-else-oneside (param $x i32) (result i32)
+ (if (local.get $x)
+ (return (i32.const 1))
+ (call $import3 (i32.const 2))
+ )
+ (return (i32.const 3))
+ )
+ ;; CHECK: (func $calls-import2-if-else-oneside2 (param $x i32) (result i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (call $import3
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return
+ ;; CHECK-NEXT: (i32.const 3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-import2-if-else-oneside2 (param $x i32) (result i32)
+ (if (local.get $x)
+ (call $import3 (i32.const 1))
+ (return (i32.const 2))
+ )
+ (return (i32.const 3))
+ )
+ ;; CHECK: (func $calls-loop (param $x i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (loop $l
+ ;; CHECK-NEXT: (call $import3
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $x
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br_if $l
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-loop (param $x i32)
+ (loop $l
+ (call $import3 (i32.const 1))
+ (local.set $x
+ (i32.add (local.get $x) (i32.const 1))
+ )
+ (br_if $l
+ (local.get $x)
+ )
+ )
+ )
+ ;; CHECK: (func $calls-loop2
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (local $2 i32)
+ ;; CHECK-NEXT: (local $3 i32)
+ ;; CHECK-NEXT: (local $4 i32)
+ ;; CHECK-NEXT: (local $5 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $4
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (local.get $4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $2
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (loop $l
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $2)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $3
+ ;; CHECK-NEXT: (call $import2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (local.get $3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br_if $l
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (local.set $5
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (local.get $5)
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $calls-loop2
+ (loop $l
+ (br_if $l
+ (call $import2)
+ )
+ )
+ )
+ ;; CHECK: (func $calls-mix
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $boring)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $boring)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $calls-mix
+ (call $boring)
+ (call $import)
+ (call $boring)
+ (call $import)
+ )
+ ;; CHECK: (func $boring
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $boring)
+ ;; CHECK: (func $calls-mix-deep
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $boring-deep)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import-deep)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $boring)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $calls-mix-deep
+ (call $boring-deep)
+ (call $import-deep)
+ (call $boring)
+ (call $import)
+ )
+ ;; CHECK: (func $boring-deep
+ ;; CHECK-NEXT: (call $boring)
+ ;; CHECK-NEXT: )
+ (func $boring-deep
+ (call $boring)
+ )
+ ;; CHECK: (func $import-deep
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $import-deep
+ (call $import)
+ )
+)
+
+;; CHECK: (func $asyncify_start_unwind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_unwind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_start_rewind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_rewind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_get_state (result i32)
+;; CHECK-NEXT: (global.get $__asyncify_state)
+;; CHECK-NEXT: )
diff --git a/test/lit/passes/asyncify_pass-arg=asyncify-onlylist@foo,bar.wast b/test/lit/passes/asyncify_pass-arg=asyncify-onlylist@foo,bar.wast
new file mode 100644
index 000000000..494794c9f
--- /dev/null
+++ b/test/lit/passes/asyncify_pass-arg=asyncify-onlylist@foo,bar.wast
@@ -0,0 +1,308 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+;; NOTE: This test was ported using port_test.py and could be cleaned up.
+
+;; RUN: foreach %s %t wasm-opt --asyncify --pass-arg=asyncify-onlylist@foo,bar -S -o - | filecheck %s
+
+(module
+ (memory 1 2)
+ ;; CHECK: (type $none_=>_none (func))
+
+ ;; CHECK: (type $i32_=>_none (func (param i32)))
+
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (import "env" "import" (func $import))
+ (import "env" "import" (func $import))
+ ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0))
+
+ ;; CHECK: (memory $0 1 2)
+
+ ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind))
+
+ ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
+
+ ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind))
+
+ ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
+
+ ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state))
+
+ ;; CHECK: (func $foo
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $foo
+ (call $import)
+ )
+ ;; CHECK: (func $bar
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $bar
+ (call $import)
+ )
+ ;; CHECK: (func $baz
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: )
+ (func $baz
+ (call $import)
+ )
+ ;; CHECK: (func $other1
+ ;; CHECK-NEXT: (call $foo)
+ ;; CHECK-NEXT: )
+ (func $other1
+ (call $foo) ;; even though we call foo, we are not in the only list, so do not instrument us
+ )
+ ;; CHECK: (func $other2
+ ;; CHECK-NEXT: (call $baz)
+ ;; CHECK-NEXT: )
+ (func $other2
+ (call $baz)
+ )
+)
+
+;; CHECK: (func $asyncify_start_unwind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_unwind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_start_rewind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_rewind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_get_state (result i32)
+;; CHECK-NEXT: (global.get $__asyncify_state)
+;; CHECK-NEXT: )
diff --git a/test/lit/passes/asyncify_pass-arg=asyncify-verbose.wast b/test/lit/passes/asyncify_pass-arg=asyncify-verbose.wast
new file mode 100644
index 000000000..7d55d8336
--- /dev/null
+++ b/test/lit/passes/asyncify_pass-arg=asyncify-verbose.wast
@@ -0,0 +1,386 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+;; NOTE: This test was ported using port_test.py and could be cleaned up.
+
+;; RUN: foreach %s %t wasm-opt --asyncify --pass-arg=asyncify-verbose -S -o - | filecheck %s
+
+(module
+ (memory 1 2)
+ ;; CHECK: (type $none_=>_none (func))
+
+ ;; CHECK: (type $i32_=>_none (func (param i32)))
+
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (import "env" "import" (func $import))
+ (import "env" "import" (func $import))
+ ;; CHECK: (global $__asyncify_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__asyncify_data (mut i32) (i32.const 0))
+
+ ;; CHECK: (memory $0 1 2)
+
+ ;; CHECK: (export "asyncify_start_unwind" (func $asyncify_start_unwind))
+
+ ;; CHECK: (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
+
+ ;; CHECK: (export "asyncify_start_rewind" (func $asyncify_start_rewind))
+
+ ;; CHECK: (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
+
+ ;; CHECK: (export "asyncify_get_state" (func $asyncify_get_state))
+
+ ;; CHECK: (func $calls-import
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $calls-import
+ (call $import)
+ )
+ ;; CHECK: (func $calls-calls-import
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $calls-import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $calls-calls-import
+ (call $calls-import)
+ )
+ ;; CHECK: (func $calls-calls-calls-import
+ ;; CHECK-NEXT: (local $0 i32)
+ ;; CHECK-NEXT: (local $1 i32)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $0
+ ;; CHECK-NEXT: (block $__asyncify_unwind (result i32)
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const -4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.set $1
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (if (result i32)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (local.get $1)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (call $calls-calls-import)
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (i32.eq
+ ;; CHECK-NEXT: (global.get $__asyncify_state)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (br $__asyncify_unwind
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (return)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (local.get $0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.store
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: (i32.add
+ ;; CHECK-NEXT: (i32.load
+ ;; CHECK-NEXT: (global.get $__asyncify_data)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $calls-calls-calls-import
+ (call $calls-calls-import)
+ )
+ ;; CHECK: (func $nothing
+ ;; CHECK-NEXT: (nop)
+ ;; CHECK-NEXT: )
+ (func $nothing
+ (nop)
+ )
+)
+
+;; CHECK: (func $asyncify_start_unwind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_unwind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_start_rewind (param $0 i32)
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (global.set $__asyncify_data
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_stop_rewind
+;; CHECK-NEXT: (global.set $__asyncify_state
+;; CHECK-NEXT: (i32.const 0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (if
+;; CHECK-NEXT: (i32.gt_u
+;; CHECK-NEXT: (i32.load
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.load offset=4
+;; CHECK-NEXT: (global.get $__asyncify_data)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (unreachable)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $asyncify_get_state (result i32)
+;; CHECK-NEXT: (global.get $__asyncify_state)
+;; CHECK-NEXT: )
diff --git a/test/passes/asyncify.txt b/test/passes/asyncify.txt
deleted file mode 100644
index faf8fc54f..000000000
--- a/test/passes/asyncify.txt
+++ /dev/null
@@ -1,1261 +0,0 @@
-(module
- (type $f (func (param i32)))
- (type $i32_i32_=>_none (func (param i32 i32)))
- (type $none_=>_none (func))
- (type $none_=>_i32 (func (result i32)))
- (import "env" "import" (func $import))
- (import "env" "import2" (func $import2 (param i32)))
- (global $__asyncify_state (mut i32) (i32.const 0))
- (global $__asyncify_data (mut i32) (i32.const 0))
- (memory $0 1 2)
- (table $0 2 2 funcref)
- (elem (i32.const 0) $liveness2 $liveness2)
- (export "asyncify_start_unwind" (func $asyncify_start_unwind))
- (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
- (export "asyncify_start_rewind" (func $asyncify_start_rewind))
- (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
- (export "asyncify_get_state" (func $asyncify_get_state))
- (func $liveness1 (param $live0 i32) (param $dead0 i32)
- (local $live1 i32)
- (local $dead1 i32)
- (local $4 i32)
- (local $5 i32)
- (local $6 i32)
- (local $7 i32)
- (local $8 i32)
- (local $9 i32)
- (local $10 i32)
- (local $11 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -8)
- )
- )
- (local.set $10
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $live0
- (i32.load
- (local.get $10)
- )
- )
- (local.set $live1
- (i32.load offset=4
- (local.get $10)
- )
- )
- )
- )
- (local.set $8
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $9
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (block
- (local.set $4
- (local.get $dead0)
- )
- (drop
- (local.get $4)
- )
- (local.set $5
- (local.get $dead1)
- )
- (drop
- (local.get $5)
- )
- )
- )
- (nop)
- (nop)
- (nop)
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $9)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (block
- (local.set $6
- (local.get $live0)
- )
- (drop
- (local.get $6)
- )
- (local.set $7
- (local.get $live1)
- )
- (drop
- (local.get $7)
- )
- )
- )
- (nop)
- (nop)
- (nop)
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $8)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $11
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $11)
- (local.get $live0)
- )
- (i32.store offset=4
- (local.get $11)
- (local.get $live1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 8)
- )
- )
- )
- )
- (func $liveness2 (param $live0 i32) (param $dead0 i32)
- (local $live1 i32)
- (local $dead1 i32)
- (local $4 i32)
- (local $5 i32)
- (local $6 i32)
- (local $7 i32)
- (local $8 i32)
- (local $9 i32)
- (local $10 i32)
- (local $11 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -8)
- )
- )
- (local.set $10
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $live0
- (i32.load
- (local.get $10)
- )
- )
- (local.set $live1
- (i32.load offset=4
- (local.get $10)
- )
- )
- )
- )
- (local.set $8
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $9
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (block
- (local.set $4
- (local.get $dead0)
- )
- (drop
- (local.get $4)
- )
- (local.set $5
- (local.get $dead1)
- )
- (drop
- (local.get $5)
- )
- )
- )
- (nop)
- (nop)
- (nop)
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $9)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (block
- (local.set $6
- (local.get $live0)
- )
- (drop
- (local.get $6)
- )
- (local.set $7
- (local.get $live1)
- )
- (drop
- (local.get $7)
- )
- )
- )
- (nop)
- (nop)
- (nop)
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $8)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $11
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $11)
- (local.get $live0)
- )
- (i32.store offset=4
- (local.get $11)
- (local.get $live1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 8)
- )
- )
- )
- )
- (func $liveness3 (param $live0 i32) (param $dead0 i32)
- (local $live1 i32)
- (local $dead1 i32)
- (local $4 i32)
- (local $5 i32)
- (local $6 i32)
- (local $7 i32)
- (local $8 i32)
- (local $9 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -8)
- )
- )
- (local.set $8
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $live0
- (i32.load
- (local.get $8)
- )
- )
- (local.set $live1
- (i32.load offset=4
- (local.get $8)
- )
- )
- )
- )
- (local.set $6
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $7
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $7)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (block
- (local.set $4
- (local.get $live0)
- )
- (drop
- (local.get $4)
- )
- )
- )
- (nop)
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $7)
- (i32.const 1)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 1)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (block
- (local.set $5
- (local.get $live1)
- )
- (drop
- (local.get $5)
- )
- )
- )
- (nop)
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $6)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $9
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $9)
- (local.get $live0)
- )
- (i32.store offset=4
- (local.get $9)
- (local.get $live1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 8)
- )
- )
- )
- )
- (func $liveness4 (param $live0 i32) (param $dead0 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (local $6 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $5
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $live0
- (i32.load
- (local.get $5)
- )
- )
- )
- )
- (local.set $3
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $4
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (i32.or
- (i32.const 0)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $4)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (block
- (local.set $2
- (local.get $live0)
- )
- (drop
- (local.get $2)
- )
- )
- )
- (nop)
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $3)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $6
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $6)
- (local.get $live0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- )
- (func $liveness5 (param $dead0 i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $3
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $4
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (block
- (local.set $1
- (local.get $dead0)
- )
- (drop
- (local.get $1)
- )
- )
- )
- (nop)
- (if
- (i32.or
- (i32.const 0)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $4)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (block
- (local.set $dead0
- (i32.const 1)
- )
- (local.set $2
- (local.get $dead0)
- )
- (drop
- (local.get $2)
- )
- )
- )
- (nop)
- (nop)
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $3)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $liveness-call-kills (param $live i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $4
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $1
- (i32.load
- (local.get $4)
- )
- )
- )
- )
- (local.set $2
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $3
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (local.set $1
- (local.get $live)
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $3)
- (i32.const 0)
- )
- )
- (block
- (call $import2
- (local.get $1)
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $2)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $5
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $5)
- (local.get $1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- )
- (func $liveness-indirect-kills (param $live0 i32) (param $live1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (local $6 i32)
- (local $7 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -8)
- )
- )
- (local.set $6
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $2
- (i32.load
- (local.get $6)
- )
- )
- (local.set $3
- (i32.load offset=4
- (local.get $6)
- )
- )
- )
- )
- (local.set $4
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $5
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (block
- (local.set $2
- (local.get $live0)
- )
- (local.set $3
- (local.get $live1)
- )
- )
- )
- (nop)
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $5)
- (i32.const 0)
- )
- )
- (block
- (call_indirect (type $f)
- (local.get $2)
- (local.get $3)
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $4)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $7
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $7)
- (local.get $2)
- )
- (i32.store offset=4
- (local.get $7)
- (local.get $3)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 8)
- )
- )
- )
- )
- (func $asyncify_start_unwind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 1)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_unwind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_start_rewind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 2)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_rewind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_get_state (result i32)
- (global.get $__asyncify_state)
- )
-)
diff --git a/test/passes/asyncify.wast b/test/passes/asyncify.wast
deleted file mode 100644
index e919a7e86..000000000
--- a/test/passes/asyncify.wast
+++ /dev/null
@@ -1,53 +0,0 @@
-(module
- (type $f (func (param i32)))
- (memory 1 2)
- (import "env" "import" (func $import))
- (import "env" "import2" (func $import2 (param i32)))
- (table funcref (elem $liveness2 $liveness2))
- (func $liveness1 (param $live0 i32) (param $dead0 i32)
- (local $live1 i32)
- (local $dead1 i32)
- (drop (local.get $dead0))
- (drop (local.get $dead1))
- (call $import)
- (drop (local.get $live0))
- (drop (local.get $live1))
- )
- (func $liveness2 (param $live0 i32) (param $dead0 i32)
- (local $live1 i32)
- (local $dead1 i32)
- (drop (local.get $dead0))
- (drop (local.get $dead1))
- (call $import)
- (drop (local.get $live0))
- (drop (local.get $live1))
- )
- (func $liveness3 (param $live0 i32) (param $dead0 i32)
- (local $live1 i32)
- (local $dead1 i32)
- (call $import)
- (drop (local.get $live0))
- (call $import)
- (drop (local.get $live1))
- )
- (func $liveness4 (param $live0 i32) (param $dead0 i32)
- (if (i32.const 0)
- (call $import)
- )
- (drop (local.get $live0))
- )
- (func $liveness5 (param $dead0 i32)
- (drop (local.get $dead0))
- (if (i32.const 0)
- (call $import) ;; live before and after call, but not during
- )
- (local.set $dead0 (i32.const 1))
- (drop (local.get $dead0))
- )
- (func $liveness-call-kills (param $live i32)
- (call $import2 (local.get $live))
- )
- (func $liveness-indirect-kills (param $live0 i32) (param $live1 i32)
- (call_indirect (type $f) (local.get $live0) (local.get $live1))
- )
-)
diff --git a/test/passes/asyncify_enable-multivalue.txt b/test/passes/asyncify_enable-multivalue.txt
deleted file mode 100644
index 31a6670ce..000000000
--- a/test/passes/asyncify_enable-multivalue.txt
+++ /dev/null
@@ -1,2592 +0,0 @@
-(module
- (type $none_=>_none (func))
- (type $i32_=>_none (func (param i32)))
- (type $none_=>_i32 (func (result i32)))
- (global $sleeping (mut i32) (i32.const 0))
- (global $__asyncify_state (mut i32) (i32.const 0))
- (global $__asyncify_data (mut i32) (i32.const 0))
- (memory $0 1 2)
- (export "asyncify_start_unwind" (func $asyncify_start_unwind))
- (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
- (export "asyncify_start_rewind" (func $asyncify_start_rewind))
- (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
- (export "asyncify_get_state" (func $asyncify_get_state))
- (func $do_sleep
- (local $0 i32)
- (local $1 i32)
- (local.set $0
- (global.get $sleeping)
- )
- (local.set $1
- (i32.eqz
- (local.get $0)
- )
- )
- (if
- (local.get $1)
- (block $block
- (global.set $sleeping
- (i32.const 1)
- )
- (call $asyncify_start_unwind
- (i32.const 4)
- )
- )
- (block $block0
- (global.set $sleeping
- (i32.const 0)
- )
- (call $asyncify_stop_rewind)
- )
- )
- )
- (func $work
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (call $stuff)
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $do_sleep)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (call $stuff)
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $stuff
- (nop)
- )
- (func $first_event
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $work)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $second_event
- (call $asyncify_stop_unwind)
- (call $asyncify_start_rewind
- (i32.const 4)
- )
- (call $work)
- )
- (func $never_sleep
- (call $stuff)
- (call $stuff)
- (call $stuff)
- )
- (func $asyncify_start_unwind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 1)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_unwind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_start_rewind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 2)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_rewind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_get_state (result i32)
- (global.get $__asyncify_state)
- )
-)
-(module
- (type $none_=>_none (func))
- (type $i32_=>_none (func (param i32)))
- (type $none_=>_i32 (func (result i32)))
- (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $none_=>_i32_i64 (func (result i32 i64)))
- (import "env" "import" (func $import))
- (import "env" "import2" (func $import2 (result i32)))
- (import "env" "import3" (func $import3 (param i32)))
- (import "env" "import-mv" (func $import-mv (result i32 i64)))
- (global $__asyncify_state (mut i32) (i32.const 0))
- (global $__asyncify_data (mut i32) (i32.const 0))
- (memory $0 1 2)
- (export "asyncify_start_unwind" (func $asyncify_start_unwind))
- (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
- (export "asyncify_start_rewind" (func $asyncify_start_rewind))
- (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
- (export "asyncify_get_state" (func $asyncify_get_state))
- (func $calls-import
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $calls-import2 (result i32)
- (local $temp i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (local $6 i32)
- (local $7 i32)
- (local $8 i32)
- (local $9 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $8
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $1
- (i32.load
- (local.get $8)
- )
- )
- )
- )
- (local.set $5
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $6
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (block
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $6)
- (i32.const 0)
- )
- )
- (block
- (local.set $7
- (call $import2)
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- (local.set $1
- (local.get $7)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (block
- (local.set $temp
- (local.get $1)
- )
- (local.set $2
- (local.get $temp)
- )
- (return
- (local.get $2)
- )
- )
- )
- (nop)
- (nop)
- )
- )
- (unreachable)
- )
- (unreachable)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $5)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $9
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $9)
- (local.get $1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (i32.const 0)
- )
- (func $calls-import2-drop
- (local $0 i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $4
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $0
- (i32.load
- (local.get $4)
- )
- )
- )
- )
- (local.set $1
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $2
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $2)
- (i32.const 0)
- )
- )
- (block
- (local.set $3
- (call $import2)
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- (local.set $0
- (local.get $3)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (drop
- (local.get $0)
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $5
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $5)
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- )
- (func $calls-nothing
- (local $0 i32)
- (local.set $0
- (i32.eqz
- (i32.const 17)
- )
- )
- (drop
- (local.get $0)
- )
- )
- (func $many-locals (param $x i32) (result i32)
- (local $y i32)
- (local $z (f32 i64))
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (local $6 i32)
- (local $7 i32)
- (local $8 i32)
- (local $9 i32)
- (local $10 i32)
- (local $11 i32)
- (local $12 i32)
- (local $13 i32)
- (local $14 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $13
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $y
- (i32.load
- (local.get $13)
- )
- )
- )
- )
- (local.set $11
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $12
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (loop $l
- (local.set $3
- (local.get $y)
- )
- (local.set $4
- (i32.add
- (local.get $3)
- (i32.const 1)
- )
- )
- (local.set $x
- (local.get $4)
- )
- (local.set $5
- (local.get $x)
- )
- (local.set $6
- (i32.div_s
- (local.get $5)
- (i32.const 3)
- )
- )
- (local.set $y
- (local.get $6)
- )
- (local.set $7
- (local.get $y)
- )
- (br_if $l
- (local.get $7)
- )
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $12)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (block
- (local.set $8
- (local.get $y)
- )
- (return
- (local.get $8)
- )
- )
- )
- (nop)
- )
- )
- (unreachable)
- )
- (unreachable)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $11)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $14
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $14)
- (local.get $y)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (i32.const 0)
- )
- (func $calls-import2-if (param $x i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $2
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $3
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (local.set $1
- (local.get $x)
- )
- )
- (if
- (i32.or
- (local.get $1)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $3)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $2)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $calls-import2-if-else (param $x i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (local $6 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $5
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $2
- (i32.load
- (local.get $5)
- )
- )
- )
- )
- (local.set $3
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $4
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (local.set $1
- (local.get $x)
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (local.set $2
- (local.get $1)
- )
- )
- (if
- (i32.or
- (local.get $2)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $4)
- (i32.const 0)
- )
- )
- (block
- (call $import3
- (i32.const 1)
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (if
- (i32.or
- (i32.eqz
- (local.get $2)
- )
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $4)
- (i32.const 1)
- )
- )
- (block
- (call $import3
- (i32.const 2)
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 1)
- )
- )
- )
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $3)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $6
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $6)
- (local.get $2)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- )
- (func $calls-import2-if-else-oneside (param $x i32) (result i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (local $6 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $5
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $6
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (local.set $1
- (local.get $x)
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (local.set $4
- (local.get $1)
- )
- )
- (if
- (i32.or
- (local.get $4)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (return
- (i32.const 1)
- )
- )
- )
- (if
- (i32.or
- (i32.eqz
- (local.get $4)
- )
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $6)
- (i32.const 0)
- )
- )
- (block
- (call $import3
- (i32.const 2)
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (return
- (i32.const 3)
- )
- )
- )
- )
- (unreachable)
- )
- (unreachable)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $5)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- (i32.const 0)
- )
- (func $calls-import2-if-else-oneside2 (param $x i32) (result i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (local $6 i32)
- (local $7 i32)
- (local $8 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $7
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $4
- (i32.load
- (local.get $7)
- )
- )
- )
- )
- (local.set $5
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $6
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (local.set $1
- (local.get $x)
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (local.set $4
- (local.get $1)
- )
- )
- (if
- (i32.or
- (local.get $4)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $6)
- (i32.const 0)
- )
- )
- (block
- (call $import3
- (i32.const 1)
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (if
- (i32.or
- (i32.eqz
- (local.get $4)
- )
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (return
- (i32.const 2)
- )
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (return
- (i32.const 3)
- )
- )
- )
- )
- (unreachable)
- )
- (unreachable)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $5)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $8
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $8)
- (local.get $4)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (i32.const 0)
- )
- (func $calls-mv
- (local $x (i32 i64))
- (local $1 (i32 i64))
- (local $2 i32)
- (local $3 i32)
- (local $4 (i32 i64))
- (local $5 i32)
- (local $6 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -12)
- )
- )
- (local.set $5
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $1
- (tuple.make
- (i32.load
- (local.get $5)
- )
- (i64.load offset=4 align=4
- (local.get $5)
- )
- )
- )
- )
- )
- (local.set $2
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $3
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $3)
- (i32.const 0)
- )
- )
- (block
- (local.set $4
- (call $import-mv)
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- (local.set $1
- (local.get $4)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (local.set $x
- (local.get $1)
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $2)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $6
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $6)
- (tuple.extract 0
- (local.get $1)
- )
- )
- (i64.store offset=4 align=4
- (local.get $6)
- (tuple.extract 1
- (local.get $1)
- )
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 12)
- )
- )
- )
- )
- (func $calls-loop (param $x i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (local $6 i32)
- (local $7 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $6
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $x
- (i32.load
- (local.get $6)
- )
- )
- )
- )
- (local.set $4
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $5
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (loop $l
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $5)
- (i32.const 0)
- )
- )
- (block
- (call $import3
- (i32.const 1)
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (block
- (local.set $1
- (local.get $x)
- )
- (local.set $2
- (i32.add
- (local.get $1)
- (i32.const 1)
- )
- )
- (local.set $x
- (local.get $2)
- )
- (local.set $3
- (local.get $x)
- )
- (br_if $l
- (local.get $3)
- )
- )
- )
- (nop)
- (nop)
- (nop)
- (nop)
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $4)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $7
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $7)
- (local.get $x)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- )
- (func $calls-loop2
- (local $0 i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $4
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $0
- (i32.load
- (local.get $4)
- )
- )
- )
- )
- (local.set $1
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $2
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (loop $l
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $2)
- (i32.const 0)
- )
- )
- (block
- (local.set $3
- (call $import2)
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- (local.set $0
- (local.get $3)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (br_if $l
- (local.get $0)
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $5
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $5)
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- )
- (func $calls-mix
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (call $boring)
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (call $boring)
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 1)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 1)
- )
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $boring
- (nop)
- )
- (func $calls-mix-deep
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (call $boring-deep)
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $import-deep)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (call $boring)
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 1)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 1)
- )
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $boring-deep
- (call $boring)
- )
- (func $import-deep
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $asyncify_start_unwind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 1)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_unwind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_start_rewind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 2)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_rewind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_get_state (result i32)
- (global.get $__asyncify_state)
- )
-)
-(module
- (type $i32_=>_none (func (param i32)))
- (type $none_=>_none (func))
- (type $none_=>_i32 (func (result i32)))
- (global $__asyncify_state (mut i32) (i32.const 0))
- (global $__asyncify_data (mut i32) (i32.const 0))
- (memory $0 1 1)
- (export "asyncify_start_unwind" (func $asyncify_start_unwind))
- (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
- (export "asyncify_start_rewind" (func $asyncify_start_rewind))
- (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
- (export "asyncify_get_state" (func $asyncify_get_state))
- (func $asyncify_start_unwind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 1)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_unwind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_start_rewind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 2)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_rewind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_get_state (result i32)
- (global.get $__asyncify_state)
- )
-)
diff --git a/test/passes/asyncify_enable-multivalue.wast b/test/passes/asyncify_enable-multivalue.wast
deleted file mode 100644
index 58734401a..000000000
--- a/test/passes/asyncify_enable-multivalue.wast
+++ /dev/null
@@ -1,157 +0,0 @@
-;; Pre-existing imports that the pass turns into the implementations.
-(module
- (memory 1 2)
- (import "asyncify" "start_unwind" (func $asyncify_start_unwind (param i32)))
- (import "asyncify" "stop_unwind" (func $asyncify_stop_unwind))
- (import "asyncify" "start_rewind" (func $asyncify_start_rewind (param i32)))
- (import "asyncify" "stop_rewind" (func $asyncify_stop_rewind))
- (global $sleeping (mut i32) (i32.const 0))
- ;; do a sleep operation: start a sleep if running, or resume after a sleep
- ;; if we just rewound.
- (func $do_sleep
- (if
- (i32.eqz (global.get $sleeping))
- (block
- (global.set $sleeping (i32.const 1))
- ;; we should set up the data at address 4 around here
- (call $asyncify_start_unwind (i32.const 4))
- )
- (block
- (global.set $sleeping (i32.const 0))
- (call $asyncify_stop_rewind)
- )
- )
- )
- ;; a function that does some work and has a sleep (async pause/resume) in the middle
- (func $work
- (call $stuff) ;; do some work
- (call $do_sleep) ;; take a break
- (call $stuff) ;; do some more work
- )
- (func $stuff)
- ;; the first event called from the main event loop: just call into $work
- (func $first_event
- (call $work)
- ;; work will sleep, so we exit through here while it is paused
- )
- ;; the second event called from the main event loop: to resume $work,
- ;; stop the unwind, then prepare a rewind, and initiate it by doing
- ;; the call to rewind the call stack back up to where it was
- (func $second_event
- (call $asyncify_stop_unwind)
- (call $asyncify_start_rewind (i32.const 4))
- (call $work)
- )
- ;; a function that can't do a sleep
- (func $never_sleep
- (call $stuff)
- (call $stuff)
- (call $stuff)
- )
-)
-;; Calls to imports that will call into asyncify themselves.
-(module
- (memory 1 2)
- (import "env" "import" (func $import))
- (import "env" "import2" (func $import2 (result i32)))
- (import "env" "import3" (func $import3 (param i32)))
- (import "env" "import-mv" (func $import-mv (result i32 i64)))
- (func $calls-import
- (call $import)
- )
- (func $calls-import2 (result i32)
- (local $temp i32)
- (local.set $temp (call $import2))
- (return (local.get $temp))
- )
- (func $calls-import2-drop
- (drop (call $import2))
- )
- (func $calls-nothing
- (drop (i32.eqz (i32.const 17)))
- )
- (func $many-locals (param $x i32) (result i32)
- (local $y i32)
- (local $z (f32 i64))
- (loop $l
- (local.set $x
- (i32.add (local.get $y) (i32.const 1))
- )
- (local.set $y
- (i32.div_s (local.get $x) (i32.const 3))
- )
- (br_if $l (local.get $y))
- )
- (call $import)
- (return (local.get $y))
- )
- (func $calls-import2-if (param $x i32)
- (if (local.get $x)
- (call $import)
- )
- )
- (func $calls-import2-if-else (param $x i32)
- (if (local.get $x)
- (call $import3 (i32.const 1))
- (call $import3 (i32.const 2))
- )
- )
- (func $calls-import2-if-else-oneside (param $x i32) (result i32)
- (if (local.get $x)
- (return (i32.const 1))
- (call $import3 (i32.const 2))
- )
- (return (i32.const 3))
- )
- (func $calls-import2-if-else-oneside2 (param $x i32) (result i32)
- (if (local.get $x)
- (call $import3 (i32.const 1))
- (return (i32.const 2))
- )
- (return (i32.const 3))
- )
- (func $calls-mv
- (local $x (i32 i64))
- (local.set $x (call $import-mv))
- )
- (func $calls-loop (param $x i32)
- (loop $l
- (call $import3 (i32.const 1))
- (local.set $x
- (i32.add (local.get $x) (i32.const 1))
- )
- (br_if $l
- (local.get $x)
- )
- )
- )
- (func $calls-loop2
- (loop $l
- (br_if $l
- (call $import2)
- )
- )
- )
- (func $calls-mix
- (call $boring)
- (call $import)
- (call $boring)
- (call $import)
- )
- (func $boring)
- (func $calls-mix-deep
- (call $boring-deep)
- (call $import-deep)
- (call $boring)
- (call $import)
- )
- (func $boring-deep
- (call $boring)
- )
- (func $import-deep
- (call $import)
- )
-)
-;; empty module, in particular with no memory
-(module
-)
diff --git a/test/passes/asyncify_mod-asyncify-always-and-only-unwind.txt b/test/passes/asyncify_mod-asyncify-always-and-only-unwind.txt
deleted file mode 100644
index d89c8a3bf..000000000
--- a/test/passes/asyncify_mod-asyncify-always-and-only-unwind.txt
+++ /dev/null
@@ -1,470 +0,0 @@
-(module
- (type $none_=>_none (func))
- (type $none_=>_i32 (func (result i32)))
- (type $i32_=>_none (func (param i32)))
- (import "env" "import" (func $import))
- (import "env" "import2" (func $import2 (result i32)))
- (import "env" "import3" (func $import3 (param i32)))
- (global $__asyncify_state (mut i32) (i32.const 0))
- (global $__asyncify_data (mut i32) (i32.const 0))
- (memory $0 1 2)
- (export "asyncify_start_unwind" (func $asyncify_start_unwind))
- (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
- (export "asyncify_start_rewind" (func $asyncify_start_rewind))
- (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
- (export "asyncify_get_state" (func $asyncify_get_state))
- (func $calls-import
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.const 0)
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.const 0)
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.const 1)
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $calls-import2 (result i32)
- (local $temp i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (local $6 i32)
- (local $7 i32)
- (local $8 i32)
- (local $9 i32)
- (if
- (i32.const 0)
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $8
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $1
- (i32.load
- (local.get $8)
- )
- )
- )
- )
- (local.set $5
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.const 0)
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $6
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (block
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $6)
- (i32.const 0)
- )
- )
- (block
- (local.set $7
- (call $import2)
- )
- (if
- (i32.const 1)
- (br $__asyncify_unwind
- (i32.const 0)
- )
- (local.set $1
- (local.get $7)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (block
- (local.set $temp
- (local.get $1)
- )
- (local.set $2
- (local.get $temp)
- )
- (return
- (local.get $2)
- )
- )
- )
- (nop)
- (nop)
- )
- )
- (unreachable)
- )
- (unreachable)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $5)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $9
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $9)
- (local.get $1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (i32.const 0)
- )
- (func $calls-import2-drop
- (local $0 i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (if
- (i32.const 0)
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $4
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $0
- (i32.load
- (local.get $4)
- )
- )
- )
- )
- (local.set $1
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.const 0)
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $2
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $2)
- (i32.const 0)
- )
- )
- (block
- (local.set $3
- (call $import2)
- )
- (if
- (i32.const 1)
- (br $__asyncify_unwind
- (i32.const 0)
- )
- (local.set $0
- (local.get $3)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (drop
- (local.get $0)
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $5
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $5)
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- )
- (func $calls-nothing
- (local $0 i32)
- (local.set $0
- (i32.eqz
- (i32.const 17)
- )
- )
- (drop
- (local.get $0)
- )
- )
- (func $asyncify_start_unwind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 1)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_unwind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_start_rewind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 2)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_rewind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_get_state (result i32)
- (global.get $__asyncify_state)
- )
-)
diff --git a/test/passes/asyncify_mod-asyncify-always-and-only-unwind.wast b/test/passes/asyncify_mod-asyncify-always-and-only-unwind.wast
deleted file mode 100644
index 70cb7e8fb..000000000
--- a/test/passes/asyncify_mod-asyncify-always-and-only-unwind.wast
+++ /dev/null
@@ -1,20 +0,0 @@
-(module
- (memory 1 2)
- (import "env" "import" (func $import))
- (import "env" "import2" (func $import2 (result i32)))
- (import "env" "import3" (func $import3 (param i32)))
- (func $calls-import
- (call $import)
- )
- (func $calls-import2 (result i32)
- (local $temp i32)
- (local.set $temp (call $import2))
- (return (local.get $temp))
- )
- (func $calls-import2-drop
- (drop (call $import2))
- )
- (func $calls-nothing
- (drop (i32.eqz (i32.const 17)))
- )
-)
diff --git a/test/passes/asyncify_mod-asyncify-always-and-only-unwind_O.txt b/test/passes/asyncify_mod-asyncify-always-and-only-unwind_O.txt
deleted file mode 100644
index 735ae3551..000000000
--- a/test/passes/asyncify_mod-asyncify-always-and-only-unwind_O.txt
+++ /dev/null
@@ -1,94 +0,0 @@
-(module
- (type $none_=>_none (func))
- (type $i32_=>_none (func (param i32)))
- (type $none_=>_i32 (func (result i32)))
- (import "env" "import" (func $import))
- (global $__asyncify_state (mut i32) (i32.const 0))
- (global $__asyncify_data (mut i32) (i32.const 0))
- (memory $0 1 2)
- (export "calls-import" (func $calls-import))
- (export "calls-import2" (func $calls-import))
- (export "calls-import2-drop" (func $calls-import))
- (export "calls-nothing" (func $calls-import))
- (export "asyncify_start_unwind" (func $asyncify_start_unwind))
- (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
- (export "asyncify_start_rewind" (func $asyncify_start_rewind))
- (export "asyncify_stop_rewind" (func $asyncify_stop_unwind))
- (export "asyncify_get_state" (func $asyncify_get_state))
- (func $calls-import (; has Stack IR ;)
- (local $0 i32)
- (call $import)
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (func $asyncify_start_unwind (; has Stack IR ;) (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 1)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_unwind (; has Stack IR ;)
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_start_rewind (; has Stack IR ;) (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 2)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_get_state (; has Stack IR ;) (result i32)
- (global.get $__asyncify_state)
- )
-)
diff --git a/test/passes/asyncify_mod-asyncify-always-and-only-unwind_O.wast b/test/passes/asyncify_mod-asyncify-always-and-only-unwind_O.wast
deleted file mode 100644
index 5d8f2e4b7..000000000
--- a/test/passes/asyncify_mod-asyncify-always-and-only-unwind_O.wast
+++ /dev/null
@@ -1,24 +0,0 @@
-(module
- (memory 1 2)
- (import "env" "import" (func $import))
- (import "env" "import2" (func $import2 (result i32)))
- (import "env" "import3" (func $import3 (param i32)))
- (export "calls-import" (func $calls-import))
- (export "calls-import2" (func $calls-import))
- (export "calls-import2-drop" (func $calls-import))
- (export "calls-nothing" (func $calls-import))
- (func $calls-import
- (call $import)
- )
- (func $calls-import2 (result i32)
- (local $temp i32)
- (local.set $temp (call $import2))
- (return (local.get $temp))
- )
- (func $calls-import2-drop
- (drop (call $import2))
- )
- (func $calls-nothing
- (drop (i32.eqz (i32.const 17)))
- )
-)
diff --git a/test/passes/asyncify_mod-asyncify-never-unwind.txt b/test/passes/asyncify_mod-asyncify-never-unwind.txt
deleted file mode 100644
index c9096852a..000000000
--- a/test/passes/asyncify_mod-asyncify-never-unwind.txt
+++ /dev/null
@@ -1,488 +0,0 @@
-(module
- (type $none_=>_none (func))
- (type $none_=>_i32 (func (result i32)))
- (type $i32_=>_none (func (param i32)))
- (import "env" "import" (func $import))
- (import "env" "import2" (func $import2 (result i32)))
- (import "env" "import3" (func $import3 (param i32)))
- (global $__asyncify_state (mut i32) (i32.const 0))
- (global $__asyncify_data (mut i32) (i32.const 0))
- (memory $0 1 2)
- (export "asyncify_start_unwind" (func $asyncify_start_unwind))
- (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
- (export "asyncify_start_rewind" (func $asyncify_start_rewind))
- (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
- (export "asyncify_get_state" (func $asyncify_get_state))
- (func $calls-import
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.const 0)
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $calls-import2 (result i32)
- (local $temp i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (local $6 i32)
- (local $7 i32)
- (local $8 i32)
- (local $9 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $8
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $1
- (i32.load
- (local.get $8)
- )
- )
- )
- )
- (local.set $5
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $6
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (block
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $6)
- (i32.const 0)
- )
- )
- (block
- (local.set $7
- (call $import2)
- )
- (if
- (i32.const 0)
- (br $__asyncify_unwind
- (i32.const 0)
- )
- (local.set $1
- (local.get $7)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (block
- (local.set $temp
- (local.get $1)
- )
- (local.set $2
- (local.get $temp)
- )
- (return
- (local.get $2)
- )
- )
- )
- (nop)
- (nop)
- )
- )
- (unreachable)
- )
- (unreachable)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $5)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $9
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $9)
- (local.get $1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (i32.const 0)
- )
- (func $calls-import2-drop
- (local $0 i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $4
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $0
- (i32.load
- (local.get $4)
- )
- )
- )
- )
- (local.set $1
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $2
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $2)
- (i32.const 0)
- )
- )
- (block
- (local.set $3
- (call $import2)
- )
- (if
- (i32.const 0)
- (br $__asyncify_unwind
- (i32.const 0)
- )
- (local.set $0
- (local.get $3)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (drop
- (local.get $0)
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $5
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $5)
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- )
- (func $calls-nothing
- (local $0 i32)
- (local.set $0
- (i32.eqz
- (i32.const 17)
- )
- )
- (drop
- (local.get $0)
- )
- )
- (func $asyncify_start_unwind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 1)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_unwind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_start_rewind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 2)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_rewind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_get_state (result i32)
- (global.get $__asyncify_state)
- )
-)
diff --git a/test/passes/asyncify_mod-asyncify-never-unwind.wast b/test/passes/asyncify_mod-asyncify-never-unwind.wast
deleted file mode 100644
index 70cb7e8fb..000000000
--- a/test/passes/asyncify_mod-asyncify-never-unwind.wast
+++ /dev/null
@@ -1,20 +0,0 @@
-(module
- (memory 1 2)
- (import "env" "import" (func $import))
- (import "env" "import2" (func $import2 (result i32)))
- (import "env" "import3" (func $import3 (param i32)))
- (func $calls-import
- (call $import)
- )
- (func $calls-import2 (result i32)
- (local $temp i32)
- (local.set $temp (call $import2))
- (return (local.get $temp))
- )
- (func $calls-import2-drop
- (drop (call $import2))
- )
- (func $calls-nothing
- (drop (i32.eqz (i32.const 17)))
- )
-)
diff --git a/test/passes/asyncify_mod-asyncify-never-unwind_O.txt b/test/passes/asyncify_mod-asyncify-never-unwind_O.txt
deleted file mode 100644
index 18f55e79e..000000000
--- a/test/passes/asyncify_mod-asyncify-never-unwind_O.txt
+++ /dev/null
@@ -1,109 +0,0 @@
-(module
- (type $none_=>_none (func))
- (type $i32_=>_none (func (param i32)))
- (type $none_=>_i32 (func (result i32)))
- (import "env" "import" (func $import))
- (global $__asyncify_state (mut i32) (i32.const 0))
- (global $__asyncify_data (mut i32) (i32.const 0))
- (memory $0 1 2)
- (export "calls-import" (func $calls-import))
- (export "calls-import2" (func $calls-import))
- (export "calls-import2-drop" (func $calls-import))
- (export "calls-nothing" (func $calls-import))
- (export "asyncify_start_unwind" (func $asyncify_start_unwind))
- (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
- (export "asyncify_start_rewind" (func $asyncify_start_rewind))
- (export "asyncify_stop_rewind" (func $asyncify_stop_unwind))
- (export "asyncify_get_state" (func $asyncify_get_state))
- (func $calls-import (; has Stack IR ;)
- (if
- (i32.eqz
- (select
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block (result i32)
- (i32.store
- (global.get $__asyncify_data)
- (i32.sub
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- (i32.const 0)
- )
- (i32.const 0)
- (global.get $__asyncify_state)
- )
- )
- (call $import)
- )
- )
- (func $asyncify_start_unwind (; has Stack IR ;) (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 1)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_unwind (; has Stack IR ;)
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_start_rewind (; has Stack IR ;) (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 2)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_get_state (; has Stack IR ;) (result i32)
- (global.get $__asyncify_state)
- )
-)
diff --git a/test/passes/asyncify_mod-asyncify-never-unwind_O.wast b/test/passes/asyncify_mod-asyncify-never-unwind_O.wast
deleted file mode 100644
index 5d8f2e4b7..000000000
--- a/test/passes/asyncify_mod-asyncify-never-unwind_O.wast
+++ /dev/null
@@ -1,24 +0,0 @@
-(module
- (memory 1 2)
- (import "env" "import" (func $import))
- (import "env" "import2" (func $import2 (result i32)))
- (import "env" "import3" (func $import3 (param i32)))
- (export "calls-import" (func $calls-import))
- (export "calls-import2" (func $calls-import))
- (export "calls-import2-drop" (func $calls-import))
- (export "calls-nothing" (func $calls-import))
- (func $calls-import
- (call $import)
- )
- (func $calls-import2 (result i32)
- (local $temp i32)
- (local.set $temp (call $import2))
- (return (local.get $temp))
- )
- (func $calls-import2-drop
- (drop (call $import2))
- )
- (func $calls-nothing
- (drop (i32.eqz (i32.const 17)))
- )
-)
diff --git a/test/passes/asyncify_optimize-level=1.txt b/test/passes/asyncify_optimize-level=1.txt
deleted file mode 100644
index 9909918f2..000000000
--- a/test/passes/asyncify_optimize-level=1.txt
+++ /dev/null
@@ -1,1511 +0,0 @@
-(module
- (type $none_=>_none (func))
- (type $i32_=>_none (func (param i32)))
- (type $none_=>_i32 (func (result i32)))
- (type $i32_=>_i32 (func (param i32) (result i32)))
- (import "env" "import" (func $import))
- (import "env" "import2" (func $import2 (result i32)))
- (import "env" "import3" (func $import3 (param i32)))
- (global $__asyncify_state (mut i32) (i32.const 0))
- (global $__asyncify_data (mut i32) (i32.const 0))
- (memory $0 1 2)
- (export "asyncify_start_unwind" (func $asyncify_start_unwind))
- (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
- (export "asyncify_start_rewind" (func $asyncify_start_rewind))
- (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
- (export "asyncify_get_state" (func $asyncify_get_state))
- (func $calls-import
- (local $0 i32)
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (if
- (i32.eqz
- (select
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block (result i32)
- (i32.store
- (global.get $__asyncify_data)
- (i32.sub
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- (local.get $0)
- )
- (i32.const 0)
- (global.get $__asyncify_state)
- )
- )
- (block
- (call $import)
- (drop
- (br_if $__asyncify_unwind
- (i32.const 0)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- )
- )
- )
- )
- (return)
- )
- )
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (func $calls-import2 (result i32)
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.sub
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (local.set $0
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (local.set $1
- (block $__asyncify_unwind (result i32)
- (if
- (i32.eqz
- (select
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block (result i32)
- (i32.store
- (global.get $__asyncify_data)
- (i32.sub
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- (local.get $1)
- )
- (i32.const 0)
- (global.get $__asyncify_state)
- )
- )
- (block
- (local.set $1
- (call $import2)
- )
- (drop
- (br_if $__asyncify_unwind
- (i32.const 0)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- )
- )
- (local.set $0
- (local.get $1)
- )
- )
- )
- (if
- (i32.eqz
- (global.get $__asyncify_state)
- )
- (return
- (local.get $0)
- )
- )
- (unreachable)
- )
- )
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (i32.const 0)
- )
- (func $calls-import2-drop
- (local $0 i32)
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (if
- (i32.eqz
- (select
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block (result i32)
- (i32.store
- (global.get $__asyncify_data)
- (i32.sub
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- (local.get $0)
- )
- (i32.const 0)
- (global.get $__asyncify_state)
- )
- )
- (block
- (drop
- (call $import2)
- )
- (drop
- (br_if $__asyncify_unwind
- (i32.const 0)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- )
- )
- )
- )
- (return)
- )
- )
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (func $calls-nothing
- (nop)
- )
- (func $many-locals (param $0 i32) (result i32)
- (local $1 i32)
- (local $2 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.sub
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.sub
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (local.set $2
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (i32.eqz
- (global.get $__asyncify_state)
- )
- (loop $l
- (br_if $l
- (local.tee $1
- (i32.div_s
- (i32.add
- (local.get $1)
- (i32.const 1)
- )
- (i32.const 3)
- )
- )
- )
- )
- )
- (if
- (i32.eqz
- (select
- (local.get $2)
- (i32.const 0)
- (global.get $__asyncify_state)
- )
- )
- (block
- (call $import)
- (drop
- (br_if $__asyncify_unwind
- (i32.const 0)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- )
- )
- )
- )
- (if
- (i32.eqz
- (global.get $__asyncify_state)
- )
- (return
- (local.get $1)
- )
- )
- (unreachable)
- )
- )
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (i32.const 0)
- )
- (func $calls-import2-if (param $0 i32)
- (local $1 i32)
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.sub
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (i32.or
- (local.get $0)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- )
- (if
- (i32.eqz
- (select
- (local.get $1)
- (i32.const 0)
- (global.get $__asyncify_state)
- )
- )
- (block
- (call $import)
- (drop
- (br_if $__asyncify_unwind
- (i32.const 0)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- )
- )
- )
- )
- )
- (return)
- )
- )
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (func $calls-import2-if-else (param $0 i32)
- (local $1 i32)
- (local $2 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.sub
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.sub
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (local.set $2
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (i32.or
- (local.tee $1
- (select
- (local.get $1)
- (local.get $0)
- (global.get $__asyncify_state)
- )
- )
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- )
- (if
- (i32.eqz
- (select
- (local.get $2)
- (i32.const 0)
- (global.get $__asyncify_state)
- )
- )
- (block
- (call $import3
- (i32.const 1)
- )
- (drop
- (br_if $__asyncify_unwind
- (i32.const 0)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- )
- )
- )
- )
- )
- (if
- (i32.or
- (i32.eqz
- (local.get $1)
- )
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- )
- (if
- (select
- (i32.eq
- (local.get $2)
- (i32.const 1)
- )
- (i32.const 1)
- (global.get $__asyncify_state)
- )
- (block
- (call $import3
- (i32.const 2)
- )
- (drop
- (br_if $__asyncify_unwind
- (i32.const 1)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- )
- )
- )
- )
- )
- (return)
- )
- )
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (func $calls-import2-if-else-oneside (param $0 i32) (result i32)
- (local $1 i32)
- (local $2 i32)
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.sub
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (i32.or
- (local.tee $2
- (select
- (local.get $2)
- (local.get $0)
- (global.get $__asyncify_state)
- )
- )
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- )
- (if
- (i32.eqz
- (global.get $__asyncify_state)
- )
- (return
- (i32.const 1)
- )
- )
- )
- (if
- (i32.or
- (i32.eqz
- (local.get $2)
- )
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- )
- (if
- (i32.eqz
- (select
- (local.get $1)
- (i32.const 0)
- (global.get $__asyncify_state)
- )
- )
- (block
- (call $import3
- (i32.const 2)
- )
- (drop
- (br_if $__asyncify_unwind
- (i32.const 0)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- )
- )
- )
- )
- )
- (if
- (i32.eqz
- (global.get $__asyncify_state)
- )
- (return
- (i32.const 3)
- )
- )
- (unreachable)
- )
- )
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (i32.const 0)
- )
- (func $calls-import2-if-else-oneside2 (param $0 i32) (result i32)
- (local $1 i32)
- (local $2 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.sub
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.sub
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (local.set $2
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (i32.or
- (local.tee $1
- (select
- (local.get $1)
- (local.get $0)
- (global.get $__asyncify_state)
- )
- )
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- )
- (if
- (i32.eqz
- (select
- (local.get $2)
- (i32.const 0)
- (global.get $__asyncify_state)
- )
- )
- (block
- (call $import3
- (i32.const 1)
- )
- (drop
- (br_if $__asyncify_unwind
- (i32.const 0)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- )
- )
- )
- )
- )
- (if
- (i32.or
- (i32.eqz
- (local.get $1)
- )
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- )
- (if
- (i32.eqz
- (global.get $__asyncify_state)
- )
- (return
- (i32.const 2)
- )
- )
- )
- (if
- (i32.eqz
- (global.get $__asyncify_state)
- )
- (return
- (i32.const 3)
- )
- )
- (unreachable)
- )
- )
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (i32.const 0)
- )
- (func $calls-loop (param $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.sub
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (local.set $0
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (local.set $1
- (block $__asyncify_unwind (result i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.sub
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (loop $l
- (if
- (i32.eqz
- (select
- (local.get $1)
- (i32.const 0)
- (global.get $__asyncify_state)
- )
- )
- (block
- (call $import3
- (i32.const 1)
- )
- (drop
- (br_if $__asyncify_unwind
- (i32.const 0)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- )
- )
- )
- )
- (if
- (i32.eqz
- (global.get $__asyncify_state)
- )
- (br_if $l
- (local.tee $0
- (i32.add
- (local.get $0)
- (i32.const 1)
- )
- )
- )
- )
- )
- (return)
- )
- )
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (func $calls-loop2
- (local $0 i32)
- (local $1 i32)
- (local $2 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.sub
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (local.set $0
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (local.set $1
- (block $__asyncify_unwind (result i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.sub
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (local.set $2
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (loop $l
- (if
- (i32.eqz
- (select
- (local.get $2)
- (i32.const 0)
- (global.get $__asyncify_state)
- )
- )
- (block
- (local.set $1
- (call $import2)
- )
- (drop
- (br_if $__asyncify_unwind
- (i32.const 0)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- )
- )
- (local.set $0
- (local.get $1)
- )
- )
- )
- (br_if $l
- (i32.eqz
- (select
- (global.get $__asyncify_state)
- (i32.const 1)
- (local.get $0)
- )
- )
- )
- )
- (return)
- )
- )
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (func $calls-mix
- (local $0 i32)
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.sub
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (local.set $0
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (i32.eqz
- (global.get $__asyncify_state)
- )
- (call $boring)
- )
- (if
- (i32.eqz
- (select
- (local.get $0)
- (i32.const 0)
- (global.get $__asyncify_state)
- )
- )
- (block
- (call $import)
- (drop
- (br_if $__asyncify_unwind
- (i32.const 0)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- )
- )
- )
- )
- (if
- (i32.eqz
- (global.get $__asyncify_state)
- )
- (call $boring)
- )
- (if
- (select
- (i32.eq
- (local.get $0)
- (i32.const 1)
- )
- (i32.const 1)
- (global.get $__asyncify_state)
- )
- (block
- (call $import)
- (drop
- (br_if $__asyncify_unwind
- (i32.const 1)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- )
- )
- )
- )
- (return)
- )
- )
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (func $boring
- (nop)
- )
- (func $calls-mix-deep
- (local $0 i32)
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.sub
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (local.set $0
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (i32.eqz
- (global.get $__asyncify_state)
- )
- (call $boring-deep)
- )
- (if
- (i32.eqz
- (select
- (local.get $0)
- (i32.const 0)
- (global.get $__asyncify_state)
- )
- )
- (block
- (call $import-deep)
- (drop
- (br_if $__asyncify_unwind
- (i32.const 0)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- )
- )
- )
- )
- (if
- (i32.eqz
- (global.get $__asyncify_state)
- )
- (call $boring)
- )
- (if
- (select
- (i32.eq
- (local.get $0)
- (i32.const 1)
- )
- (i32.const 1)
- (global.get $__asyncify_state)
- )
- (block
- (call $import)
- (drop
- (br_if $__asyncify_unwind
- (i32.const 1)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- )
- )
- )
- )
- (return)
- )
- )
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (func $boring-deep
- (call $boring)
- )
- (func $import-deep
- (local $0 i32)
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (if
- (i32.eqz
- (select
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block (result i32)
- (i32.store
- (global.get $__asyncify_data)
- (i32.sub
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- (local.get $0)
- )
- (i32.const 0)
- (global.get $__asyncify_state)
- )
- )
- (block
- (call $import)
- (drop
- (br_if $__asyncify_unwind
- (i32.const 0)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- )
- )
- )
- )
- (return)
- )
- )
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (func $asyncify_start_unwind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 1)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_unwind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_start_rewind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 2)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_rewind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_get_state (result i32)
- (global.get $__asyncify_state)
- )
-)
diff --git a/test/passes/asyncify_optimize-level=1.wast b/test/passes/asyncify_optimize-level=1.wast
deleted file mode 100644
index a89103e8a..000000000
--- a/test/passes/asyncify_optimize-level=1.wast
+++ /dev/null
@@ -1,97 +0,0 @@
-(module
- (memory 1 2)
- (import "env" "import" (func $import))
- (import "env" "import2" (func $import2 (result i32)))
- (import "env" "import3" (func $import3 (param i32)))
- (func $calls-import
- (call $import)
- )
- (func $calls-import2 (result i32)
- (local $temp i32)
- (local.set $temp (call $import2))
- (return (local.get $temp))
- )
- (func $calls-import2-drop
- (drop (call $import2))
- )
- (func $calls-nothing
- (drop (i32.eqz (i32.const 17)))
- )
- (func $many-locals (param $x i32) (result i32)
- (local $y i32)
- (loop $l
- (local.set $x
- (i32.add (local.get $y) (i32.const 1))
- )
- (local.set $y
- (i32.div_s (local.get $x) (i32.const 3))
- )
- (br_if $l (local.get $y))
- )
- (call $import)
- (return (local.get $y))
- )
- (func $calls-import2-if (param $x i32)
- (if (local.get $x)
- (call $import)
- )
- )
- (func $calls-import2-if-else (param $x i32)
- (if (local.get $x)
- (call $import3 (i32.const 1))
- (call $import3 (i32.const 2))
- )
- )
- (func $calls-import2-if-else-oneside (param $x i32) (result i32)
- (if (local.get $x)
- (return (i32.const 1))
- (call $import3 (i32.const 2))
- )
- (return (i32.const 3))
- )
- (func $calls-import2-if-else-oneside2 (param $x i32) (result i32)
- (if (local.get $x)
- (call $import3 (i32.const 1))
- (return (i32.const 2))
- )
- (return (i32.const 3))
- )
- (func $calls-loop (param $x i32)
- (loop $l
- (call $import3 (i32.const 1))
- (local.set $x
- (i32.add (local.get $x) (i32.const 1))
- )
- (br_if $l
- (local.get $x)
- )
- )
- )
- (func $calls-loop2
- (loop $l
- (br_if $l
- (call $import2)
- )
- )
- )
- (func $calls-mix
- (call $boring)
- (call $import)
- (call $boring)
- (call $import)
- )
- (func $boring)
- (func $calls-mix-deep
- (call $boring-deep)
- (call $import-deep)
- (call $boring)
- (call $import)
- )
- (func $boring-deep
- (call $boring)
- )
- (func $import-deep
- (call $import)
- )
-)
-
diff --git a/test/passes/asyncify_pass-arg=asyncify-addlist@foo.txt b/test/passes/asyncify_pass-arg=asyncify-addlist@foo.txt
deleted file mode 100644
index e42be2b6e..000000000
--- a/test/passes/asyncify_pass-arg=asyncify-addlist@foo.txt
+++ /dev/null
@@ -1,162 +0,0 @@
-(module
- (type $none_=>_none (func))
- (type $i32_=>_none (func (param i32)))
- (type $none_=>_i32 (func (result i32)))
- (import "env" "import" (func $import))
- (global $__asyncify_state (mut i32) (i32.const 0))
- (global $__asyncify_data (mut i32) (i32.const 0))
- (memory $0 1 2)
- (export "asyncify_start_unwind" (func $asyncify_start_unwind))
- (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
- (export "asyncify_start_rewind" (func $asyncify_start_rewind))
- (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
- (export "asyncify_get_state" (func $asyncify_get_state))
- (func $foo
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.tee $0
- (block $__asyncify_unwind
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (call $nothing)
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $bar
- (call $nothing)
- )
- (func $nothing
- (nop)
- )
- (func $asyncify_start_unwind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 1)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_unwind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_start_rewind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 2)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_rewind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_get_state (result i32)
- (global.get $__asyncify_state)
- )
-)
diff --git a/test/passes/asyncify_pass-arg=asyncify-addlist@foo.wast b/test/passes/asyncify_pass-arg=asyncify-addlist@foo.wast
deleted file mode 100644
index beb89a66a..000000000
--- a/test/passes/asyncify_pass-arg=asyncify-addlist@foo.wast
+++ /dev/null
@@ -1,13 +0,0 @@
-(module
- (memory 1 2)
- (import "env" "import" (func $import))
- (func $foo ;; doesn't look like it needs instrumentation, but in add list
- (call $nothing)
- )
- (func $bar ;; doesn't look like it needs instrumentation, and not in add list
- (call $nothing)
- )
- (func $nothing
- )
-)
-
diff --git a/test/passes/asyncify_pass-arg=asyncify-addlist@foo_pass-arg=asyncify-ignore-indirect.txt b/test/passes/asyncify_pass-arg=asyncify-addlist@foo_pass-arg=asyncify-ignore-indirect.txt
deleted file mode 100644
index 213ead5aa..000000000
--- a/test/passes/asyncify_pass-arg=asyncify-addlist@foo_pass-arg=asyncify-ignore-indirect.txt
+++ /dev/null
@@ -1,196 +0,0 @@
-(module
- (type $t (func))
- (type $i32_=>_none (func (param i32)))
- (type $none_=>_i32 (func (result i32)))
- (import "env" "import" (func $import))
- (global $__asyncify_state (mut i32) (i32.const 0))
- (global $__asyncify_data (mut i32) (i32.const 0))
- (memory $0 1 2)
- (table $0 1 funcref)
- (elem (i32.const 0))
- (export "asyncify_start_unwind" (func $asyncify_start_unwind))
- (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
- (export "asyncify_start_rewind" (func $asyncify_start_rewind))
- (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
- (export "asyncify_get_state" (func $asyncify_get_state))
- (func $foo
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (call $nothing)
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call_indirect (type $t)
- (i32.const 0)
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $bar
- (call $nothing)
- (call_indirect (type $t)
- (i32.const 0)
- )
- )
- (func $nothing
- (nop)
- )
- (func $asyncify_start_unwind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 1)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_unwind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_start_rewind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 2)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_rewind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_get_state (result i32)
- (global.get $__asyncify_state)
- )
-)
diff --git a/test/passes/asyncify_pass-arg=asyncify-addlist@foo_pass-arg=asyncify-ignore-indirect.wast b/test/passes/asyncify_pass-arg=asyncify-addlist@foo_pass-arg=asyncify-ignore-indirect.wast
deleted file mode 100644
index a7541d5ad..000000000
--- a/test/passes/asyncify_pass-arg=asyncify-addlist@foo_pass-arg=asyncify-ignore-indirect.wast
+++ /dev/null
@@ -1,18 +0,0 @@
-(module
- (type $t (func))
- (memory 1 2)
- (table 1 funcref)
- (elem (i32.const 0))
- (import "env" "import" (func $import))
- (func $foo ;; doesn't look like it needs instrumentation, but in add list
- (call $nothing)
- (call_indirect (type $t) (i32.const 0))
- )
- (func $bar ;; doesn't look like it needs instrumentation, and not in add list
- (call $nothing)
- (call_indirect (type $t) (i32.const 0))
- )
- (func $nothing
- )
-)
-
diff --git a/test/passes/asyncify_pass-arg=asyncify-asserts_pass-arg=asyncify-onlylist@waka.txt b/test/passes/asyncify_pass-arg=asyncify-asserts_pass-arg=asyncify-onlylist@waka.txt
deleted file mode 100644
index 96eedff68..000000000
--- a/test/passes/asyncify_pass-arg=asyncify-asserts_pass-arg=asyncify-onlylist@waka.txt
+++ /dev/null
@@ -1,205 +0,0 @@
-(module
- (type $f (func))
- (type $i32_=>_none (func (param i32)))
- (type $none_=>_i32 (func (result i32)))
- (import "env" "import" (func $import))
- (import "env" "import2" (func $import2 (result i32)))
- (import "env" "import3" (func $import3 (param i32)))
- (global $__asyncify_state (mut i32) (i32.const 0))
- (global $__asyncify_data (mut i32) (i32.const 0))
- (memory $0 1 2)
- (table $0 2 2 funcref)
- (elem (i32.const 0) $calls-import2-drop $calls-import2-drop)
- (export "asyncify_start_unwind" (func $asyncify_start_unwind))
- (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
- (export "asyncify_start_rewind" (func $asyncify_start_rewind))
- (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
- (export "asyncify_get_state" (func $asyncify_get_state))
- (func $calls-import
- (local $0 i32)
- (local.set $0
- (global.get $__asyncify_state)
- )
- (block
- (call $import)
- (if
- (i32.ne
- (global.get $__asyncify_state)
- (local.get $0)
- )
- (unreachable)
- )
- )
- )
- (func $calls-import2-drop
- (local $0 i32)
- (local $1 i32)
- (local $2 i32)
- (local.set $1
- (global.get $__asyncify_state)
- )
- (block
- (local.set $0
- (block (result i32)
- (local.set $2
- (call $import2)
- )
- (if
- (i32.ne
- (global.get $__asyncify_state)
- (local.get $1)
- )
- (unreachable)
- )
- (local.get $2)
- )
- )
- (drop
- (local.get $0)
- )
- )
- )
- (func $returns (result i32)
- (local $x i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (local $6 i32)
- (local.set $5
- (global.get $__asyncify_state)
- )
- (block
- (block
- (local.set $1
- (block (result i32)
- (local.set $6
- (call $import2)
- )
- (if
- (i32.ne
- (global.get $__asyncify_state)
- (local.get $5)
- )
- (unreachable)
- )
- (local.get $6)
- )
- )
- (local.set $x
- (local.get $1)
- )
- (local.set $2
- (local.get $x)
- )
- (local.set $3
- (local.get $2)
- )
- )
- (local.set $4
- (local.get $3)
- )
- (return
- (local.get $4)
- )
- )
- )
- (func $calls-indirect (param $x i32)
- (local $1 i32)
- (local $2 i32)
- (local.set $2
- (global.get $__asyncify_state)
- )
- (block
- (local.set $1
- (local.get $x)
- )
- (block
- (call_indirect (type $f)
- (local.get $1)
- )
- (if
- (i32.ne
- (global.get $__asyncify_state)
- (local.get $2)
- )
- (unreachable)
- )
- )
- )
- )
- (func $asyncify_start_unwind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 1)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_unwind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_start_rewind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 2)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_rewind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_get_state (result i32)
- (global.get $__asyncify_state)
- )
-)
diff --git a/test/passes/asyncify_pass-arg=asyncify-asserts_pass-arg=asyncify-onlylist@waka.wast b/test/passes/asyncify_pass-arg=asyncify-asserts_pass-arg=asyncify-onlylist@waka.wast
deleted file mode 100644
index 4233cb304..000000000
--- a/test/passes/asyncify_pass-arg=asyncify-asserts_pass-arg=asyncify-onlylist@waka.wast
+++ /dev/null
@@ -1,25 +0,0 @@
-(module
- (memory 1 2)
- (type $f (func))
- (import "env" "import" (func $import))
- (import "env" "import2" (func $import2 (result i32)))
- (import "env" "import3" (func $import3 (param i32)))
- (table funcref (elem $calls-import2-drop $calls-import2-drop))
- (func $calls-import
- (call $import)
- )
- (func $calls-import2-drop
- (drop (call $import2))
- )
- (func $returns (result i32)
- (local $x i32)
- (local.set $x (call $import2))
- (local.get $x)
- )
- (func $calls-indirect (param $x i32)
- (call_indirect (type $f)
- (local.get $x)
- )
- )
-)
-
diff --git a/test/passes/asyncify_pass-arg=asyncify-blacklist@foo,bar.txt b/test/passes/asyncify_pass-arg=asyncify-blacklist@foo,bar.txt
deleted file mode 100644
index 22349e07a..000000000
--- a/test/passes/asyncify_pass-arg=asyncify-blacklist@foo,bar.txt
+++ /dev/null
@@ -1,270 +0,0 @@
-(module
- (type $none_=>_none (func))
- (type $i32_=>_none (func (param i32)))
- (type $none_=>_i32 (func (result i32)))
- (import "env" "import" (func $import))
- (global $__asyncify_state (mut i32) (i32.const 0))
- (global $__asyncify_data (mut i32) (i32.const 0))
- (memory $0 1 2)
- (export "asyncify_start_unwind" (func $asyncify_start_unwind))
- (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
- (export "asyncify_start_rewind" (func $asyncify_start_rewind))
- (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
- (export "asyncify_get_state" (func $asyncify_get_state))
- (func $foo
- (call $import)
- )
- (func $bar
- (call $import)
- )
- (func $baz
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $other1
- (call $foo)
- )
- (func $other2
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $baz)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $asyncify_start_unwind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 1)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_unwind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_start_rewind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 2)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_rewind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_get_state (result i32)
- (global.get $__asyncify_state)
- )
-)
diff --git a/test/passes/asyncify_pass-arg=asyncify-blacklist@foo,bar.wast b/test/passes/asyncify_pass-arg=asyncify-blacklist@foo,bar.wast
deleted file mode 100644
index 8496e7ee2..000000000
--- a/test/passes/asyncify_pass-arg=asyncify-blacklist@foo,bar.wast
+++ /dev/null
@@ -1,20 +0,0 @@
-(module
- (memory 1 2)
- (import "env" "import" (func $import))
- (func $foo
- (call $import)
- )
- (func $bar
- (call $import)
- )
- (func $baz
- (call $import)
- )
- (func $other1
- (call $foo)
- )
- (func $other2
- (call $baz)
- )
-)
-
diff --git a/test/passes/asyncify_pass-arg=asyncify-ignore-imports.txt b/test/passes/asyncify_pass-arg=asyncify-ignore-imports.txt
deleted file mode 100644
index f09e4d097..000000000
--- a/test/passes/asyncify_pass-arg=asyncify-ignore-imports.txt
+++ /dev/null
@@ -1,260 +0,0 @@
-(module
- (type $f (func))
- (type $i32_=>_none (func (param i32)))
- (type $none_=>_i32 (func (result i32)))
- (import "env" "import" (func $import))
- (import "env" "import2" (func $import2 (result i32)))
- (import "env" "import3" (func $import3 (param i32)))
- (global $__asyncify_state (mut i32) (i32.const 0))
- (global $__asyncify_data (mut i32) (i32.const 0))
- (memory $0 1 2)
- (table $0 2 2 funcref)
- (elem (i32.const 0) $calls-import2-drop $calls-import2-drop)
- (export "asyncify_start_unwind" (func $asyncify_start_unwind))
- (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
- (export "asyncify_start_rewind" (func $asyncify_start_rewind))
- (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
- (export "asyncify_get_state" (func $asyncify_get_state))
- (func $calls-import
- (call $import)
- )
- (func $calls-import2-drop
- (local $0 i32)
- (local.set $0
- (call $import2)
- )
- (drop
- (local.get $0)
- )
- )
- (func $calls-import2-if-else (param $x i32)
- (local $1 i32)
- (local.set $1
- (local.get $x)
- )
- (if
- (local.get $1)
- (call $import3
- (i32.const 1)
- )
- (call $import3
- (i32.const 2)
- )
- )
- )
- (func $calls-indirect (param $x i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $4
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $1
- (i32.load
- (local.get $4)
- )
- )
- )
- )
- (local.set $2
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $3
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (local.set $1
- (local.get $x)
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $3)
- (i32.const 0)
- )
- )
- (block
- (call_indirect (type $f)
- (local.get $1)
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $2)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $5
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $5)
- (local.get $1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- )
- (func $asyncify_start_unwind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 1)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_unwind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_start_rewind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 2)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_rewind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_get_state (result i32)
- (global.get $__asyncify_state)
- )
-)
diff --git a/test/passes/asyncify_pass-arg=asyncify-ignore-imports.wast b/test/passes/asyncify_pass-arg=asyncify-ignore-imports.wast
deleted file mode 100644
index 80f0851d0..000000000
--- a/test/passes/asyncify_pass-arg=asyncify-ignore-imports.wast
+++ /dev/null
@@ -1,26 +0,0 @@
-(module
- (memory 1 2)
- (type $f (func))
- (import "env" "import" (func $import))
- (import "env" "import2" (func $import2 (result i32)))
- (import "env" "import3" (func $import3 (param i32)))
- (table funcref (elem $calls-import2-drop $calls-import2-drop))
- (func $calls-import
- (call $import)
- )
- (func $calls-import2-drop
- (drop (call $import2))
- )
- (func $calls-import2-if-else (param $x i32)
- (if (local.get $x)
- (call $import3 (i32.const 1))
- (call $import3 (i32.const 2))
- )
- )
- (func $calls-indirect (param $x i32)
- (call_indirect (type $f)
- (local.get $x)
- )
- )
-)
-
diff --git a/test/passes/asyncify_pass-arg=asyncify-ignore-indirect.txt b/test/passes/asyncify_pass-arg=asyncify-ignore-indirect.txt
deleted file mode 100644
index 21a943761..000000000
--- a/test/passes/asyncify_pass-arg=asyncify-ignore-indirect.txt
+++ /dev/null
@@ -1,534 +0,0 @@
-(module
- (type $f (func))
- (type $i32_=>_none (func (param i32)))
- (type $none_=>_i32 (func (result i32)))
- (import "env" "import" (func $import))
- (import "env" "import2" (func $import2 (result i32)))
- (import "env" "import3" (func $import3 (param i32)))
- (global $__asyncify_state (mut i32) (i32.const 0))
- (global $__asyncify_data (mut i32) (i32.const 0))
- (memory $0 1 2)
- (table $0 2 2 funcref)
- (elem (i32.const 0) $calls-import2-drop $calls-import2-drop)
- (export "asyncify_start_unwind" (func $asyncify_start_unwind))
- (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
- (export "asyncify_start_rewind" (func $asyncify_start_rewind))
- (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
- (export "asyncify_get_state" (func $asyncify_get_state))
- (func $calls-import
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $calls-import2-drop
- (local $0 i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $4
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $0
- (i32.load
- (local.get $4)
- )
- )
- )
- )
- (local.set $1
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $2
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $2)
- (i32.const 0)
- )
- )
- (block
- (local.set $3
- (call $import2)
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- (local.set $0
- (local.get $3)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (drop
- (local.get $0)
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $5
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $5)
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- )
- (func $calls-import2-if-else (param $x i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (local $6 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $5
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $2
- (i32.load
- (local.get $5)
- )
- )
- )
- )
- (local.set $3
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $4
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (local.set $1
- (local.get $x)
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (local.set $2
- (local.get $1)
- )
- )
- (if
- (i32.or
- (local.get $2)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $4)
- (i32.const 0)
- )
- )
- (block
- (call $import3
- (i32.const 1)
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (if
- (i32.or
- (i32.eqz
- (local.get $2)
- )
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $4)
- (i32.const 1)
- )
- )
- (block
- (call $import3
- (i32.const 2)
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 1)
- )
- )
- )
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $3)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $6
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $6)
- (local.get $2)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- )
- (func $calls-indirect (param $x i32)
- (local $1 i32)
- (local.set $1
- (local.get $x)
- )
- (call_indirect (type $f)
- (local.get $1)
- )
- )
- (func $asyncify_start_unwind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 1)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_unwind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_start_rewind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 2)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_rewind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_get_state (result i32)
- (global.get $__asyncify_state)
- )
-)
diff --git a/test/passes/asyncify_pass-arg=asyncify-ignore-indirect.wast b/test/passes/asyncify_pass-arg=asyncify-ignore-indirect.wast
deleted file mode 100644
index 80f0851d0..000000000
--- a/test/passes/asyncify_pass-arg=asyncify-ignore-indirect.wast
+++ /dev/null
@@ -1,26 +0,0 @@
-(module
- (memory 1 2)
- (type $f (func))
- (import "env" "import" (func $import))
- (import "env" "import2" (func $import2 (result i32)))
- (import "env" "import3" (func $import3 (param i32)))
- (table funcref (elem $calls-import2-drop $calls-import2-drop))
- (func $calls-import
- (call $import)
- )
- (func $calls-import2-drop
- (drop (call $import2))
- )
- (func $calls-import2-if-else (param $x i32)
- (if (local.get $x)
- (call $import3 (i32.const 1))
- (call $import3 (i32.const 2))
- )
- )
- (func $calls-indirect (param $x i32)
- (call_indirect (type $f)
- (local.get $x)
- )
- )
-)
-
diff --git a/test/passes/asyncify_pass-arg=asyncify-imports@env.import,env.import2.txt b/test/passes/asyncify_pass-arg=asyncify-imports@env.import,env.import2.txt
deleted file mode 100644
index a936f01b0..000000000
--- a/test/passes/asyncify_pass-arg=asyncify-imports@env.import,env.import2.txt
+++ /dev/null
@@ -1,1708 +0,0 @@
-(module
- (type $none_=>_none (func))
- (type $i32_=>_none (func (param i32)))
- (type $none_=>_i32 (func (result i32)))
- (global $sleeping (mut i32) (i32.const 0))
- (global $__asyncify_state (mut i32) (i32.const 0))
- (global $__asyncify_data (mut i32) (i32.const 0))
- (memory $0 1 2)
- (export "asyncify_start_unwind" (func $asyncify_start_unwind))
- (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
- (export "asyncify_start_rewind" (func $asyncify_start_rewind))
- (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
- (export "asyncify_get_state" (func $asyncify_get_state))
- (func $do_sleep
- (local $0 i32)
- (local $1 i32)
- (local.set $0
- (global.get $sleeping)
- )
- (local.set $1
- (i32.eqz
- (local.get $0)
- )
- )
- (if
- (local.get $1)
- (block $block
- (global.set $sleeping
- (i32.const 1)
- )
- (call $asyncify_start_unwind
- (i32.const 4)
- )
- )
- (block $block0
- (global.set $sleeping
- (i32.const 0)
- )
- (call $asyncify_stop_rewind)
- )
- )
- )
- (func $work
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (call $stuff)
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $do_sleep)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (call $stuff)
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $stuff
- (nop)
- )
- (func $first_event
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $work)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $second_event
- (call $asyncify_start_rewind
- (i32.const 4)
- )
- (call $work)
- )
- (func $never_sleep
- (call $stuff)
- (call $stuff)
- (call $stuff)
- )
- (func $asyncify_start_unwind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 1)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_unwind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_start_rewind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 2)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_rewind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_get_state (result i32)
- (global.get $__asyncify_state)
- )
-)
-(module
- (type $none_=>_none (func))
- (type $i32_=>_none (func (param i32)))
- (type $none_=>_i32 (func (result i32)))
- (type $i32_=>_i32 (func (param i32) (result i32)))
- (import "env" "import" (func $import))
- (import "env" "import2" (func $import2 (result i32)))
- (import "env" "import3" (func $import3 (param i32)))
- (global $__asyncify_state (mut i32) (i32.const 0))
- (global $__asyncify_data (mut i32) (i32.const 0))
- (memory $0 1 2)
- (export "asyncify_start_unwind" (func $asyncify_start_unwind))
- (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
- (export "asyncify_start_rewind" (func $asyncify_start_rewind))
- (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
- (export "asyncify_get_state" (func $asyncify_get_state))
- (func $calls-import
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $calls-import2 (result i32)
- (local $temp i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (local $6 i32)
- (local $7 i32)
- (local $8 i32)
- (local $9 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $8
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $1
- (i32.load
- (local.get $8)
- )
- )
- )
- )
- (local.set $5
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $6
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (block
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $6)
- (i32.const 0)
- )
- )
- (block
- (local.set $7
- (call $import2)
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- (local.set $1
- (local.get $7)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (block
- (local.set $temp
- (local.get $1)
- )
- (local.set $2
- (local.get $temp)
- )
- (return
- (local.get $2)
- )
- )
- )
- (nop)
- (nop)
- )
- )
- (unreachable)
- )
- (unreachable)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $5)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $9
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $9)
- (local.get $1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (i32.const 0)
- )
- (func $calls-import2-drop
- (local $0 i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $4
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $0
- (i32.load
- (local.get $4)
- )
- )
- )
- )
- (local.set $1
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $2
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $2)
- (i32.const 0)
- )
- )
- (block
- (local.set $3
- (call $import2)
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- (local.set $0
- (local.get $3)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (drop
- (local.get $0)
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $5
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $5)
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- )
- (func $calls-nothing
- (local $0 i32)
- (local.set $0
- (i32.eqz
- (i32.const 17)
- )
- )
- (drop
- (local.get $0)
- )
- )
- (func $many-locals (param $x i32) (result i32)
- (local $y i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (local $6 i32)
- (local $7 i32)
- (local $8 i32)
- (local $9 i32)
- (local $10 i32)
- (local $11 i32)
- (local $12 i32)
- (local $13 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $12
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $y
- (i32.load
- (local.get $12)
- )
- )
- )
- )
- (local.set $10
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $11
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (loop $l
- (local.set $2
- (local.get $y)
- )
- (local.set $3
- (i32.add
- (local.get $2)
- (i32.const 1)
- )
- )
- (local.set $x
- (local.get $3)
- )
- (local.set $4
- (local.get $x)
- )
- (local.set $5
- (i32.div_s
- (local.get $4)
- (i32.const 3)
- )
- )
- (local.set $y
- (local.get $5)
- )
- (local.set $6
- (local.get $y)
- )
- (br_if $l
- (local.get $6)
- )
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $11)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (block
- (local.set $7
- (local.get $y)
- )
- (return
- (local.get $7)
- )
- )
- )
- (nop)
- )
- )
- (unreachable)
- )
- (unreachable)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $10)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $13
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $13)
- (local.get $y)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (i32.const 0)
- )
- (func $calls-import2-if (param $x i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $2
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $3
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (local.set $1
- (local.get $x)
- )
- )
- (if
- (i32.or
- (local.get $1)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $3)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $2)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $calls-import2-if-else (param $x i32)
- (local $1 i32)
- (local.set $1
- (local.get $x)
- )
- (if
- (local.get $1)
- (call $import3
- (i32.const 1)
- )
- (call $import3
- (i32.const 2)
- )
- )
- )
- (func $calls-import2-if-else-oneside (param $x i32) (result i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (block
- (block
- (local.set $1
- (local.get $x)
- )
- (if
- (local.get $1)
- (return
- (i32.const 1)
- )
- (call $import3
- (i32.const 2)
- )
- )
- )
- (return
- (i32.const 3)
- )
- )
- )
- (func $calls-import2-if-else-oneside2 (param $x i32) (result i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (block
- (block
- (local.set $1
- (local.get $x)
- )
- (if
- (local.get $1)
- (call $import3
- (i32.const 1)
- )
- (return
- (i32.const 2)
- )
- )
- )
- (return
- (i32.const 3)
- )
- )
- )
- (func $calls-loop (param $x i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (loop $l
- (call $import3
- (i32.const 1)
- )
- (local.set $1
- (local.get $x)
- )
- (local.set $2
- (i32.add
- (local.get $1)
- (i32.const 1)
- )
- )
- (local.set $x
- (local.get $2)
- )
- (local.set $3
- (local.get $x)
- )
- (br_if $l
- (local.get $3)
- )
- )
- )
- (func $calls-loop2
- (local $0 i32)
- (local $1 i32)
- (local $2 i32)
- (local $3 i32)
- (local $4 i32)
- (local $5 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $4
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (local.set $0
- (i32.load
- (local.get $4)
- )
- )
- )
- )
- (local.set $1
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $2
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (loop $l
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $2)
- (i32.const 0)
- )
- )
- (block
- (local.set $3
- (call $import2)
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- (local.set $0
- (local.get $3)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (br_if $l
- (local.get $0)
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $1)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (block
- (local.set $5
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- (i32.store
- (local.get $5)
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- )
- (func $calls-mix
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (call $boring)
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (call $boring)
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 1)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 1)
- )
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $boring
- (nop)
- )
- (func $calls-mix-deep
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (call $boring-deep)
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $import-deep)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (call $boring)
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 1)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 1)
- )
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $boring-deep
- (call $boring)
- )
- (func $import-deep
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $asyncify_start_unwind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 1)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_unwind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_start_rewind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 2)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_rewind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_get_state (result i32)
- (global.get $__asyncify_state)
- )
-)
diff --git a/test/passes/asyncify_pass-arg=asyncify-imports@env.import,env.import2.wast b/test/passes/asyncify_pass-arg=asyncify-imports@env.import,env.import2.wast
deleted file mode 100644
index e39946974..000000000
--- a/test/passes/asyncify_pass-arg=asyncify-imports@env.import,env.import2.wast
+++ /dev/null
@@ -1,146 +0,0 @@
-;; Pre-existing imports that the pass turns into the implementations.
-(module
- (memory 1 2)
- (import "asyncify" "start_unwind" (func $asyncify_start_unwind (param i32)))
- (import "asyncify" "start_rewind" (func $asyncify_start_rewind (param i32)))
- (import "asyncify" "stop_rewind" (func $asyncify_stop_rewind))
- (global $sleeping (mut i32) (i32.const 0))
- ;; do a sleep operation: start a sleep if running, or resume after a sleep
- ;; if we just rewound.
- (func $do_sleep
- (if
- (i32.eqz (global.get $sleeping))
- (block
- (global.set $sleeping (i32.const 1))
- ;; we should set up the data at address 4 around here
- (call $asyncify_start_unwind (i32.const 4))
- )
- (block
- (global.set $sleeping (i32.const 0))
- (call $asyncify_stop_rewind)
- )
- )
- )
- ;; a function that does some work and has a sleep (async pause/resume) in the middle
- (func $work
- (call $stuff) ;; do some work
- (call $do_sleep) ;; take a break
- (call $stuff) ;; do some more work
- )
- (func $stuff)
- ;; the first event called from the main event loop: just call into $work
- (func $first_event
- (call $work)
- ;; work will sleep, so we exit through here while it is paused
- )
- ;; the second event called from the main event loop: to resume $work,
- ;; initiate a rewind, and then do the call to start things back up
- (func $second_event
- (call $asyncify_start_rewind (i32.const 4))
- (call $work)
- )
- ;; a function that can't do a sleep
- (func $never_sleep
- (call $stuff)
- (call $stuff)
- (call $stuff)
- )
-)
-;; Calls to imports that will call into asyncify themselves.
-(module
- (memory 1 2)
- (import "env" "import" (func $import))
- (import "env" "import2" (func $import2 (result i32)))
- (import "env" "import3" (func $import3 (param i32)))
- (func $calls-import
- (call $import)
- )
- (func $calls-import2 (result i32)
- (local $temp i32)
- (local.set $temp (call $import2))
- (return (local.get $temp))
- )
- (func $calls-import2-drop
- (drop (call $import2))
- )
- (func $calls-nothing
- (drop (i32.eqz (i32.const 17)))
- )
- (func $many-locals (param $x i32) (result i32)
- (local $y i32)
- (loop $l
- (local.set $x
- (i32.add (local.get $y) (i32.const 1))
- )
- (local.set $y
- (i32.div_s (local.get $x) (i32.const 3))
- )
- (br_if $l (local.get $y))
- )
- (call $import)
- (return (local.get $y))
- )
- (func $calls-import2-if (param $x i32)
- (if (local.get $x)
- (call $import)
- )
- )
- (func $calls-import2-if-else (param $x i32)
- (if (local.get $x)
- (call $import3 (i32.const 1))
- (call $import3 (i32.const 2))
- )
- )
- (func $calls-import2-if-else-oneside (param $x i32) (result i32)
- (if (local.get $x)
- (return (i32.const 1))
- (call $import3 (i32.const 2))
- )
- (return (i32.const 3))
- )
- (func $calls-import2-if-else-oneside2 (param $x i32) (result i32)
- (if (local.get $x)
- (call $import3 (i32.const 1))
- (return (i32.const 2))
- )
- (return (i32.const 3))
- )
- (func $calls-loop (param $x i32)
- (loop $l
- (call $import3 (i32.const 1))
- (local.set $x
- (i32.add (local.get $x) (i32.const 1))
- )
- (br_if $l
- (local.get $x)
- )
- )
- )
- (func $calls-loop2
- (loop $l
- (br_if $l
- (call $import2)
- )
- )
- )
- (func $calls-mix
- (call $boring)
- (call $import)
- (call $boring)
- (call $import)
- )
- (func $boring)
- (func $calls-mix-deep
- (call $boring-deep)
- (call $import-deep)
- (call $boring)
- (call $import)
- )
- (func $boring-deep
- (call $boring)
- )
- (func $import-deep
- (call $import)
- )
-)
-
diff --git a/test/passes/asyncify_pass-arg=asyncify-onlylist@foo,bar.txt b/test/passes/asyncify_pass-arg=asyncify-onlylist@foo,bar.txt
deleted file mode 100644
index 4446b619d..000000000
--- a/test/passes/asyncify_pass-arg=asyncify-onlylist@foo,bar.txt
+++ /dev/null
@@ -1,270 +0,0 @@
-(module
- (type $none_=>_none (func))
- (type $i32_=>_none (func (param i32)))
- (type $none_=>_i32 (func (result i32)))
- (import "env" "import" (func $import))
- (global $__asyncify_state (mut i32) (i32.const 0))
- (global $__asyncify_data (mut i32) (i32.const 0))
- (memory $0 1 2)
- (export "asyncify_start_unwind" (func $asyncify_start_unwind))
- (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
- (export "asyncify_start_rewind" (func $asyncify_start_rewind))
- (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
- (export "asyncify_get_state" (func $asyncify_get_state))
- (func $foo
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $bar
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $baz
- (call $import)
- )
- (func $other1
- (call $foo)
- )
- (func $other2
- (call $baz)
- )
- (func $asyncify_start_unwind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 1)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_unwind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_start_rewind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 2)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_rewind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_get_state (result i32)
- (global.get $__asyncify_state)
- )
-)
diff --git a/test/passes/asyncify_pass-arg=asyncify-onlylist@foo,bar.wast b/test/passes/asyncify_pass-arg=asyncify-onlylist@foo,bar.wast
deleted file mode 100644
index a152a5376..000000000
--- a/test/passes/asyncify_pass-arg=asyncify-onlylist@foo,bar.wast
+++ /dev/null
@@ -1,20 +0,0 @@
-(module
- (memory 1 2)
- (import "env" "import" (func $import))
- (func $foo
- (call $import)
- )
- (func $bar
- (call $import)
- )
- (func $baz
- (call $import)
- )
- (func $other1
- (call $foo) ;; even though we call foo, we are not in the only list, so do not instrument us
- )
- (func $other2
- (call $baz)
- )
-)
-
diff --git a/test/passes/asyncify_pass-arg=asyncify-verbose.txt b/test/passes/asyncify_pass-arg=asyncify-verbose.txt
deleted file mode 100644
index 7e99b0c26..000000000
--- a/test/passes/asyncify_pass-arg=asyncify-verbose.txt
+++ /dev/null
@@ -1,355 +0,0 @@
-[asyncify] import is an import that can change the state
-[asyncify] calls-import can change the state due to import
-[asyncify] calls-calls-import can change the state due to calls-import
-[asyncify] calls-calls-calls-import can change the state due to calls-calls-import
-(module
- (type $none_=>_none (func))
- (type $i32_=>_none (func (param i32)))
- (type $none_=>_i32 (func (result i32)))
- (import "env" "import" (func $import))
- (global $__asyncify_state (mut i32) (i32.const 0))
- (global $__asyncify_data (mut i32) (i32.const 0))
- (memory $0 1 2)
- (export "asyncify_start_unwind" (func $asyncify_start_unwind))
- (export "asyncify_stop_unwind" (func $asyncify_stop_unwind))
- (export "asyncify_start_rewind" (func $asyncify_start_rewind))
- (export "asyncify_stop_rewind" (func $asyncify_stop_rewind))
- (export "asyncify_get_state" (func $asyncify_get_state))
- (func $calls-import
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $calls-calls-import
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $calls-import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $calls-calls-calls-import
- (local $0 i32)
- (local $1 i32)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (nop)
- )
- (local.set $0
- (block $__asyncify_unwind (result i32)
- (block
- (block
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 2)
- )
- (block
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const -4)
- )
- )
- (local.set $1
- (i32.load
- (i32.load
- (global.get $__asyncify_data)
- )
- )
- )
- )
- )
- (if
- (if (result i32)
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 0)
- )
- (i32.const 1)
- (i32.eq
- (local.get $1)
- (i32.const 0)
- )
- )
- (block
- (call $calls-calls-import)
- (if
- (i32.eq
- (global.get $__asyncify_state)
- (i32.const 1)
- )
- (br $__asyncify_unwind
- (i32.const 0)
- )
- )
- )
- )
- )
- (return)
- )
- )
- )
- (block
- (i32.store
- (i32.load
- (global.get $__asyncify_data)
- )
- (local.get $0)
- )
- (i32.store
- (global.get $__asyncify_data)
- (i32.add
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.const 4)
- )
- )
- )
- (nop)
- )
- (func $nothing
- (nop)
- )
- (func $asyncify_start_unwind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 1)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_unwind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_start_rewind (param $0 i32)
- (global.set $__asyncify_state
- (i32.const 2)
- )
- (global.set $__asyncify_data
- (local.get $0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_stop_rewind
- (global.set $__asyncify_state
- (i32.const 0)
- )
- (if
- (i32.gt_u
- (i32.load
- (global.get $__asyncify_data)
- )
- (i32.load offset=4
- (global.get $__asyncify_data)
- )
- )
- (unreachable)
- )
- )
- (func $asyncify_get_state (result i32)
- (global.get $__asyncify_state)
- )
-)
diff --git a/test/passes/asyncify_pass-arg=asyncify-verbose.wast b/test/passes/asyncify_pass-arg=asyncify-verbose.wast
deleted file mode 100644
index 1b1ebf235..000000000
--- a/test/passes/asyncify_pass-arg=asyncify-verbose.wast
+++ /dev/null
@@ -1,17 +0,0 @@
-(module
- (memory 1 2)
- (import "env" "import" (func $import))
- (func $calls-import
- (call $import)
- )
- (func $calls-calls-import
- (call $calls-import)
- )
- (func $calls-calls-calls-import
- (call $calls-calls-import)
- )
- (func $nothing
- (nop)
- )
-)
-