• danno's avatar
    [builtins] Separate Array.prototype.* CSA builtins into two parts · 7de21c4d
    danno authored
    Previous to this CL, CSA-optimized Array builtins--like forEach, some, and
    every--were written in a single, monolithic block of CSA code.
    
    This CL teases the code for each of these builtins apart into two chunks, a main
    body with optimizations for fast cases, and a "continuation" builtin that
    performs a spec-compliant, but slower version of the main loop of the
    builtin. The general idea is that when the "fast" main body builtin encounters
    an unexpected condition that invalidates assumptions allowing fast-case code, it
    tail calls to the slow, correct version of the loop that finishes the builtin
    execution.
    
    This separation currently doens't really provide any specific advantage over the
    combined version. However, it paves the way to TF-optimized inlined Array
    builtins. Inlined Array builtins may trigger deopts during the execution of the
    builtin's loop, and those deopt must continue execution from the point at which
    they failed. With some massaging of the deoptimizer, it will be possible to make
    those deopt points create an extra frame on the top of the stack which resumes
    execution in the slow-loop builtin created in this CL.
    
    BUG=v8:1956
    LOG=N
    
    Review-Url: https://codereview.chromium.org/2753793002
    Cr-Commit-Position: refs/heads/master@{#43867}
    7de21c4d
code-assembler.cc 30.5 KB