(module
(func (export "test") (param $n i32) (result i32)
(local $m i64)
(local $tmp32 i32)
(local $tmp64 i64)
(loop $continue
;; n -= 1
(local.set $n
(i32.sub
(local.get $n)
(i32.const 1)
)
)
;; m = n
(local.set $m (i64.extend_i32_u (local.get $n)))
;; execute a bunch of div and rem instructions with immediate `rhs` values
(local.set $tmp32 (i32.div_s (local.get $n) (i32.const 3)))
(local.set $tmp32 (i32.div_u (local.get $n) (i32.const 3)))
(local.set $tmp32 (i32.rem_s (local.get $n) (i32.const 3)))
(local.set $tmp32 (i32.rem_u (local.get $n) (i32.const 3)))
(local.set $tmp64 (i64.div_s (local.get $m) (i64.const 3)))
(local.set $tmp64 (i64.div_u (local.get $m) (i64.const 3)))
(local.set $tmp64 (i64.rem_s (local.get $m) (i64.const 3)))
(local.set $tmp64 (i64.rem_u (local.get $m) (i64.const 3)))
;; continue if $n != 0
(br_if $continue (local.get $n))
)
(return (local.get $n))
)
)