-
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: Tobias Tebbi <tebbi@chromium.org> Commit-Queue: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/main@{#83438}
7bf63faf