• 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
Name
Last commit
Last update
benchmarks Loading commit data...
build_overrides Loading commit data...
docs Loading commit data...
gni Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.editorconfig Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.vpython Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
ChangeLog Loading commit data...
DEPS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LICENSE.valgrind Loading commit data...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...
snapshot_toolchain.gni Loading commit data...