• 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
regress-6948.js 520 Bytes