• Leszek Swirski's avatar
    [turbofan] Use receiver maps for Array#push reduction · 7bf63faf
    Leszek Swirski authored
    The current Array#push reduction supports some amount of non-redundant
    homogeneous from its receiver maps, and unifies polymorphism by
    generating a push implementation per unique receiver elements kind,
    rather than per receiver map. It does this by dynamically reading off
    the receiver's elements kind, and branching on it.
    
    Reading off the receiver's elements kind dynamically is a bit of a waste
    though, since we already know the small subset of maps that are possible
    at this point, and have probably emitted diamonds for checking those
    maps which can't be merged with the dynamic elements kind lookup.
    
    In this patch, this code is changed in two major ways:
    
      1. We perform comparisons on the receiver map, rather than the
         receiver elements kind, and dispatch to the per-elements kind
         implementation after that check.
    
      2. We allow the Smi path to fallthrough into the Object elements path,
         once its Smi checks complete, to avoid generating distinct but
         identical grow-and-set code for both PACKED_ELEMENTS and
         PACKED_SMI_ELEMENTS.
    
    Change-Id: Ie7764339a0220cb30aee0592553e0dc98539ac79
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3912765Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
    Commit-Queue: Leszek Swirski <leszeks@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#83438}
    7bf63faf
Name
Last commit
Last update
.github Loading commit data...
bazel 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...
.bazelrc Loading commit data...
.clang-format Loading commit data...
.clang-tidy Loading commit data...
.editorconfig Loading commit data...
.flake8 Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.mailmap Loading commit data...
.style.yapf Loading commit data...
.vpython3 Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.bazel Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
COMMON_OWNERS Loading commit data...
DEPS Loading commit data...
DIR_METADATA Loading commit data...
ENG_REVIEW_OWNERS Loading commit data...
INFRA_OWNERS Loading commit data...
INTL_OWNERS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LOONG_OWNERS Loading commit data...
MIPS_OWNERS Loading commit data...
OWNERS Loading commit data...
PPC_OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
RISCV_OWNERS Loading commit data...
S390_OWNERS Loading commit data...
WATCHLISTS Loading commit data...
WORKSPACE Loading commit data...
codereview.settings Loading commit data...