• 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...
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...
bot_default.isolate Loading commit data...
d8_default.isolate Loading commit data...
default.isolate Loading commit data...
optimize_for_size.isolate Loading commit data...
perf.isolate Loading commit data...