• 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
contexts.h 40.9 KB