diff options
Diffstat (limited to 'test/passes/merge-blocks.wast')
-rw-r--r-- | test/passes/merge-blocks.wast | 506 |
1 files changed, 506 insertions, 0 deletions
diff --git a/test/passes/merge-blocks.wast b/test/passes/merge-blocks.wast index 09eefefdb..a4a9873e9 100644 --- a/test/passes/merge-blocks.wast +++ b/test/passes/merge-blocks.wast @@ -1,5 +1,15 @@ (module (memory 256 256) + (type $i (func (param i32))) + (type $ii (func (param i32) (param i32))) + (type $iii (func (param i32) (param i32) (param i32))) + (table $call-i) + (func $call-i (param i32) + ) + (func $call-ii (param i32) (param i32) + ) + (func $call-iii (param i32) (param i32) (param i32) + ) (func $b0-yes (param $i1 i32) (block $topmost (block @@ -82,5 +92,501 @@ (i32.const 20) ) ) + (func $unary + (local $x i32) + (i32.eqz + (block + (i32.const 10) + ) + ) + (i32.eqz + (block + (i32.const 10) + (i32.const 20) + ) + ) + (i32.eqz + (block + (i32.const 10) + (i32.const 20) + (i32.const 30) + ) + ) + (set_local $x + (block + (i32.const 10) + (i32.const 20) + ) + ) + (i32.load + (block + (i32.const 10) + (i32.const 20) + ) + ) + (return + (block + (i32.const 10) + (unreachable) + ) + ) + ) + (func $binary + (i32.add + (block + (i32.const 10) + ) + (i32.const 20) + ) + (i32.add + (block + (i32.const 10) + (i32.const 20) + ) + (i32.const 30) + ) + (i32.add + (block + (i32.const 10) + (i32.const 20) + (i32.const 30) + ) + (i32.const 40) + ) + (i32.add + (i32.const 10) + (block + (i32.const 20) + ) + ) + (i32.add + (i32.const 10) + (block + (i32.const 20) + (i32.const 30) + ) + ) + (i32.add + (i32.const 10) + (block + (i32.const 20) + (i32.const 30) + (i32.const 40) + ) + ) + (i32.add + (block + (i32.const 10) + ) + (block + (i32.const 20) + ) + ) + (i32.add + (block + (i32.const 10) + (i32.const 20) + ) + (block + (i32.const 30) + (i32.const 40) + ) + ) + (i32.add + (block + (i32.const 10) + (i32.const 20) + (i32.const 30) + ) + (block + (i32.const 40) + (i32.const 50) + (i32.const 60) + ) + ) + (i32.store + (i32.const 10) + (block + (i32.const 20) + (i32.const 30) + ) + ) + (i32.store + (block + (i32.const 10) + (i32.const 20) + ) + (i32.const 30) + ) + (i32.add + (unreachable) ;; do not move across this TODO: move non-side-effecting + (block + (i32.const 10) + (i32.const 20) + ) + ) + (i32.add + (block + (unreachable) ;; moves out, so does not block the rest + (i32.const 10) + ) + (block + (i32.const 20) + (i32.const 30) + ) + ) + ) + (func $trinary + (select + (block + (i32.const 10) + (i32.const 20) + ) + (block + (i32.const 30) + (i32.const 40) + ) + (block + (i32.const 50) + (i32.const 60) + ) + ) + (select + (block + (i32.const 10) + ) + (block + (i32.const 20) + (i32.const 30) + ) + (block + (i32.const 40) + (i32.const 50) + ) + ) + (select + (block + (i32.const 10) + (i32.const 20) + ) + (block + (i32.const 30) + ) + (block + (i32.const 40) + (i32.const 50) + ) + ) + (select + (block + (i32.const 10) + (i32.const 20) + ) + (block + (i32.const 30) + (i32.const 40) + ) + (block + (i32.const 50) + ) + ) + (select + (block + (i32.const 10) + ) + (block + (i32.const 20) + ) + (block + (i32.const 30) + (i32.const 40) + ) + ) + (select + (block + (i32.const 10) + ) + (block + (i32.const 20) + (i32.const 30) + ) + (block + (i32.const 40) + ) + ) + (select + (block + (i32.const 10) + (i32.const 20) + ) + (block + (i32.const 30) + ) + (block + (i32.const 40) + ) + ) + ;; now for bad stuff + (select + (block + (unreachable) + (i32.const 20) + ) + (block + (i32.const 30) + (i32.const 40) + ) + (block + (i32.const 50) + (i32.const 60) + ) + ) + (select + (block + (i32.const 10) + (unreachable) + ) + (block + (i32.const 30) + (i32.const 40) + ) + (block + (i32.const 50) + (i32.const 60) + ) + ) + (select + (block + (i32.const 10) + (i32.const 20) + ) + (block + (unreachable) + (i32.const 40) + ) + (block + (i32.const 50) + (i32.const 60) + ) + ) + (select + (block + (i32.const 10) + (i32.const 20) + ) + (block + (i32.const 30) + (unreachable) + ) + (block + (i32.const 50) + (i32.const 60) + ) + ) + (select + (block + (i32.const 10) + (i32.const 20) + ) + (block + (i32.const 30) + (i32.const 40) + ) + (block + (unreachable) + (i32.const 60) + ) + ) + (select + (block + (i32.const 10) + (i32.const 20) + ) + (block + (i32.const 30) + (i32.const 40) + ) + (block + (i32.const 50) + (unreachable) + ) + ) + ) + (func $breaks + (block $out + (br $out + (block + (i32.const 10) + (i32.const 20) + ) + ) + (br_if $out + (block + (i32.const 10) + (i32.const 20) + ) + ) + (br_if $out + (block + (i32.const 10) + (i32.const 20) + ) + (block + (i32.const 30) + (i32.const 40) + ) + ) + (br_table $out $out + (block + (i32.const 10) + (i32.const 20) + ) + ) + (br_table $out $out + (block + (i32.const 10) + (i32.const 20) + ) + (block + (i32.const 30) + (i32.const 40) + ) + ) + ) + ) + (func $calls + (call $call-i + (block + (i32.const 10) + ) + ) + (call $call-i + (block + (i32.const 10) + (i32.const 20) + ) + ) + (call $call-i + (block + (i32.const 10) + (i32.const 20) + (i32.const 30) + ) + ) + (call $call-ii + (block + (i32.const 10) + (i32.const 20) + ) + (block + (i32.const 30) + (i32.const 40) + ) + ) + (call $call-ii + (block + (unreachable) + (i32.const 10) + ) + (block + (i32.const 20) + (i32.const 30) + ) + ) + (call $call-ii + (block + (i32.const 10) + (unreachable) + ) + (block + (i32.const 20) + (i32.const 30) + ) + ) + (call $call-ii + (block + (i32.const 10) + (i32.const 20) + ) + (block + (unreachable) + (i32.const 30) + ) + ) + (call $call-ii + (block + (i32.const 10) + (i32.const 20) + ) + (block + (i32.const 30) + (unreachable) + ) + ) + (call $call-iii + (block + (i32.const 10) + (i32.const 20) + ) + (block + (i32.const 30) + (i32.const 40) + ) + (block + (i32.const 50) + (i32.const 60) + ) + ) + (call $call-iii + (block + (i32.const 10) + (i32.const 20) + ) + (i32.const 30) + (block + (i32.const 40) + (i32.const 50) + ) + ) + (call_indirect $ii + (block + (i32.const 10) + (i32.const 20) + ) + (block + (i32.const 30) + (i32.const 40) + ) + (block + (i32.const 50) + (i32.const 60) + ) + ) + (call_indirect $ii + (unreachable) + (block + (i32.const 30) + (i32.const 40) + ) + (block + (i32.const 50) + (i32.const 60) + ) + ) + ) + (func $block-type-change + (local $0 f64) + (local $1 f64) + (if + (f64.gt + (get_local $0) + (block + (nop) + (get_local $1) + ) + ) + (nop) + ) + ) ) |