• Jaroslav Sevcik's avatar
    [turbofan] Optimize array destructuring · 3fe7d698
    Jaroslav Sevcik authored
    This CL introduces type narrowing and constant folding reducers
    to constant fold code that comes out of inlined destructuring
    of arrays. In particular, array iterator introduces code that
    contains a phi of a temporary array that blocks escape analysis.
    The phi comes from conditional that can be evaluated statically
    (i.e., constant folded), so with better constant folding we
    allow escape analysis to get rid of the temporary array.
    
    On a quick micro-benchmark below, we see more than 6x improvement.
    This is close to the hand-optimized version - if we replace
    body of f with 'return b + a', we get 220ms (versus 218ms with
    destructuring).
    
    function f(a, b) {
      [b, a] = [a, b];
      return a + b;
    }
    
    function sum(count) {
      let s = 0;
      for (let i = 0; i < count; i++) {
        s += f(1, 2);
      }
      return s;
    }
    
    // Warm up
    sum(1e5); sum(1e5);
    console.time("destructure array");
    sum(1e8);
    console.timeEnd("destructure array");
    
    console.timeEnd: destructure array, 213.526000
    
    console.timeEnd: destructure array, 1503.537000
    
    Bug: v8:7728
    Change-Id: Ib7aec1d5897989e6adb1af1eddd516d8b3866db5
    Reviewed-on: https://chromium-review.googlesource.com/1047672Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
    Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#53048}
    3fe7d698
Name
Last commit
Last update
..
benchmarks Loading commit data...
cctest Loading commit data...
common Loading commit data...
debugger Loading commit data...
fuzzer Loading commit data...
inspector Loading commit data...
intl Loading commit data...
js-perf-test Loading commit data...
memory Loading commit data...
message Loading commit data...
mjsunit Loading commit data...
mkgrokdump Loading commit data...
mozilla Loading commit data...
preparser Loading commit data...
test262 Loading commit data...
unittests Loading commit data...
wasm-spec-tests Loading commit data...
webkit Loading commit data...
BUILD.gn Loading commit data...