Source code

Revision control

Copy as Markdown

Other Tools

// |jit-test| test-also=--setpref=wasm_unroll_loops=true
// Loop unrolling test. Seen to be causing assertion failures to do with
// incorrect header phi arg remapping -- the loop header contains a phi,
// neither arg of which is from inside the loop.
let t = `
(module
(memory 0)
(func (export "f1")
(param $local0 i32) (param $local1 i32) (param $local2 i32)
(result i32)
(local $local3 i32) (local $local4 i32)
(local $local5 i32) (local $local6 i32)
(local $local7 i32) (local $local8 i32)
(i32.load (local.get $local0))
if
(local.set $local8 (i32.shl (local.get $local2) (i32.const 2)))
loop $again
local.get $local8
i32.load
local.set $local4
local.get $local5
local.get $local2
i32.const 4
i32.add
local.tee $local3
i32.store
local.get $local6
local.set $local4
i32.const 2
local.set $local6
local.get $local4
br_if $again
end
end
i32.const 0
)
)`;
let i = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(t)));
// We only care that we can compile this without asserting (in the unroller).
assertEq(i + "", "[object WebAssembly.Instance]");