• Jakob Gruber's avatar
    [compiler] Optionally apply an offset to stack checks · 4a16305b
    Jakob Gruber authored
    The motivation behind this change is that the frame size of an optimized
    function and its unoptimized version may differ, and deoptimization
    may thus trigger a stack overflow. The solution implemented in this CL
    is to optionally apply an offset to the stack check s.t. the check
    becomes 'sp - offset > limit'. The offset is applied to stack checks at
    function-entry, and is set to the difference between the optimized and
    unoptimized frame size.
    
    A caveat: OSR may not be fully handled by this fix since we've already
    passed the function-entry stack check. A possible solution would be to
    *not* skip creation of function-entry stack checks for inlinees.
    
    This CL: 1. annotates stack check nodes with the stack check kind, where
    kind is one of {function-entry,iteration-body,unknown}. 2. potentially
    allocates a temporary register to store the result of the 'sp - offset'
    in instruction selection (and switches input registers to 'unique'
    mode). 3. Applies the offset in code generation.
    
    Drive-by: Add src/compiler/globals.h for compiler-specific globals.
    
    Bug: v8:9534,chromium:1000887
    Change-Id: I257191c4a4978ccb60cfa5805ef421f30f0e9826
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1762521
    Commit-Queue: Jakob Gruber <jgruber@chromium.org>
    Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#63701}
    4a16305b
bytecode-graph-builder.cc 161 KB