blob: a8fc75f06531e03e3dc9f3b83e7f09229b4f7349 [file] [log] [blame] [edit]
(module
(memory 256 256)
(type $FUNCSIG$v (func))
(type $FUNCSIG$i (func (result i32)))
(type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32)))
(type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32)))
(type $4 (func (param i32)))
(type $5 (func (param i32) (result i32)))
(type $6 (func (param i32 i32 i32 i32 i32 i32)))
(import $waka "env" "waka")
(import $waka_int "env" "waka_int" (result i32))
(import $_i64Subtract "env" "i64sub" (param i32 i32 i32 i32) (result i32))
(import $___udivmoddi4 "env" "moddi" (param i32 i32 i32 i32 i32) (result i32))
(import $lp "env" "lp" (param i32 i32) (result i32))
(func $contrast ;; check for tee and structure sinking
(local $x i32)
(local $y i32)
(local $z i32)
(local $a i32)
(local $b i32)
(set_local $x (i32.const 1))
(if (get_local $x) (nop))
(if (get_local $x) (nop))
(set_local $y (if i32 (i32.const 2) (i32.const 3) (i32.const 4)))
(drop (get_local $y))
(set_local $z (block i32 (i32.const 5)))
(drop (get_local $z))
(if (i32.const 6)
(set_local $a (i32.const 7))
(set_local $a (i32.const 8))
)
(drop (get_local $a))
(block $val
(if (i32.const 10)
(block
(set_local $b (i32.const 11))
(br $val)
)
)
(set_local $b (i32.const 12))
)
(drop (get_local $b))
)
(func $b0-yes (type $4) (param $i1 i32)
(local $x i32)
(local $y i32)
(local $a i32)
(local $b i32)
(local $5 i32)
(local $6 i32)
(local $7 i32)
(local $8 i32)
(set_local $x
(i32.const 5)
)
(drop
(get_local $x)
)
(block $block0
(set_local $x
(i32.const 7)
)
(drop
(get_local $x)
)
)
(set_local $x
(i32.const 11)
)
(drop
(get_local $x)
)
(set_local $x
(i32.const 9)
)
(drop
(get_local $y)
)
(block $block1
(set_local $x
(i32.const 8)
)
(drop
(get_local $y)
)
)
(set_local $x
(i32.const 11)
)
(drop
(get_local $y)
)
(set_local $x
(i32.const 17)
)
(drop
(get_local $x)
)
(drop
(get_local $x)
)
(drop
(get_local $x)
)
(drop
(get_local $x)
)
(drop
(get_local $x)
)
(drop
(get_local $x)
)
(block $block2
(set_local $a
(i32.const 1)
)
(set_local $b
(i32.const 2)
)
(drop
(get_local $a)
)
(drop
(get_local $b)
)
(set_local $a
(i32.const 3)
)
(set_local $b
(i32.const 4)
)
(set_local $a
(i32.const 5)
)
(set_local $b
(i32.const 6)
)
(drop
(get_local $b)
)
(drop
(get_local $a)
)
(set_local $a
(i32.const 7)
)
(set_local $b
(i32.const 8)
)
(set_local $a
(i32.const 9)
)
(set_local $b
(i32.const 10)
)
(call $waka)
(drop
(get_local $a)
)
(drop
(get_local $b)
)
(set_local $a
(i32.const 11)
)
(set_local $b
(i32.const 12)
)
(set_local $a
(i32.const 13)
)
(set_local $b
(i32.const 14)
)
(drop
(i32.load
(i32.const 24)
)
)
(drop
(get_local $a)
)
(drop
(get_local $b)
)
(set_local $a
(i32.const 15)
)
(set_local $b
(i32.const 16)
)
(set_local $a
(i32.const 17)
)
(set_local $b
(i32.const 18)
)
(i32.store
(i32.const 48)
(i32.const 96)
)
(drop
(get_local $a)
)
(drop
(get_local $b)
)
)
(block $block3
(set_local $a
(call $waka_int)
)
(drop
(get_local $a)
)
(call $waka)
(set_local $a
(call $waka_int)
)
(call $waka)
(drop
(get_local $a)
)
(call $waka)
(set_local $a
(call $waka_int)
)
(drop
(i32.load
(i32.const 1)
)
)
(drop
(get_local $a)
)
(call $waka)
(set_local $a
(call $waka_int)
)
(i32.store
(i32.const 1)
(i32.const 2)
)
(drop
(get_local $a)
)
(call $waka)
(set_local $a
(i32.load
(i32.const 100)
)
)
(drop
(get_local $a)
)
(call $waka)
(set_local $a
(i32.load
(i32.const 101)
)
)
(drop
(i32.load
(i32.const 1)
)
)
(drop
(get_local $a)
)
(call $waka)
(set_local $a
(i32.load
(i32.const 102)
)
)
(call $waka)
(drop
(get_local $a)
)
(call $waka)
(set_local $a
(i32.load
(i32.const 103)
)
)
(i32.store
(i32.const 1)
(i32.const 2)
)
(drop
(get_local $a)
)
(call $waka)
(set_local $a
(block i32
(block
(set_local $5
(i32.const 105)
)
(i32.store
(i32.const 104)
(get_local $5)
)
)
(get_local $5)
)
)
(drop
(get_local $a)
)
(call $waka)
(set_local $a
(block i32
(block
(set_local $6
(i32.const 107)
)
(i32.store
(i32.const 106)
(get_local $6)
)
)
(get_local $6)
)
)
(call $waka)
(drop
(get_local $a)
)
(call $waka)
(set_local $a
(block i32
(block
(set_local $7
(i32.const 109)
)
(i32.store
(i32.const 108)
(get_local $7)
)
)
(get_local $7)
)
)
(drop
(i32.load
(i32.const 1)
)
)
(drop
(get_local $a)
)
(call $waka)
(set_local $a
(block i32
(block
(set_local $8
(i32.const 111)
)
(i32.store
(i32.const 110)
(get_local $8)
)
)
(get_local $8)
)
)
(i32.store
(i32.const 1)
(i32.const 2)
)
(drop
(get_local $a)
)
(call $waka)
)
(block $out-of-block
(set_local $a
(i32.const 1337)
)
(block $b
(block $c
(br $b)
)
(set_local $a
(i32.const 9876)
)
)
(drop
(get_local $a)
)
)
(block $loopey
(set_local $a
(i32.const 1337)
)
(drop
(loop $loop-in5 i32
(drop
(get_local $a)
)
(tee_local $a
(i32.const 9876)
)
)
)
(drop
(get_local $a)
)
)
)
(func $Ia (type $5) (param $a i32) (result i32)
(local $b i32)
(block $switch$0
(block $switch-default$6
(set_local $b
(i32.const 60)
)
)
)
(return
(get_local $b)
)
)
(func $memories (type $6) (param $i2 i32) (param $i3 i32) (param $bi2 i32) (param $bi3 i32) (param $ci3 i32) (param $di3 i32)
(local $set_with_no_get i32)
(set_local $i3
(i32.const 1)
)
(i32.store8
(get_local $i2)
(get_local $i3)
)
(set_local $bi3
(i32.const 1)
)
(i32.store8
(get_local $bi3)
(get_local $bi3)
)
(set_local $ci3
(get_local $bi3)
)
(i32.store8
(get_local $bi3)
(get_local $ci3)
)
(set_local $di3
(tee_local $bi3
(i32.const 123)
)
)
(i32.store8
(get_local $bi3)
(get_local $di3)
)
(set_local $set_with_no_get
(i32.const 456)
)
)
(func $___remdi3 (type $FUNCSIG$iiiii) (param $$a$0 i32) (param $$a$1 i32) (param $$b$0 i32) (param $$b$1 i32) (result i32)
(local $$1$1 i32)
(local $$1$0 i32)
(local $$rem i32)
(local $__stackBase__ i32)
(local $$2$1 i32)
(local $$2$0 i32)
(local $$4$1 i32)
(local $$4$0 i32)
(local $$10$1 i32)
(local $$10$0 i32)
(local $$6$0 i32)
(set_local $__stackBase__
(i32.load
(i32.const 8)
)
)
(i32.store
(i32.const 8)
(i32.add
(i32.load
(i32.const 8)
)
(i32.const 16)
)
)
(set_local $$rem
(get_local $__stackBase__)
)
(set_local $$1$0
(i32.or
(i32.shr_s
(get_local $$a$1)
(i32.const 31)
)
(i32.shl
(if i32
(i32.lt_s
(get_local $$a$1)
(i32.const 0)
)
(i32.const -1)
(i32.const 0)
)
(i32.const 1)
)
)
)
(set_local $$1$1
(i32.or
(i32.shr_s
(if i32
(i32.lt_s
(get_local $$a$1)
(i32.const 0)
)
(i32.const -1)
(i32.const 0)
)
(i32.const 31)
)
(i32.shl
(if i32
(i32.lt_s
(get_local $$a$1)
(i32.const 0)
)
(i32.const -1)
(i32.const 0)
)
(i32.const 1)
)
)
)
(set_local $$2$0
(i32.or
(i32.shr_s
(get_local $$b$1)
(i32.const 31)
)
(i32.shl
(if i32
(i32.lt_s
(get_local $$b$1)
(i32.const 0)
)
(i32.const -1)
(i32.const 0)
)
(i32.const 1)
)
)
)
(set_local $$2$1
(i32.or
(i32.shr_s
(if i32
(i32.lt_s
(get_local $$b$1)
(i32.const 0)
)
(i32.const -1)
(i32.const 0)
)
(i32.const 31)
)
(i32.shl
(if i32
(i32.lt_s
(get_local $$b$1)
(i32.const 0)
)
(i32.const -1)
(i32.const 0)
)
(i32.const 1)
)
)
)
(set_local $$4$0
(call $_i64Subtract
(i32.xor
(get_local $$1$0)
(get_local $$a$0)
)
(i32.xor
(get_local $$1$1)
(get_local $$a$1)
)
(get_local $$1$0)
(get_local $$1$1)
)
)
(set_local $$4$1
(i32.load
(i32.const 168)
)
)
(drop
(call $___udivmoddi4
(get_local $$4$0)
(get_local $$4$1)
(call $_i64Subtract
(i32.xor
(get_local $$2$0)
(get_local $$b$0)
)
(i32.xor
(get_local $$2$1)
(get_local $$b$1)
)
(get_local $$2$0)
(get_local $$2$1)
)
(i32.load
(i32.const 168)
)
(get_local $$rem)
)
)
(set_local $$10$0
(call $_i64Subtract
(i32.xor
(i32.load
(get_local $$rem)
)
(get_local $$1$0)
)
(i32.xor
(i32.load offset=4
(get_local $$rem)
)
(get_local $$1$1)
)
(get_local $$1$0)
(get_local $$1$1)
)
)
(set_local $$10$1
(i32.load
(i32.const 168)
)
)
(i32.store
(i32.const 8)
(get_local $__stackBase__)
)
(return
(block $block12 i32
(i32.store
(i32.const 168)
(get_local $$10$1)
)
(get_local $$10$0)
)
)
)
(func $block-returns (type $FUNCSIG$v)
(local $x i32)
(block $out
(block $waka
(set_local $x
(i32.const 12)
)
(br_if $waka
(i32.const 1)
)
(set_local $x
(i32.const 34)
)
)
(br_if $out
(i32.const 1)
)
(drop
(get_local $x)
)
(block $waka2
(if
(i32.const 1)
(set_local $x
(i32.const 13)
)
(set_local $x
(i32.const 24)
)
)
(if
(i32.const 1)
(block $block3
(set_local $x
(i32.const 14)
)
)
(block $block5
(set_local $x
(i32.const 25)
)
)
)
)
(br_if $out
(i32.const 1)
)
(block $sink-out-of-me-i-have-but-one-exit
(set_local $x
(i32.const 99)
)
)
(drop
(get_local $x)
)
)
)
(func $multiple (type $6) (param $s i32) (param $r i32) (param $f i32) (param $p i32) (param $t i32) (param $m i32)
(set_local $s
(get_local $m)
)
(set_local $r
(i32.add
(get_local $f)
(get_local $p)
)
)
(set_local $t
(get_local $p)
)
(set_local $p
(i32.load
(i32.const 0)
)
)
(i32.store
(get_local $r)
(get_local $t)
)
(drop
(get_local $s)
)
(drop
(get_local $t)
)
)
(func $switch-def (type $5) (param $i3 i32) (result i32)
(local $i1 i32)
(set_local $i1
(i32.const 10)
)
(block $switch$def
(block $switch-case$1
(br_table $switch-case$1 $switch$def
(get_local $i3)
)
)
(set_local $i1
(i32.const 1)
)
)
(return
(get_local $i1)
)
)
(func $no-out-of-label (param $x i32) (param $y i32)
(loop $moar
(set_local $x
(block i32
(br_if $moar (get_local $x))
(i32.const 0)
)
)
)
(drop (get_local $x))
(block $moar
(set_local $y
(block i32
(br_if $moar (get_local $y))
(i32.const 0)
)
)
)
(drop (get_local $y))
)
(func $freetype-cd (param $a i32) (result i32)
(local $e i32)
(loop $while-in$1
(block $while-out$0
(set_local $e
(get_local $a)
)
(set_local $a ;; this set must happen, so that if the br_if does not break, we have the right $a later down - once we use a block return value, the $a set's outside the block
(i32.const 4)
)
(br_if $while-out$0
(get_local $e)
)
(set_local $a
(i32.add
(get_local $a)
(i32.const 0)
)
)
)
)
(get_local $a)
)
(func $drop-if-value (param $x i32) (param $y i32) (param $z i32) (result i32)
(local $temp i32)
(drop
(if i32
(get_local $x)
(block $block53 i32
(nop)
(set_local $temp
(get_local $y)
)
(get_local $z)
)
(block $block54 i32
(nop)
(set_local $temp
(get_local $y)
)
(get_local $z)
)
)
)
(drop (get_local $temp))
(return
(i32.const 0)
)
)
(func $drop-br_if (param $label i32) (param $$cond2 i32) (param $$$0151 i32) (result i32)
(block $label$break$L4
(if
(i32.eq
(get_local $label)
(i32.const 15)
)
(block $block
(set_local $label
(i32.const 0)
)
(set_local $$cond2
(i32.eq
(get_local $$$0151)
(i32.const 0)
)
)
(br_if $label$break$L4 ;; when we add a value to this, its type changes as it returns the value too, so must be dropped
(i32.eqz
(get_local $$cond2)
)
)
)
)
(set_local $label
(i32.const 1)
)
)
(get_local $label)
)
)