• Benedikt Meurer's avatar
    [turbofan] Enable loop peeling for various higher-order Array builtins. · d3f74c98
    Benedikt Meurer authored
    This adds appropriate LoopExit nodes for the JSCallReducer lowerings of
    the following higher order Array builtins:
    
      - Array.prototype.every()
      - Array.prototype.find()
      - Array.prototype.findIndex()
      - Array.prototype.some()
    
    Loop peeling allows TurboFan to make loop invariant operations in the
    callback passed to the higher order builtin fully redundant, and thus
    completely eliminate the loop invariant code from the subsequent loop
    iterations. This can have a huge performance impact, depending on what
    kind of code runs inside of the callback. For example, on the micro-
    benchmarks outlined in http://crbug.com/v8/8273 we go from
    
      forLoop: 364 ms.
      every: 443 ms.
      some: 432 ms.
      find: 522 ms.
      findIndex: 437 ms.
    
    to
    
      forLoop: 369 ms.
      every: 354 ms.
      some: 348 ms.
      find: 419 ms.
      findIndex: 360 ms.
    
    which is 20% improvement, and essentially brings the Array builtins (the
    appropriate ones Array#some() and Array#every() in this case) on par
    with the hand-written `for`-loop.
    
    Bug: v8:1956, v8:8273
    Change-Id: I9d32736e5402807b4ac79cd5ad15ceacd1945681
    Reviewed-on: https://chromium-review.googlesource.com/c/1305935Reviewed-by: 's avatarDaniel Clifford <danno@chromium.org>
    Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#57110}
    d3f74c98
Name
Last commit
Last update
benchmarks Loading commit data...
build_overrides Loading commit data...
custom_deps 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...
.clang-tidy Loading commit data...
.editorconfig Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitattributes 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...