• Milad Fa's avatar
    PPC/s390: [Turboprop] Move deoptimizations for dynamic map checks into builtin. · 2bc979aa
    Milad Fa authored
    Port b6643320
    
    Original Commit Message:
    
        In order to reduce the codegen size of dynamic map checks, add the
        ability to have an eager with resume deopt point, which can call
        a given builitin to perform a more detailed check than can be done
        in codegen, and then either deoptimizes itself (as if the calling
        code had performed an eager deopt) or resumes execution in the
        calling code after the check.
    
        In addition, support for adding extra arguments to a
        deoptimization continuation is added to enable us to pass the
        necessary arguments to the DynamicMapChecks builtin.
    
        Finally, a trampoline is added to the DynamicMapChecks which saves
        the registers that might be clobbered by that builtin, to avoid
        having to save them in the generated code. This trampoline also
        performs the deoptimization based on the result of the
        DynamicMapChecks builtin.
    
        In order to ensure both the trampoline and DynamicMapChecks
        builtin have the same call interface, and to limit the number
        of registers that need saving in the trampoline, the
        DynamicMapChecks builtin is moved to be a CSA builtin with a
        custom CallInterfaceDescriptor, that calls an exported Torque
        macro that implements the actual functionality.
    
        All told, this changes the codegen for a monomorphic dynamic
        map check from:
            movl rbx,<expected_map>
            cmpl [<object>-0x1],rbx
            jnz <deferred_call>
           resume_point:
            ...
           deferred_call:
            <spill registers>
            movl rax,<slot>
            movq rbx,<object>
            movq rcx,<handler>
            movq r10,<DynamicMapChecks>
            call r10
            cmpq rax,0x0
            jz <restore_regs>
            cmpq rax,0x1
            jz <deopt_point_1>
            cmpq rax,0x2
            jz <deopt_point_2>
            int3l
           restore_regs:
            <restore_regs>
            jmp <resume_point>
            ...
           deopt_point_1:
            call Deoptimization_Eager
           deopt_point_2:
            call Deoptimization_Bailout
    
            movl rcx,<expected_map>
            movq rdx,<handler>
            cmpl [<object>-0x1],rcx
            jnz <deopt_point>
           resume_point:
            ...
           deopt_point:
            call DynamicMapChecksTrampoline
            jmp <resume_point>
    
    R=rmcilroy@chromium.org, joransiu@ca.ibm.com, junyan@redhat.com, midawson@redhat.com
    BUG=v8:10582
    LOG=N
    
    Change-Id: I0739c1b40ed06bb22b73ebe1833ea648b540882a
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2569359Reviewed-by: 's avatarJunliang Yan <junyan@redhat.com>
    Commit-Queue: Milad Fa <mfarazma@redhat.com>
    Cr-Commit-Position: refs/heads/master@{#71571}
    2bc979aa
Name
Last commit
Last update
build_overrides Loading commit data...
custom_deps Loading commit data...
docs Loading commit data...
gni Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.clang-tidy Loading commit data...
.editorconfig Loading commit data...
.flake8 Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.vpython Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
COMMON_OWNERS Loading commit data...
DEPS Loading commit data...
DIR_METADATA Loading commit data...
ENG_REVIEW_OWNERS Loading commit data...
INFRA_OWNERS Loading commit data...
INTL_OWNERS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
MIPS_OWNERS Loading commit data...
OWNERS Loading commit data...
PPC_OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
S390_OWNERS Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...