• Tobias Tebbi's avatar
    [csa] verify skipped write-barriers in MemoryOptimizer · da7322c0
    Tobias Tebbi authored
    With very few exceptions, this verifies all skipped write-barriers in
    CSA and Torque, showing that the MemoryOptimizer together with some
    type information on the stored value are enough to avoid unsafe skipped
    write-barriers.
    
    Changes to CSA:
    SKIP_WRITE_BARRIER and Store*NoWriteBarrier are verified by the
    MemoryOptimizer by default.
    Type information about the stored values (TNode<Smi>) is exploited to
    safely skip write barriers for stored Smi values.
    In some cases, the code is re-structured to make it easier to consume
    for the MemoryOptimizer (manual branch and load elimination).
    
    Changes to the MemoryOptimizer:
    Improve the MemoryOptimizer to remove write barriers:
    - When the store happens to a CSA-generated InnerAllocate, by ignoring
      Bitcasts and additions.
    - When the stored value is the HeapConstant of an immortal immovable root.
    - When the stored value is a SmiConstant (recognized by BitcastToTaggedSigned).
    - Fast C-calls are treated as non-allocating.
    - Runtime calls can be white-listed as non-allocating.
    
    Remaining missing cases:
    - C++-style iterator loops with inner pointers.
    - Inner allocates that are reloaded from a field where they were just stored
      (for example an elements backing store). Load elimination would fix that.
    - Safe stored value types that cannot be expressed in CSA (e.g., Smi|Hole).
      We could handle that in Torque.
    - Double-aligned allocations, which are not lowered in the MemoryOptimizer
      but in CSA.
    
    Drive-by change: Avoid Smi suffix for StoreFixedArrayElement since this
    can be handled by overload resolution (in Torque and C++).
    
    R=jarin@chromium.org
    TBR=mvstanton@chromium.org
    
    Change-Id: I0af9b710673f350e0fe81c2e59f37da93c024b7c
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1571414
    Commit-Queue: Tobias Tebbi <tebbi@chromium.org>
    Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#61016}
    da7322c0
Name
Last commit
Last update
benchmarks 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...
.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...
ChangeLog Loading commit data...
DEPS 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...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...
snapshot_toolchain.gni Loading commit data...