• Benedikt Meurer's avatar
    [turbofan] Generalized OOB support for KeyedLoadIC. · b7168573
    Benedikt Meurer authored
    This extends the support in TurboFan and the ICs for OOB loads to also
    apply to typed arrays and receivers whose prototype chain is protected
    by the "no elements" protector (aka the Array protector). TurboFan will
    generate code to materialize undefined instead when it sees a load that
    has the OOB bit set and add an appropriate code dependency on the global
    protector. For typed arrays it doesn't even need to check the global
    protector since elements are never looked up in the prototype chain
    for typed arrays.
    
    In the simple micro-benchmark from the bug we go from
    
      testInBounds: 103 ms.
      testOutOfBounds: 289 ms.
    
    to
    
      testInBounds: 103 ms.
      testOutOfBounds: 102 ms.
    
    which fixes the 3x slowdown and thus addresses the performance cliff. In
    general it's still beneficial to make sure that you don't access out of
    bounds, especially once we introduce a bounds check elimination pass to
    TurboFan.
    
    This also seems to improve the jQuery benchmark on the Speedometer test
    suite by like 1-2% on average. And the SixSpeed rest benchmarks go from
    
      rest-es5: 25 ms.
      rest-es6: 23 ms.
    
    to
    
      rest-es5: 6 ms.
      rest-es6: 4 ms.
    
    so a solid 5.7x improvement there.
    
    Bug: v8:6936, v8:7014, v8:7027
    Change-Id: Ie99699c69cc40057512e72fd40ae28107216c423
    Reviewed-on: https://chromium-review.googlesource.com/750089
    Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
    Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
    Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#49095}
    b7168573
Name
Last commit
Last update
benchmarks Loading commit data...
build_overrides Loading commit data...
docs Loading commit data...
gni Loading commit data...
gypfiles 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...
Makefile Loading commit data...
Makefile.android 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...