• Hai Dang's avatar
    Reland "[interpreter] Add bytecode for leading array spreads." · 5f8a4272
    Hai Dang authored
    This is a reland of 1c48d52b.
    
    It turned out that IterableToList doesn't always behave according to
    the ES operation with the same name. Specifically, it allows holey arrays
    to take its fast path, which produces an output array with holes where
    actually "undefined" elements should appear.
    
    This CL changes the version of IterableToList that is used for spreads
    (IterableToListWithSymbolLookup) such that holey arrays take the slow path.
    It also includes tests for such situations.
    
    Original change's description:
    > [interpreter] Add bytecode for leading array spreads.
    >
    > This CL improves the performance of creating [...a, b] or [...a].
    > If the array literal has a leading spread, this CL emits the bytecode
    > [CreateArrayFromIterable] to create the literal. CreateArrayFromIterable
    > is implemented by [IterableToListDefault] builtin to create the initial
    > array for the leading spread. IterableToListDefault has a fast path to
    > clone efficiently if the spread is an actual array.
    >
    > The bytecode generated is now shorter. Bytecode generation is refactored
    > into to BuildCreateArrayLiteral, which allows VisitCallSuper to benefit
    > from this optimization also.
    > For now, turbofan also lowers the bytecode to the builtin.
    >
    > The idiomatic use of [...a] to clone the array a now performs better
    > than a simple for-loop, but still does not match the performance of slice.
    >
    > Bug: v8:7980
    >
    > Cq-Include-Trybots: luci.v8.try:v8_linux_noi18n_rel_ng
    > Change-Id: Ibde659c82d3c7aa1b1777a3d2f6426ac8cc15e35
    > Reviewed-on: https://chromium-review.googlesource.com/1181024
    > Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
    > Reviewed-by: Sigurd Schneider <sigurds@chromium.org>
    > Reviewed-by: Jakob Gruber <jgruber@chromium.org>
    > Reviewed-by: Georg Neis <neis@chromium.org>
    > Commit-Queue: Georg Neis <neis@chromium.org>
    > Commit-Queue: Hai Dang <dhai@google.com>
    > Cr-Commit-Position: refs/heads/master@{#55520}
    
    Bug: v8:7980
    Change-Id: I0b5603a12d2b588327658bf0a9b214bd0f22e237
    Cq-Include-Trybots: luci.v8.try:v8_linux_noi18n_rel_ng
    Reviewed-on: https://chromium-review.googlesource.com/1201882
    Commit-Queue: Hai Dang <dhai@google.com>
    Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
    Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
    Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#55639}
    5f8a4272
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...
.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...