diff options
Diffstat (limited to 'test/passes')
-rw-r--r-- | test/passes/merge-blocks.txt | 452 | ||||
-rw-r--r-- | test/passes/merge-blocks.wast | 506 |
2 files changed, 958 insertions, 0 deletions
diff --git a/test/passes/merge-blocks.txt b/test/passes/merge-blocks.txt index 2b4278f7c..f5d772c74 100644 --- a/test/passes/merge-blocks.txt +++ b/test/passes/merge-blocks.txt @@ -1,5 +1,18 @@ (module (memory 256 256) + (type $i (func (param i32))) + (type $ii (func (param i32 i32))) + (type $iii (func (param i32 i32 i32))) + (table $call-i) + (func $call-i (param $0 i32) + (nop) + ) + (func $call-ii (param $0 i32) (param $1 i32) + (nop) + ) + (func $call-iii (param $0 i32) (param $1 i32) (param $2 i32) + (nop) + ) (func $b0-yes (param $i1 i32) (block $topmost (block $block0 @@ -82,4 +95,443 @@ (i32.const 20) ) ) + (func $unary + (local $x i32) + (i32.eqz + (block $block0 + (i32.const 10) + ) + ) + (block $block1 + (i32.const 10) + (i32.eqz + (i32.const 20) + ) + ) + (block $block2 + (i32.const 10) + (i32.const 20) + (i32.eqz + (i32.const 30) + ) + ) + (block $block3 + (i32.const 10) + (set_local $x + (i32.const 20) + ) + ) + (block $block4 + (i32.const 10) + (i32.load + (i32.const 20) + ) + ) + (block $block5 + (i32.const 10) + (return + (unreachable) + ) + ) + ) + (func $binary + (i32.add + (block $block0 + (i32.const 10) + ) + (i32.const 20) + ) + (block $block1 + (i32.const 10) + (i32.add + (i32.const 20) + (i32.const 30) + ) + ) + (block $block2 + (i32.const 10) + (i32.const 20) + (i32.add + (i32.const 30) + (i32.const 40) + ) + ) + (i32.add + (i32.const 10) + (block $block3 + (i32.const 20) + ) + ) + (block $block4 + (i32.const 20) + (i32.add + (i32.const 10) + (i32.const 30) + ) + ) + (block $block5 + (i32.const 20) + (i32.const 30) + (i32.add + (i32.const 10) + (i32.const 40) + ) + ) + (i32.add + (block $block6 + (i32.const 10) + ) + (block $block7 + (i32.const 20) + ) + ) + (block $block8 + (i32.const 10) + (i32.const 30) + (i32.add + (i32.const 20) + (i32.const 40) + ) + ) + (block $block10 + (i32.const 10) + (i32.const 20) + (i32.const 40) + (i32.const 50) + (i32.add + (i32.const 30) + (i32.const 60) + ) + ) + (block $block12 + (i32.const 20) + (i32.store + (i32.const 10) + (i32.const 30) + ) + ) + (block $block13 + (i32.const 10) + (i32.store + (i32.const 20) + (i32.const 30) + ) + ) + (i32.add + (unreachable) + (block $block14 + (i32.const 10) + (i32.const 20) + ) + ) + (block $block15 + (unreachable) + (i32.const 20) + (i32.add + (i32.const 10) + (i32.const 30) + ) + ) + ) + (func $trinary + (block $block0 + (i32.const 10) + (i32.const 30) + (i32.const 50) + (select + (i32.const 20) + (i32.const 40) + (i32.const 60) + ) + ) + (block $block4 + (i32.const 20) + (i32.const 40) + (select + (block $block3 + (i32.const 10) + ) + (i32.const 30) + (i32.const 50) + ) + ) + (block $block6 + (i32.const 10) + (i32.const 40) + (select + (i32.const 20) + (block $block7 + (i32.const 30) + ) + (i32.const 50) + ) + ) + (block $block9 + (i32.const 10) + (i32.const 30) + (select + (i32.const 20) + (i32.const 40) + (block $block11 + (i32.const 50) + ) + ) + ) + (block $block14 + (i32.const 30) + (select + (block $block12 + (i32.const 10) + ) + (block $block13 + (i32.const 20) + ) + (i32.const 40) + ) + ) + (block $block16 + (i32.const 20) + (select + (block $block15 + (i32.const 10) + ) + (i32.const 30) + (block $block17 + (i32.const 40) + ) + ) + ) + (block $block18 + (i32.const 10) + (select + (i32.const 20) + (block $block19 + (i32.const 30) + ) + (block $block20 + (i32.const 40) + ) + ) + ) + (block $block21 + (unreachable) + (i32.const 30) + (i32.const 50) + (select + (i32.const 20) + (i32.const 40) + (i32.const 60) + ) + ) + (block $block24 + (i32.const 10) + (select + (unreachable) + (block $block25 + (i32.const 30) + (i32.const 40) + ) + (block $block26 + (i32.const 50) + (i32.const 60) + ) + ) + ) + (block $block27 + (i32.const 10) + (unreachable) + (i32.const 50) + (select + (i32.const 20) + (i32.const 40) + (i32.const 60) + ) + ) + (block $block30 + (i32.const 10) + (i32.const 30) + (select + (i32.const 20) + (unreachable) + (block $block32 + (i32.const 50) + (i32.const 60) + ) + ) + ) + (block $block33 + (i32.const 10) + (i32.const 30) + (unreachable) + (select + (i32.const 20) + (i32.const 40) + (i32.const 60) + ) + ) + (block $block36 + (i32.const 10) + (i32.const 30) + (i32.const 50) + (select + (i32.const 20) + (i32.const 40) + (unreachable) + ) + ) + ) + (func $breaks + (block $out + (block $block0 + (i32.const 10) + (br $out + (i32.const 20) + ) + ) + (block $block1 + (i32.const 10) + (br_if $out + (i32.const 20) + ) + ) + (block $block2 + (i32.const 10) + (i32.const 30) + (br_if $out + (i32.const 20) + (i32.const 40) + ) + ) + (block $block4 + (i32.const 10) + (br_table $out $out + (i32.const 20) + ) + ) + (block $block5 + (i32.const 10) + (i32.const 30) + (br_table $out $out + (i32.const 20) + (i32.const 40) + ) + ) + ) + ) + (func $calls + (call $call-i + (block $block0 + (i32.const 10) + ) + ) + (block $block1 + (i32.const 10) + (call $call-i + (i32.const 20) + ) + ) + (block $block2 + (i32.const 10) + (i32.const 20) + (call $call-i + (i32.const 30) + ) + ) + (block $block3 + (i32.const 10) + (i32.const 30) + (call $call-ii + (i32.const 20) + (i32.const 40) + ) + ) + (block $block5 + (unreachable) + (i32.const 20) + (call $call-ii + (i32.const 10) + (i32.const 30) + ) + ) + (block $block7 + (i32.const 10) + (call $call-ii + (unreachable) + (block $block8 + (i32.const 20) + (i32.const 30) + ) + ) + ) + (block $block9 + (i32.const 10) + (unreachable) + (call $call-ii + (i32.const 20) + (i32.const 30) + ) + ) + (block $block11 + (i32.const 10) + (i32.const 30) + (call $call-ii + (i32.const 20) + (unreachable) + ) + ) + (block $block13 + (i32.const 10) + (i32.const 30) + (i32.const 50) + (call $call-iii + (i32.const 20) + (i32.const 40) + (i32.const 60) + ) + ) + (block $block16 + (i32.const 10) + (i32.const 40) + (call $call-iii + (i32.const 20) + (i32.const 30) + (i32.const 50) + ) + ) + (block $block18 + (i32.const 10) + (i32.const 30) + (i32.const 50) + (call_indirect $ii + (i32.const 20) + (i32.const 40) + (i32.const 60) + ) + ) + (call_indirect $ii + (unreachable) + (block $block21 + (i32.const 30) + (i32.const 40) + ) + (block $block22 + (i32.const 50) + (i32.const 60) + ) + ) + ) + (func $block-type-change + (local $0 f64) + (local $1 f64) + (if + (block $block0 + (nop) + (f64.gt + (get_local $0) + (get_local $1) + ) + ) + (nop) + ) + ) ) 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) + ) + ) ) |