tor-browser

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

scalar-replace-array-apply-array.js (1115B)


      1 // |jit-test| --fast-warmup; --no-threads
      2 
      3 setJitCompilerOption("baseline.warmup.trigger", 0);
      4 setJitCompilerOption("ion.warmup.trigger", 100);
      5 
      6 // Prevent GC from cancelling/discarding Ion compilations.
      7 gczeal(0);
      8 
      9 // Create a fresh set of functions for each argument count to avoid type pollution.
     10 function makeTest(count) {
     11  var args = Array(count).fill(0).join(",");
     12 
     13  return Function(`
     14    function g() {
     15      return arguments.length;
     16    }
     17 
     18    function f(...args) {
     19      // When |f| is inlined into its caller, the number of arguments is fixed and
     20      // we can scalar replace the inlined rest array.
     21      assertRecoveredOnBailout(args, true);
     22      return g(...args);
     23    }
     24 
     25    // |f| must be small enough to be inlined into the test function.
     26    assertEq(isSmallFunction(f), true);
     27 
     28    function test() {
     29      for (let i = 0; i < 1000; ++i) {
     30        assertEq(f(${args}), ${count});
     31      }
     32    }
     33 
     34    return test;
     35  `)();
     36 }
     37 
     38 // Limited by gc::CanUseFixedElementsForArray(), see also WarpBuilder::build_Rest().
     39 const maxRestArgs = 14;
     40 
     41 for (let i = 0; i <= maxRestArgs; ++i) {
     42  makeTest(i)();
     43 }