summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/wasm/multi-value/block-run.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/wasm/multi-value/block-run.js')
-rw-r--r--js/src/jit-test/tests/wasm/multi-value/block-run.js268
1 files changed, 268 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/wasm/multi-value/block-run.js b/js/src/jit-test/tests/wasm/multi-value/block-run.js
new file mode 100644
index 0000000000..3b6689d2f9
--- /dev/null
+++ b/js/src/jit-test/tests/wasm/multi-value/block-run.js
@@ -0,0 +1,268 @@
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (i32.add
+ (block (result i32 i32)
+ (i32.const 32)
+ (i32.const 10)))))`,
+ 42);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (i32.const 32) (i32.const 10)
+ (block (param i32 i32) (result i32 i32))
+ (i32.add)))`,
+ 42);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (i32.const 32)
+ (block (param i32) (result i32 i32)
+ (i32.const 10))
+ (i32.add)))`,
+ 42);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (i32.add
+ (loop (result i32 i32)
+ (i32.const 32)
+ (i32.const 10)))))`,
+ 42);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (i32.const 32) (i32.const 10)
+ (loop (param i32 i32) (result i32 i32))
+ (i32.add)))`,
+ 42);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (i32.const 32)
+ (loop (param i32) (result i32 i32)
+ (i32.const 10))
+ (i32.add)))`,
+ 42);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (i32.add
+ (block (result i32 i32)
+ (i32.const 32)
+ (i32.const 10)
+ (br 0)))))`,
+ 42);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (i32.const 32)
+ (i32.const 10)
+ (block (param i32 i32) (result i32 i32)
+ (br 0))
+ (i32.add)))`,
+ 42);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (i32.const 32)
+ (block (param i32) (result i32 i32)
+ (i32.const 10)
+ (br 0))
+ (i32.add)))`,
+ 42);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (i32.add
+ (block (result i32 i32)
+ (i32.const 32)
+ (i32.const 10)
+ (block (param i32 i32) (result i32 i32)
+ (br 1))))))`,
+ 42);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (i32.const 32)
+ (i32.const 10)
+ (block (param i32 i32) (result i32 i32)
+ (block (param i32 i32) (result i32 i32)
+ (br 1)))
+ (i32.add)))`,
+ 42);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (i32.const 32)
+ (i32.const 10)
+ (block (param i32 i32) (result i32 i32)
+ (block (param i32 i32) (result i32 i32)
+ (br 0)))
+ (i32.add)))`,
+ 42);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (i32.const 32)
+ (block (param i32) (result i32 i32)
+ (i32.const 10)
+ (block (param i32 i32) (result i32 i32)
+ (br 1)))
+ (i32.add)))`,
+ 42);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (i32.const 32)
+ (i32.const 10)
+ (i32.const 1)
+ (if (param i32 i32) (result i32)
+ (then (i32.add))
+ (else (i32.sub)))))`,
+ 42);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (i32.const 32)
+ (i32.const 10)
+ (i32.const 1)
+ (if (param i32 i32) (result i32 i32)
+ (then
+ (drop)
+ (drop)
+ (i32.const 10)
+ (i32.const 32)))
+ (i32.sub)))`,
+ -22);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (i32.const 32)
+ (i32.const 10)
+ (i32.const 0)
+ (if (param i32 i32) (result i32 i32)
+ (then
+ (drop)
+ (drop)
+ (i32.const 10)
+ (i32.const 32)))
+ (i32.sub)))`,
+ 22);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (i32.const 32)
+ (i32.const 10)
+ (i32.const 1)
+ (if (param i32 i32) (result i32 i32)
+ (then (return)))
+ (i32.sub)))`,
+ 10);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (i32.const 32)
+ (i32.const 10)
+ (i32.const 0)
+ (if (param i32 i32) (result i32 i32)
+ (then (return)))
+ (i32.sub)))`,
+ 22);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (i32.const 32)
+ (i32.const 10)
+ (i32.const 1)
+ (if (param i32 i32) (result i32 i32)
+ (then)
+ (else (return)))
+ (i32.sub)))`,
+ 22);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (i32.const 32)
+ (i32.const 10)
+ (i32.const 0)
+ (if (param i32 i32) (result i32 i32)
+ (then)
+ (else (return)))
+ (i32.sub)))`,
+ 10);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (local $i i32)
+ (i32.const 0) ;; sum
+ (i32.const 10) ;; i
+ (loop $loop (param i32 i32) (result i32)
+ (local.tee $i)
+ (i32.add) ;; sum = i + sum
+ (i32.sub (local.get $i) (i32.const 1))
+ (i32.eqz (local.tee $i))
+ (if (param i32) (result i32)
+ (then)
+ (else (local.get $i) (br $loop))))))`,
+ 55);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (local i32)
+ i32.const 42
+ local.get 0
+ local.get 0
+ loop (param i32 i32 i32) (result i32)
+ drop
+ drop
+ end))`,
+ 42);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (block (result i32 i32)
+ (i32.popcnt (i32.const 1))
+ (i32.popcnt (i32.const 3))
+ (block (param i32 i32)
+ (i32.const 6)
+ (i32.const 7)
+ (br 1))
+ (unreachable))
+ i32.add))`,
+ 13);
+
+wasmFullPass(`
+ (module
+ (func (export "run") (result i32)
+ (block (result i32 i32)
+ (i32.popcnt (i32.const 1))
+ (i32.popcnt (i32.const 3))
+ (block) ;; sync()
+ (i32.const 6)
+ (i32.const 7)
+ (br 0))
+ i32.add))`,
+ 13);