• Benedikt Meurer's avatar
    [ic] Improve KeyedStoreIC performance for dictionaries. · a9b09801
    Benedikt Meurer authored
    Once the KeyedStoreIC was in MEGAMORPHIC state storing to dictionary
    mode objects, we'd constantly hit the slow-path implemented via the
    %SetProperty runtime function, if the dictionary was created with a
    null prototype, i.e. via Object.create(null). This goes against the
    advice of using Object.create(null) for dictionaries (compared to
    using empty object literal), which is unfortunate.
    
    This CL addresses two issues, starting with
    
    - adding support for null prototypes to LookupPropertyOnPrototypeChain,
      which was always hitting the slow path for null prototypes, and
    - using the dedicated %AddDictionaryProperty runtime call when we
      have to grow the backing store.
    
    These changes combined improve the micro-benchmark from
    
      storeToDictionary: 559 ms.
      storeToFast: 95 ms.
    
    to
    
      storeToDictionary: 201 ms.
      storeToFast: 94 ms.
    
    which reduces overhead by about 65%. This overall improves the chai test
    on the web-tooling-benchmark by about 4%, which still leaves some room
    for improvement.
    
    Bug: v8:6936, v8:6985
    Change-Id: I97b78961f51edb3a3e198bdb31457fd78bed947f
    Reviewed-on: https://chromium-review.googlesource.com/735139Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
    Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#48858}
    a9b09801
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...
.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...