tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

unroll3.js (1101B)


      1 // |jit-test| test-also=--setpref=wasm_unroll_loops=true
      2 
      3 // Loop unrolling test: 1 exiting value, 1 exit target => can be unrolled.
      4 // The value defined in the loop, which is used after,
      5 // is also phi'd with a value defined before the loop.
      6 
      7 let t = `
      8 (module
      9  (func (export "f1") (param $enterloopP i32) (param $limit i32) (result i32)
     10    (local $merge i32)
     11    (local $x i32)
     12    (local.set $merge (i32.const 5000))
     13    (local.set $x (i32.const 1))
     14    (if (i32.ne (local.get $enterloopP) (i32.const 0))
     15      (then
     16        (loop $cont
     17          ;; x = x + 1
     18          (local.set $x (i32.add (local.get $x) (i32.const 1)))
     19          ;; merge = x
     20          (local.set $merge (i32.add (local.get $x) (i32.const 1111)))
     21          ;; continue if x < limit
     22          (br_if $cont (i32.lt_u (local.get $x) (local.get $limit)))
     23        )
     24      )
     25    )
     26    (i32.mul (local.get $merge) (i32.const 17))
     27  )
     28 )`;
     29 
     30 let i = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(t)));
     31 
     32 assertEq(i.exports.f1(0, 100), 85000); // loop not entered
     33 assertEq(i.exports.f1(1, 100), 20587) // loop entered