diff options
Diffstat (limited to 'test/passes/remove-unused-names_merge-blocks.wast')
-rw-r--r-- | test/passes/remove-unused-names_merge-blocks.wast | 592 |
1 files changed, 592 insertions, 0 deletions
diff --git a/test/passes/remove-unused-names_merge-blocks.wast b/test/passes/remove-unused-names_merge-blocks.wast new file mode 100644 index 000000000..a4a9873e9 --- /dev/null +++ b/test/passes/remove-unused-names_merge-blocks.wast @@ -0,0 +1,592 @@ +(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 + (i32.const 10) + ) + ) + ) + (func $b1-yes (param $i1 i32) + (block $topmost + (block + (block + (i32.const 10) + ) + ) + ) + ) + (func $b2-yes (param $i1 i32) + (block $topmost + (i32.const 5) + (block + (i32.const 10) + ) + (i32.const 15) + ) + ) + (func $b3-yes (param $i1 i32) + (block $topmost + (i32.const 3) + (block + (i32.const 6) + (block + (i32.const 10) + ) + (i32.const 15) + ) + (i32.const 20) + ) + ) + (func $b4 (param $i1 i32) + (block $topmost + (block $inner + (i32.const 10) + (br $inner) + ) + ) + ) + (func $b5 (param $i1 i32) + (block $topmost + (block $middle + (block $inner + (i32.const 10) + (br $inner) + ) + (br $middle) + ) + ) + ) + (func $b6 (param $i1 i32) + (block $topmost + (i32.const 5) + (block $inner + (i32.const 10) + (br $inner) + ) + (i32.const 15) + ) + ) + (func $b7 (param $i1 i32) + (block $topmost + (i32.const 3) + (block $middle + (i32.const 6) + (block $inner + (i32.const 10) + (br $inner) + ) + (i32.const 15) + (br $middle) + ) + (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) + ) + ) +) + |