(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) ) )