• Jakob Gruber's avatar
    [compiler] Use acquire-release semantics for NativeContext fields · 35d4022c
    Jakob Gruber authored
    Reads from the compiler thread require either 1. the last write to
    happen before the compiler thread starts, or 2. acquire-release
    semantics. For simplicity, this CL converts all NativeContext field
    writes to be acq-rel. With the usual exception of writes from
    generated code (these are limited for NativeContexts though).
    
    The situation of context sets/gets is still somewhat complex:
    
    - Context::get/set are relaxed (but don't use the corresponding tag)
    - Context::get(.., kAcquireLoad) and Context::set(.., kReleaseStore)
      are acquire-release.
    - Context::set_foo (defined for all native context fields) uses
      kReleaseStore underneath.
    - Context::get_foo (defined for all native context fields) uses
      the default relaxed getter. The get_foo(kAcquireLoad) variant uses
      the acquire getter.
    - NativeContext hides the default relaxed setter since all
      NativeContext sets should be acq-rel.
    
    Ideally (future work), this should be simplified and made more explicit.
    For example, get/set_foo could move to the NativeContext class, and we
    could reevaluate whether we really need both relaxed and acq-rel
    semantics (the pairing non-atomic/acq-rel feels more natural lets
    tsan find concurrency issues).
    
    Bug: v8:7790
    Change-Id: I25efd37ece758da5a11dc11c6ae913e4975f4d20
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2891575Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
    Commit-Queue: Jakob Gruber <jgruber@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#74524}
    35d4022c
Name
Last commit
Last update
.github Loading commit data...
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...
RISCV_OWNERS Loading commit data...
S390_OWNERS Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...