• Benedikt Meurer's avatar
    [turbofan] Optimize promise resolution. · be6d1292
    Benedikt Meurer authored
    This CL introduces new operators JSFulfillPromise and JSPromiseResolve,
    corresponding to the specification operations with the same name, and
    uses that to lower calls to Promise.resolve() builtin to JSPromiseResolve.
    
    We also optimize JSPromiseResolve and JSResolvePromise further based on
    information found about the value/resolution in the graph. This applies
    to both Promise.resolve() builtin calls and implicit resolve operations
    in async functions and async generators.
    
    On a very simple microbenchmark like
    
      console.time('resolve');
      for (let i = 0; i < 1e8; ++i) Promise.resolve({i});
      console.timeEnd('resolve');
    
    this CL reduces the execution time from around 3049ms to around 947ms,
    which is a pretty significant 3x improvement. On the wikipedia benchmark
    we observe an improvement around 2% with this CL.
    
    Bug: v8:7253
    Change-Id: Ic69086cdc1b724f35dbe83305795539c562ab817
    Reviewed-on: https://chromium-review.googlesource.com/913488Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
    Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
    Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#51387}
    be6d1292
js-operator.cc 49.8 KB