summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/passes/remove-unused-brs.txt502
-rw-r--r--test/passes/remove-unused-brs.wast295
2 files changed, 797 insertions, 0 deletions
diff --git a/test/passes/remove-unused-brs.txt b/test/passes/remove-unused-brs.txt
index 529fa6152..8fc58887a 100644
--- a/test/passes/remove-unused-brs.txt
+++ b/test/passes/remove-unused-brs.txt
@@ -9,6 +9,7 @@
(type $7 (func (result i64)))
(type $8 (func (result f32)))
(type $9 (func (param i32) (result f32)))
+ (type $10 (func (param i32) (result i32)))
(memory $0 256 256)
(func $b0-yes (; 0 ;) (type $0) (param $i1 i32)
(block $topmost
@@ -1156,4 +1157,505 @@
)
)
)
+ (func $br-to-table (; 46 ;) (type $0) (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (nop)
+ (nop)
+ (block $tablify|0
+ (br_table $x $y $z $tablify|0
+ (get_local $a)
+ )
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-too-few (; 47 ;) (type $0) (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x
+ (i32.eq
+ (get_local $a)
+ (i32.const 0)
+ )
+ )
+ (br_if $x
+ (i32.eq
+ (get_local $a)
+ (i32.const 1)
+ )
+ )
+ )
+ )
+ )
+ )
+ (func $br-to-table-one-more (; 48 ;) (type $0) (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (nop)
+ (nop)
+ (nop)
+ (block $tablify|0
+ (br_table $x $y $z $x $tablify|0
+ (get_local $a)
+ )
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-overlap (; 49 ;) (type $0) (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x
+ (i32.eq
+ (get_local $a)
+ (i32.const 0)
+ )
+ )
+ (br_if $y
+ (i32.eq
+ (get_local $a)
+ (i32.const 1)
+ )
+ )
+ (br_if $z
+ (i32.eq
+ (get_local $a)
+ (i32.const 1)
+ )
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-overlap-start (; 50 ;) (type $0) (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x
+ (i32.eq
+ (get_local $a)
+ (i32.const 0)
+ )
+ )
+ (br_if $y
+ (i32.eq
+ (get_local $a)
+ (i32.const 0)
+ )
+ )
+ (br_if $z
+ (i32.eq
+ (get_local $a)
+ (i32.const 1)
+ )
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-offset (; 51 ;) (type $0) (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (nop)
+ (nop)
+ (block $tablify|0
+ (br_table $x $y $z $tablify|0
+ (i32.sub
+ (get_local $a)
+ (i32.const 15)
+ )
+ )
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-RANGE-high (; 52 ;) (type $0) (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x
+ (i32.eq
+ (get_local $a)
+ (i32.const 0)
+ )
+ )
+ (br_if $y
+ (i32.eq
+ (get_local $a)
+ (i32.const 1)
+ )
+ )
+ (br_if $z
+ (i32.eq
+ (get_local $a)
+ (i32.const 10)
+ )
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-RANGE-low (; 53 ;) (type $0) (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (nop)
+ (nop)
+ (block $tablify|0
+ (br_table $x $tablify|0 $tablify|0 $y $tablify|0 $tablify|0 $tablify|0 $tablify|0 $tablify|0 $z $tablify|0
+ (get_local $a)
+ )
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-bad (; 54 ;) (type $10) (param $a i32) (result i32)
+ (block $value (result i32)
+ (block $x
+ (block $y
+ (block $z
+ (nop)
+ (br $x)
+ (nop)
+ (nop)
+ (block $tablify|0
+ (br_table $x $y $z $tablify|0
+ (get_local $a)
+ )
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (i32.const 2000)
+ )
+ )
+ (func $br-to-table-bad2 (; 55 ;) (type $10) (param $a i32) (result i32)
+ (block $value (result i32)
+ (block $x
+ (block $y
+ (block $z
+ (nop)
+ (drop
+ (br_if $value
+ (i32.const 1000)
+ (i32.eq
+ (get_local $a)
+ (i32.const 0)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (block $tablify|0
+ (br_table $x $y $z $tablify|0
+ (get_local $a)
+ )
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (i32.const 2000)
+ )
+ )
+ (func $br-to-table-bad3 (; 56 ;) (type $0) (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x
+ (i32.eq
+ (i32.const 10)
+ (i32.const 0)
+ )
+ )
+ (nop)
+ (nop)
+ (block $tablify|0
+ (br_table $x $y $z $tablify|0
+ (get_local $a)
+ )
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-multi (; 57 ;) (type $0) (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (nop)
+ (nop)
+ (block $tablify|0
+ (br_table $z $y $x $tablify|0
+ (i32.sub
+ (i32.const 10)
+ (i32.const 5)
+ )
+ )
+ )
+ (nop)
+ (nop)
+ (block $tablify|00
+ (br_table $x $y $z $tablify|00
+ (get_local $a)
+ )
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-bad4 (; 58 ;) (type $0) (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x
+ (i32.ne
+ (get_local $a)
+ (i32.const 0)
+ )
+ )
+ (br_if $y
+ (i32.eq
+ (get_local $a)
+ (i32.const 1)
+ )
+ )
+ (br_if $z
+ (i32.eq
+ (get_local $a)
+ (i32.const 2)
+ )
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-bad5 (; 59 ;) (type $0) (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x
+ (i32.eq
+ (get_local $a)
+ (get_local $a)
+ )
+ )
+ (br_if $y
+ (i32.eq
+ (get_local $a)
+ (get_local $a)
+ )
+ )
+ (br_if $z
+ (i32.eq
+ (get_local $a)
+ (get_local $a)
+ )
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-bad6 (; 60 ;) (type $0) (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x
+ (i32.eq
+ (call $b13)
+ (i32.const 0)
+ )
+ )
+ (br_if $y
+ (i32.eq
+ (call $b13)
+ (i32.const 1)
+ )
+ )
+ (br_if $z
+ (i32.eq
+ (call $b13)
+ (i32.const 2)
+ )
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-bad7 (; 61 ;) (type $0) (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x
+ (i32.eq
+ (get_local $a)
+ (i32.const -1)
+ )
+ )
+ (br_if $y
+ (i32.eq
+ (get_local $a)
+ (i32.const -1)
+ )
+ )
+ (br_if $z
+ (i32.eq
+ (get_local $a)
+ (i32.const -1)
+ )
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-defaultNameOverlaps (; 62 ;) (type $0) (param $a i32)
+ (block $x
+ (block $tablify|0
+ (block $z
+ (nop)
+ (nop)
+ (block $tablify|1
+ (br_table $x $tablify|0 $z $tablify|1
+ (get_local $a)
+ )
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-unreach (; 63 ;) (type $0) (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x
+ (i32.eq
+ (unreachable)
+ (i32.const 0)
+ )
+ )
+ (br_if $y
+ (i32.eq
+ (unreachable)
+ (i32.const 1)
+ )
+ )
+ (br_if $z
+ (i32.eq
+ (unreachable)
+ (i32.const 2)
+ )
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-overlap-but-later (; 64 ;) (type $0) (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x
+ (i32.eq
+ (get_local $a)
+ (i32.const 0)
+ )
+ )
+ (br_if $y
+ (i32.eq
+ (get_local $a)
+ (i32.const 1)
+ )
+ )
+ (nop)
+ (nop)
+ (block $tablify|0
+ (br_table $z $x $y $tablify|0
+ (i32.sub
+ (get_local $a)
+ (i32.const 1)
+ )
+ )
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
)
diff --git a/test/passes/remove-unused-brs.wast b/test/passes/remove-unused-brs.wast
index 731a9f88f..dac03c1d9 100644
--- a/test/passes/remove-unused-brs.wast
+++ b/test/passes/remove-unused-brs.wast
@@ -1039,5 +1039,300 @@
)
)
)
+ (func $br-to-table (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x (i32.eq (get_local $a) (i32.const 0)))
+ (br_if $y (i32.eq (get_local $a) (i32.const 1)))
+ (br_if $z (i32.eq (get_local $a) (i32.const 2)))
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-too-few (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x (i32.eq (get_local $a) (i32.const 0)))
+ (br_if $y (i32.eq (get_local $a) (i32.const 1)))
+ )
+ )
+ )
+ )
+ (func $br-to-table-one-more (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x (i32.eq (get_local $a) (i32.const 0)))
+ (br_if $y (i32.eq (get_local $a) (i32.const 1)))
+ (br_if $z (i32.eq (get_local $a) (i32.const 2)))
+ (br_if $x (i32.eq (get_local $a) (i32.const 3)))
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-overlap (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x (i32.eq (get_local $a) (i32.const 0)))
+ (br_if $y (i32.eq (get_local $a) (i32.const 1)))
+ (br_if $z (i32.eq (get_local $a) (i32.const 1)))
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-overlap-start (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x (i32.eq (get_local $a) (i32.const 0)))
+ (br_if $y (i32.eq (get_local $a) (i32.const 0)))
+ (br_if $z (i32.eq (get_local $a) (i32.const 1)))
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-offset (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x (i32.eq (get_local $a) (i32.const 15)))
+ (br_if $y (i32.eq (get_local $a) (i32.const 16)))
+ (br_if $z (i32.eq (get_local $a) (i32.const 17)))
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-RANGE-high (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x (i32.eq (get_local $a) (i32.const 0)))
+ (br_if $y (i32.eq (get_local $a) (i32.const 1)))
+ (br_if $z (i32.eq (get_local $a) (i32.const 10)))
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-RANGE-low (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x (i32.eq (get_local $a) (i32.const 0)))
+ (br_if $y (i32.eq (get_local $a) (i32.const 3)))
+ (br_if $z (i32.eq (get_local $a) (i32.const 9)))
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-bad (param $a i32) (result i32)
+ (block $value (result i32)
+ (block $x
+ (block $y
+ (block $z
+ (nop)
+ (br $x)
+ (br_if $x (i32.eq (get_local $a) (i32.const 0)))
+ (br_if $y (i32.eq (get_local $a) (i32.const 1)))
+ (br_if $z (i32.eq (get_local $a) (i32.const 2)))
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (i32.const 2000)
+ )
+ )
+ (func $br-to-table-bad2 (param $a i32) (result i32)
+ (block $value (result i32)
+ (block $x
+ (block $y
+ (block $z
+ (nop)
+ (drop (br_if $value (i32.const 1000) (i32.eq (get_local $a) (i32.const 0))))
+ (br_if $x (i32.eq (get_local $a) (i32.const 0)))
+ (br_if $y (i32.eq (get_local $a) (i32.const 1)))
+ (br_if $z (i32.eq (get_local $a) (i32.const 2)))
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (i32.const 2000)
+ )
+ )
+ (func $br-to-table-bad3 (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x (i32.eq (i32.const 10) (i32.const 0)))
+ (br_if $x (i32.eq (get_local $a) (i32.const 0)))
+ (br_if $y (i32.eq (get_local $a) (i32.const 1)))
+ (br_if $z (i32.eq (get_local $a) (i32.const 2)))
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-multi (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $z (i32.eq (i32.const 10) (i32.const 5)))
+ (br_if $y (i32.eq (i32.const 10) (i32.const 6)))
+ (br_if $x (i32.eq (i32.const 10) (i32.const 7)))
+ (br_if $x (i32.eq (get_local $a) (i32.const 0)))
+ (br_if $y (i32.eq (get_local $a) (i32.const 1)))
+ (br_if $z (i32.eq (get_local $a) (i32.const 2)))
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-bad4 (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x (i32.ne (get_local $a) (i32.const 0)))
+ (br_if $y (i32.eq (get_local $a) (i32.const 1)))
+ (br_if $z (i32.eq (get_local $a) (i32.const 2)))
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-bad5 (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x (i32.eq (get_local $a) (get_local $a)))
+ (br_if $y (i32.eq (get_local $a) (get_local $a)))
+ (br_if $z (i32.eq (get_local $a) (get_local $a)))
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-bad6 (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x (i32.eq (call $b13) (i32.const 0)))
+ (br_if $y (i32.eq (call $b13) (i32.const 1)))
+ (br_if $z (i32.eq (call $b13) (i32.const 2)))
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-bad7 (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x (i32.eq (get_local $a) (i32.const -1))) ;; negative, we support only positive up to int32_max
+ (br_if $y (i32.eq (get_local $a) (i32.const -1)))
+ (br_if $z (i32.eq (get_local $a) (i32.const -1)))
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-defaultNameOverlaps (param $a i32)
+ (block $x
+ (block $tablify|0
+ (block $z
+ (br_if $x (i32.eq (get_local $a) (i32.const 0)))
+ (br_if $tablify|0 (i32.eq (get_local $a) (i32.const 1)))
+ (br_if $z (i32.eq (get_local $a) (i32.const 2)))
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-unreach (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x (i32.eq (unreachable) (i32.const 0)))
+ (br_if $y (i32.eq (unreachable) (i32.const 1)))
+ (br_if $z (i32.eq (unreachable) (i32.const 2)))
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (func $br-to-table-overlap-but-later (param $a i32)
+ (block $x
+ (block $y
+ (block $z
+ (br_if $x (i32.eq (get_local $a) (i32.const 0)))
+ (br_if $y (i32.eq (get_local $a) (i32.const 1)))
+ (br_if $z (i32.eq (get_local $a) (i32.const 1)))
+ (br_if $x (i32.eq (get_local $a) (i32.const 2)))
+ (br_if $y (i32.eq (get_local $a) (i32.const 3)))
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
+ (unreachable)
+ )
)