• Benedikt Meurer's avatar
    [ic] Ensure that we make progress on KeyedLoadIC polymorphic name. · d5c19aa9
    Benedikt Meurer authored
    In the special case of KeyedLoadIC, where the key that is passed in is a
    Name that is always the same we only checked for identity in both the
    stub and the TurboFan case, which works fine for symbols and internalized
    strings, but doesn't really work with non-internalized strings, where
    the identity check will fail, the runtime will internalize the string,
    and the IC will then see the original internalized string again and not
    progress in the feedback lattice. This leads to tricky deoptimization
    loops in TurboFan and constantly missing ICs.
    
    This adds fixes the stub to always try to internalize strings first
    when the identity check fails and then doing the check again. If the
    name is not found in the string table we miss, since in that case the
    string cannot match the previously recorded feedback name (which is
    always a unique name).
    
    In TurboFan we represent this checks with new CheckEqualsSymbol and
    CheckEqualsInternalizedString operators, which validate the previously
    recorded feedback, and the CheckEqualsInternalizedString operator does
    the attempt to internalize the input.
    
    Bug: v8:6936, v8:6948, v8:6969
    Change-Id: I3f3b4a587c67f00f7c4b60d239eb98a9626fe04a
    Reviewed-on: https://chromium-review.googlesource.com/730224Reviewed-by: 's avatarToon Verwaest <verwaest@chromium.org>
    Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
    Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#48784}
    d5c19aa9
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...