• Paolo Severini's avatar
    Faster JS-to-Wasm calls · 860fcb1b
    Paolo Severini authored
    This replaces https://chromium-review.googlesource.com/c/v8/v8/+/2376165/.
    
    Currently JS-to-Wasm calls go through a wrapper/trampoline, built on
    the basis of the signature of a Wasm function to call, and whose task
    is to:
    - set "thread_in_wasm_flag" to true
    - convert the arguments from tagged types into Wasm native types
    - calculate the address of the Wasm function to call and call it
    - convert back the result from Wasm native types into tagged types
    - reset "thread_in_wasm_flag" to false.
    
    This CL tries to improve the performance of JS-to-Wasm calls by
    inlining the code of the JS-to-Wasm wrappers in the call site.
    
    It introduces a new IR operand, JSWasmCall, which replaces JSCall for
    this kind of calls. A 'JSWasmCall' node is associated to
    WasmCallParameters, which contain information about the signature of
    the Wasm function to call.
    
    WasmWrapperGraphBuilder::BuildJSToWasmWrapper is modified to avoid generating code to convert the types for the arguments
    of the Wasm function, when the conversion is not necessary.
    The actual inlining of the graph generated for this wrapper happens in
    the simplified-lowering phase.
    
    A new builtin, JSToWasmLazyDeoptContinuation, is introduced to manage
    lazy deoptimizations that can happen if the Wasm function callee calls
    back some JS code that invalidates the compiled JS caller function.
    
    Bug: v8:11092
    Change-Id: I3174c1c1f59b39107b333d1929ecc0584486b8ad
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2557538Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
    Reviewed-by: 's avatarNico Hartmann <nicohartmann@chromium.org>
    Reviewed-by: 's avatarGeorg Neis (ooo until January 5) <neis@chromium.org>
    Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
    Reviewed-by: 's avatarMaya Lekova <mslekova@chromium.org>
    Reviewed-by: 's avatarAndreas Haas <ahaas@chromium.org>
    Commit-Queue: Paolo Severini <paolosev@microsoft.com>
    Cr-Commit-Position: refs/heads/master@{#71824}
    860fcb1b
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...