• 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
js-call-reducer.cc 337 KB