1(module (func))
2
3(module
4  (func (export "if-without-result") (param i32) (param i32) (result i32)
5    (if
6      (i32.eq
7        (local.get 0)
8        (local.get 1)
9      )
10      (then (unreachable))
11    )
12
13    (local.get 0)
14  )
15)
16
17(assert_return (invoke "if-without-result" (i32.const 2) (i32.const 3)) (i32.const 2))
18
19(module
20  (func (export "block") (param i32) (param i32) (result i32)
21    (block (result i32)
22      local.get 0
23    )
24  )
25)
26
27(assert_return (invoke "block" (i32.const 10) (i32.const 20)) (i32.const 10))
28
29(module
30  (func (export "br_block") (param i32) (param i32) (result i32)
31    local.get 1
32    (block (result i32)
33      local.get 0
34      local.get 0
35      br 0
36      unreachable
37    )
38    i32.add
39  )
40)
41
42(assert_return (invoke "br_block" (i32.const 5) (i32.const 7)) (i32.const 12))
43
44;; Tests discarding values on the value stack, while
45;; carrying over the result using a conditional branch.
46(module
47  (func (export "brif_block") (param i32) (param i32) (result i32)
48    local.get 1
49    (block (result i32)
50      local.get 0
51      local.get 0
52      br_if 0
53      unreachable
54    )
55    i32.add
56  )
57)
58
59(assert_return (invoke "brif_block" (i32.const 5) (i32.const 7)) (i32.const 12))
60
61;; Tests that br_if keeps values in the case if the branch
62;; hasn't been taken.
63(module
64  (func (export "brif_block_passthru") (param i32) (param i32) (result i32)
65    (block (result i32)
66      local.get 1
67      local.get 0
68      br_if 0
69      local.get 1
70      i32.add
71    )
72  )
73)
74
75(assert_return (invoke "brif_block_passthru" (i32.const 0) (i32.const 3)) (i32.const 6))
76
77(module
78  (func (export "i32.div_s") (param i32) (param i32) (result i32)
79    (i32.div_s (local.get 0) (local.get 1))
80  )
81)
82
83(module
84  (func (export "br_table") (param $i i32) (result i32)
85    (return
86      (block $2 (result i32)
87        (i32.add (i32.const 10)
88          (block $1 (result i32)
89            (i32.add (i32.const 100)
90              (block $0 (result i32)
91                (i32.add (i32.const 1000)
92                  (block $default (result i32)
93                    (br_table $0 $1 $2 $default
94                      (i32.mul (i32.const 2) (local.get $i))
95                      (i32.and (i32.const 3) (local.get $i))
96                    )
97                  )
98                )
99              )
100            )
101          )
102        )
103      )
104    )
105  )
106)
107
108(assert_return (invoke "br_table" (i32.const 0)) (i32.const 110))
109(assert_return (invoke "br_table" (i32.const 1)) (i32.const 12))
110(assert_return (invoke "br_table" (i32.const 2)) (i32.const 4))
111(assert_return (invoke "br_table" (i32.const 3)) (i32.const 1116))
112(assert_return (invoke "br_table" (i32.const 4)) (i32.const 118))
113(assert_return (invoke "br_table" (i32.const 5)) (i32.const 20))
114(assert_return (invoke "br_table" (i32.const 6)) (i32.const 12))
115(assert_return (invoke "br_table" (i32.const 7)) (i32.const 1124))
116(assert_return (invoke "br_table" (i32.const 8)) (i32.const 126))
117