blob: 888b6b06db5c10755d618c7c5744254bcab0b835 [file] [log] [blame] [edit]
(module
(type $i (func (param i32) (result i32)))
(memory $0 1 100)
(export "sieve" (func $sieve))
(func $sieve (; 0 ;) (type $i) (param $0 i32) (result i32)
(local $1 i32)
(if
(i32.lt_u
(i32.mul
(memory.size)
(i32.const 65536)
)
(local.get $0)
)
(drop
(memory.grow
(i32.sub
(i32.div_u
(i32.add
(local.get $0)
(i32.const 65535)
)
(i32.const 65536)
)
(memory.size)
)
)
)
)
(local.set $1
(i32.const 0)
)
(loop $clear
(i32.store8
(local.get $1)
(i32.const 0)
)
(local.set $1
(i32.add
(local.get $1)
(i32.const 1)
)
)
(br_if $clear
(i32.eq
(local.get $1)
(local.get $0)
)
)
)
(return
(local.get $0)
)
)
)
optimized:
(module
(type $i (func (param i32) (result i32)))
(memory $0 1 100)
(export "sieve" (func $sieve))
(func $sieve (; 0 ;) (; has Stack IR ;) (type $i) (param $0 i32) (result i32)
(local $1 i32)
(if
(i32.lt_u
(i32.shl
(memory.size)
(i32.const 16)
)
(local.get $0)
)
(drop
(memory.grow
(i32.sub
(i32.div_u
(i32.add
(local.get $0)
(i32.const 65535)
)
(i32.const 65536)
)
(memory.size)
)
)
)
)
(loop $clear
(i32.store8
(local.get $1)
(i32.const 0)
)
(br_if $clear
(i32.eq
(local.tee $1
(i32.add
(local.get $1)
(i32.const 1)
)
)
(local.get $0)
)
)
)
(local.get $0)
)
)