unroll2.js (1334B)
1 // |jit-test| test-also=--setpref=wasm_unroll_loops=true 2 3 // Loop unrolling test: 0 exiting values, 1 exit target => can be unrolled. 4 5 let t = ` 6 (module 7 (memory (export "mem") 1) 8 (func (export "my_memset") 9 (param $start i32) (param $byte i32) (param $count i32) 10 (local $limit i32) 11 (local.set $limit (i32.add (local.get $start) (local.get $count))) 12 (if (i32.lt_u (local.get $start) (local.get $limit)) 13 (then 14 (loop $cont 15 (i32.store8 (local.get $start) (local.get $byte)) 16 (local.set $start (i32.add (local.get $start) (i32.const 1))) 17 (br_if $cont (i32.lt_u (local.get $start) (local.get $limit))) 18 ) 19 ) 20 ) 21 ) 22 )`; 23 24 let i = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(t))); 25 26 i.exports.my_memset(1, 22, 1); 27 i.exports.my_memset(3, 33, 2); 28 i.exports.my_memset(6, 44, 3); 29 i.exports.my_memset(10, 55, 4); 30 i.exports.my_memset(15, 66, 5); 31 i.exports.my_memset(21, 77, 6); 32 i.exports.my_memset(28, 88, 7); 33 i.exports.my_memset(36, 99, 8); 34 35 let buf = new Uint8Array(i.exports.mem.buffer); 36 37 let s = ""; 38 for (let i = 0; i < 45; i++) { 39 s = s + (buf[i] + " "); 40 } 41 42 let expected = 43 "0 22 0 33 33 0 44 44 44 0 55 55 55 55 0 66 66 66 66 66 0 77 77 77 " + 44 "77 77 77 0 88 88 88 88 88 88 88 0 99 99 99 99 99 99 99 99 0 "; 45 46 assertEq(s, expected);