• Manos Koukoutos's avatar
    [wasm-gc] Change ValueType representation to account for new types · 52f65296
    Manos Koukoutos authored
    Motivation:
    Changes to the typed function references and gc proposals solidified
    the notion of heap type, clarified nullable vs. non-nullable reference
    types, and introduced rtts, which contain an integer depth field in
    addition to a heap type. This required us to overhaul our ValueType
    representation, which results in extensive changes.
    
    To keep this CL "small", we do not try to implement the binary encoding
    as described in the proposals, but rather devise a simpler one of our
    own (see below). Also, we do not try to implement additional
    functionality for the new types.
    
    Changes:
    - Introduce HeapType. Move heap types from ValueType to HeapType.
    - Introduce Nullability for reference types.
    - Rework ValueType helper methods.
    - Introduce rtts in ValueType with an integer depth field. Include depth
      in the ValueType encoding.
    - Make the constructor of ValueType private, instead expose static
      functions which explicitly state what they create.
    - Change every switch statement on ValueType::Kind. Sometimes, we need
      nested switches.
    - Introduce temporary constants in ValueTypeCode for nullable types,
      use them for decoding.
    - In WasmGlobalObject, split 'flags' into 'raw_type' and 'is_mutable'.
    - Change IsSubtypeOfRef to IsSubtypeOfHeap and implement changes in
      subtyping.
    - kWasmFuncRef initializers are now non-nullable. Initializers are
      only required to be subtypes of the declared global type.
    - Change tests and fuzzers as needed.
    
    Bug: v8:7748
    Change-Id: If41f783bd4128443b07e94188cea7dd53ab0bfa5
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2247657
    Commit-Queue: Manos Koukoutos <manoskouk@chromium.org>
    Reviewed-by: 's avatarClemens Backes <clemensb@chromium.org>
    Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#68408}
    52f65296
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...
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...
LICENSE.valgrind 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...