• Caitlin Potter's avatar
    [runtime] use new CloneObject bytecode for some ObjectLiteralSpread cases · b6f7ea58
    Caitlin Potter authored
    As discussed in
    https://docs.google.com/document/d/1sBdGe8RHgeYP850cKSSgGABTyfMdvaEWLy-vertuTCo/edit?ts=5b3ba5cc#,
    
    this CL introduces a new bytecode (CloneObject), and a new IC type.
    
    In this prototype implementation, the type feedback looks like the
    following:
    
    Uninitialized case:
      { uninitialized_sentinel, uninitialized_sentinel }
    Monomorphic case:
      { weak 'source' map, strong 'result' map }
    Polymorphic case:
      { WeakFixedArray with { weak 'source' map, strong 'result' map }, cleared value }
    Megamorphic case:
      { megamorphic_sentinel, cleared_Value }
    
    In the fast case, Object cloning is done by allocating an object with
    the saved result map, and a shallow clone of the fast properties from
    the source object, as well as cloned fast elements from the source object.
    If at any point the fast case can't be taken, the IC transitions to the
    slow case and remains there.
    
    This prototype CL does not include any TurboFan optimization, and the
    CloneObject operation is merely reduced to a stub call.
    
    It may still be possible to get some further improvements by somehow
    incorporating compile-time boilerplate elements into the cloned object,
    or simplifying how the boilerplate elements are inserted into the
    object.
    
    In terms of performance, we improve the ObjectSpread score in JSTests/ObjectLiteralSpread/
    by about 8x, with substantial improvements over the Babel and ObjectAssign scores.
    
    R=gsathya@chromium.org, mvstanton@chromium.org, rmcilroy@chromium.org, neis@chromium.org, bmeurer@chromium.org
    BUG=v8:7611
    
    Change-Id: I79e1796eb77016fb4feba0e1d3bb9abb348c183e
    Reviewed-on: https://chromium-review.googlesource.com/1127472
    Commit-Queue: Caitlin Potter <caitp@igalia.com>
    Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
    Reviewed-by: 's avatarMichael Stanton <mvstanton@chromium.org>
    Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
    Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#54595}
    b6f7ea58
object-spread-ic.js 2.32 KB