blob: 1da65a09f15edb0ae312813baed5da3f195fbe47 [file] [log] [blame] [edit]
(module
(type $i32_=>_i32 (func (param i32) (result i32)))
(memory $0 1 100)
(export "sieve" (func $sieve))
(func $sieve (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 $i32_=>_i32 (func (param i32) (result i32)))
(memory $0 1 100)
(export "sieve" (func $sieve))
(func $sieve (; has Stack IR ;) (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.shr_u
(i32.add
(local.get $0)
(i32.const 65535)
)
(i32.const 16)
)
(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)
)
)