summaryrefslogtreecommitdiff
path: root/test/lit/passes
diff options
context:
space:
mode:
authorSam Clegg <sbc@chromium.org>2022-08-12 08:18:06 -0700
committerGitHub <noreply@github.com>2022-08-12 08:18:06 -0700
commit3b1cc0b7d297086ddec24644722df1839e0579e1 (patch)
treece5b13776a1567586102ca6995ea09cc6c0bb3f9 /test/lit/passes
parent89282a81fc5cc6fbeb4ffb952fa05b25da2070a3 (diff)
downloadbinaryen-3b1cc0b7d297086ddec24644722df1839e0579e1.tar.gz
binaryen-3b1cc0b7d297086ddec24644722df1839e0579e1.tar.bz2
binaryen-3b1cc0b7d297086ddec24644722df1839e0579e1.zip
Port test/passes/legalize-js-interface* to lit (#4903)
Also, add support for the `--binaryen-bin` flag to `scripts/port_passes_tests_to_lit.py`. This is needed for folks who don't do in-tree builds.
Diffstat (limited to 'test/lit/passes')
-rw-r--r--test/lit/passes/legalize-js-interface-minimally.wast84
-rw-r--r--test/lit/passes/legalize-js-interface_all-features.wast195
-rw-r--r--test/lit/passes/legalize-js-interface_pass-arg=legalize-js-interface-export-originals.wast43
3 files changed, 322 insertions, 0 deletions
diff --git a/test/lit/passes/legalize-js-interface-minimally.wast b/test/lit/passes/legalize-js-interface-minimally.wast
new file mode 100644
index 000000000..6c2c47136
--- /dev/null
+++ b/test/lit/passes/legalize-js-interface-minimally.wast
@@ -0,0 +1,84 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+;; NOTE: This test was ported using port_passes_tests_to_lit.py and could be cleaned up.
+
+;; RUN: foreach %s %t wasm-opt --legalize-js-interface-minimally -S -o - | filecheck %s
+
+(module
+ ;; CHECK: (type $none_=>_i64 (func (result i64)))
+
+ ;; CHECK: (type $i32_=>_none (func (param i32)))
+
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (type $i64_=>_none (func (param i64)))
+
+ ;; CHECK: (type $i32_i32_=>_none (func (param i32 i32)))
+
+ ;; CHECK: (import "env" "imported" (func $imported (result i64)))
+ (import "env" "imported" (func $imported (result i64)))
+ ;; CHECK: (import "env" "setTempRet0" (func $setTempRet0 (param i32)))
+ (import "env" "invoke_vj" (func $invoke_vj (param i64)))
+ ;; CHECK: (import "env" "invoke_vj" (func $legalimport$invoke_vj (param i32 i32)))
+
+ ;; CHECK: (export "func" (func $func))
+ (export "func" (func $func))
+ ;; CHECK: (export "dynCall_foo" (func $legalstub$dyn))
+ (export "dynCall_foo" (func $dyn))
+ ;; CHECK: (func $func (result i64)
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (call $imported)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $legalfunc$invoke_vj
+ ;; CHECK-NEXT: (i64.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ (func $func (result i64)
+ (drop (call $imported))
+ (call $invoke_vj (i64.const 0))
+ (unreachable)
+ )
+ ;; CHECK: (func $dyn (result i64)
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (call $imported)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ (func $dyn (result i64)
+ (drop (call $imported))
+ (unreachable)
+ )
+)
+;; CHECK: (func $legalstub$dyn (result i32)
+;; CHECK-NEXT: (local $0 i64)
+;; CHECK-NEXT: (local.set $0
+;; CHECK-NEXT: (call $dyn)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (call $setTempRet0
+;; CHECK-NEXT: (i32.wrap_i64
+;; CHECK-NEXT: (i64.shr_u
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: (i64.const 32)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.wrap_i64
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $legalfunc$invoke_vj (param $0 i64)
+;; CHECK-NEXT: (call $legalimport$invoke_vj
+;; CHECK-NEXT: (i32.wrap_i64
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.wrap_i64
+;; CHECK-NEXT: (i64.shr_u
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: (i64.const 32)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+(module)
+
diff --git a/test/lit/passes/legalize-js-interface_all-features.wast b/test/lit/passes/legalize-js-interface_all-features.wast
new file mode 100644
index 000000000..3ffe2acd7
--- /dev/null
+++ b/test/lit/passes/legalize-js-interface_all-features.wast
@@ -0,0 +1,195 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+;; NOTE: This test was ported using port_passes_tests_to_lit.py and could be cleaned up.
+
+;; RUN: foreach %s %t wasm-opt --legalize-js-interface --all-features -S -o - | filecheck %s
+
+(module
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (type $none_=>_i64 (func (result i64)))
+
+ ;; CHECK: (type $i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32)))
+
+ ;; CHECK: (type $none_=>_none (func))
+
+ ;; CHECK: (type $i32_=>_none (func (param i32)))
+
+ ;; CHECK: (type $i32_i64_i64_=>_none (func (param i32 i64 i64)))
+
+ ;; CHECK: (import "env" "setTempRet0" (func $setTempRet0 (param i32)))
+ (import "env" "imported" (func $imported (result i64)))
+ ;; CHECK: (import "env" "getTempRet0" (func $getTempRet0 (result i32)))
+ (import "env" "other" (func $other (param i32) (param i64) (param i64)))
+ ;; CHECK: (import "env" "imported" (func $legalimport$imported (result i32)))
+ (import "env" "ref-func-arg" (func $ref-func-arg (result i64)))
+ ;; CHECK: (import "env" "other" (func $legalimport$other (param i32 i32 i32 i32 i32)))
+
+ ;; CHECK: (import "env" "ref-func-arg" (func $legalimport$ref-func-arg (result i32)))
+
+ ;; CHECK: (elem declare func $legalfunc$ref-func-arg)
+
+ ;; CHECK: (export "func" (func $legalstub$func))
+ (export "func" (func $func))
+ ;; CHECK: (export "ref-func-test" (func $ref-func-test))
+ (export "ref-func-test" (func $ref-func-test))
+ ;; CHECK: (export "imported" (func $legalstub$imported))
+ (export "imported" (func $imported))
+ ;; CHECK: (export "imported_again" (func $legalstub$imported))
+ (export "imported_again" (func $imported))
+ ;; CHECK: (export "other" (func $legalstub$other))
+ (export "other" (func $other))
+ ;; CHECK: (func $func (result i64)
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (call $legalfunc$imported)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (call $legalfunc$other
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i64.const 0)
+ ;; CHECK-NEXT: (i64.const 0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ (func $func (result i64)
+ (drop (call $imported))
+ (call $other
+ (i32.const 0)
+ (i64.const 0)
+ (i64.const 0)
+ )
+ (unreachable)
+ )
+
+ ;; ref.func must also be updated.
+ ;; CHECK: (func $ref-func-test
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (call $legalfunc$ref-func-arg)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (ref.func $legalfunc$ref-func-arg)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $ref-func-test
+ (drop
+ (call $ref-func-arg)
+ )
+ (drop
+ (ref.func $ref-func-arg)
+ )
+ )
+)
+;; CHECK: (func $legalstub$func (result i32)
+;; CHECK-NEXT: (local $0 i64)
+;; CHECK-NEXT: (local.set $0
+;; CHECK-NEXT: (call $func)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (call $setTempRet0
+;; CHECK-NEXT: (i32.wrap_i64
+;; CHECK-NEXT: (i64.shr_u
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: (i64.const 32)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.wrap_i64
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $legalstub$imported (result i32)
+;; CHECK-NEXT: (local $0 i64)
+;; CHECK-NEXT: (local.set $0
+;; CHECK-NEXT: (call $legalfunc$imported)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (call $setTempRet0
+;; CHECK-NEXT: (i32.wrap_i64
+;; CHECK-NEXT: (i64.shr_u
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: (i64.const 32)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.wrap_i64
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $legalstub$other (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32)
+;; CHECK-NEXT: (call $legalfunc$other
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: (i64.or
+;; CHECK-NEXT: (i64.extend_i32_u
+;; CHECK-NEXT: (local.get $1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i64.shl
+;; CHECK-NEXT: (i64.extend_i32_u
+;; CHECK-NEXT: (local.get $2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i64.const 32)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i64.or
+;; CHECK-NEXT: (i64.extend_i32_u
+;; CHECK-NEXT: (local.get $3)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i64.shl
+;; CHECK-NEXT: (i64.extend_i32_u
+;; CHECK-NEXT: (local.get $4)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i64.const 32)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $legalfunc$imported (result i64)
+;; CHECK-NEXT: (i64.or
+;; CHECK-NEXT: (i64.extend_i32_u
+;; CHECK-NEXT: (call $legalimport$imported)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i64.shl
+;; CHECK-NEXT: (i64.extend_i32_u
+;; CHECK-NEXT: (call $getTempRet0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i64.const 32)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $legalfunc$other (param $0 i32) (param $1 i64) (param $2 i64)
+;; CHECK-NEXT: (call $legalimport$other
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: (i32.wrap_i64
+;; CHECK-NEXT: (local.get $1)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.wrap_i64
+;; CHECK-NEXT: (i64.shr_u
+;; CHECK-NEXT: (local.get $1)
+;; CHECK-NEXT: (i64.const 32)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.wrap_i64
+;; CHECK-NEXT: (local.get $2)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.wrap_i64
+;; CHECK-NEXT: (i64.shr_u
+;; CHECK-NEXT: (local.get $2)
+;; CHECK-NEXT: (i64.const 32)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+
+;; CHECK: (func $legalfunc$ref-func-arg (result i64)
+;; CHECK-NEXT: (i64.or
+;; CHECK-NEXT: (i64.extend_i32_u
+;; CHECK-NEXT: (call $legalimport$ref-func-arg)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i64.shl
+;; CHECK-NEXT: (i64.extend_i32_u
+;; CHECK-NEXT: (call $getTempRet0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i64.const 32)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+(module)
diff --git a/test/lit/passes/legalize-js-interface_pass-arg=legalize-js-interface-export-originals.wast b/test/lit/passes/legalize-js-interface_pass-arg=legalize-js-interface-export-originals.wast
new file mode 100644
index 000000000..abf6aa1da
--- /dev/null
+++ b/test/lit/passes/legalize-js-interface_pass-arg=legalize-js-interface-export-originals.wast
@@ -0,0 +1,43 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+;; NOTE: This test was ported using port_passes_tests_to_lit.py and could be cleaned up.
+
+;; RUN: foreach %s %t wasm-opt --legalize-js-interface --pass-arg=legalize-js-interface-export-originals -S -o - | filecheck %s
+
+(module
+ ;; CHECK: (type $none_=>_i64 (func (result i64)))
+
+ ;; CHECK: (type $i32_=>_none (func (param i32)))
+
+ ;; CHECK: (type $none_=>_i32 (func (result i32)))
+
+ ;; CHECK: (import "env" "setTempRet0" (func $setTempRet0 (param i32)))
+
+ ;; CHECK: (export "func" (func $legalstub$func))
+ (export "func" (func $func))
+ ;; CHECK: (export "orig$func" (func $func))
+
+ ;; CHECK: (func $func (result i64)
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ (func $func (result i64)
+ (unreachable)
+ )
+)
+
+;; CHECK: (func $legalstub$func (result i32)
+;; CHECK-NEXT: (local $0 i64)
+;; CHECK-NEXT: (local.set $0
+;; CHECK-NEXT: (call $func)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (call $setTempRet0
+;; CHECK-NEXT: (i32.wrap_i64
+;; CHECK-NEXT: (i64.shr_u
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: (i64.const 32)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )
+;; CHECK-NEXT: (i32.wrap_i64
+;; CHECK-NEXT: (local.get $0)
+;; CHECK-NEXT: )
+;; CHECK-NEXT: )