diff options
author | Sam Clegg <sbc@chromium.org> | 2022-08-12 08:18:06 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-12 08:18:06 -0700 |
commit | 3b1cc0b7d297086ddec24644722df1839e0579e1 (patch) | |
tree | ce5b13776a1567586102ca6995ea09cc6c0bb3f9 /test/lit/passes | |
parent | 89282a81fc5cc6fbeb4ffb952fa05b25da2070a3 (diff) | |
download | binaryen-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')
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: ) |