• Tobias Tebbi's avatar
    Reland: [csa] verify skipped write-barriers in MemoryOptimizer · a19c3ffb
    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++).
    
    Reland Change: Support pointer compression operands.
    
    R=jarin@chromium.org
    TBR=mvstanton@chromium.org
    
    Bug: v8:7793
    Change-Id: I84e1831eb6bf9be14f36db3f8b485ee4fab6b22e
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1612904
    Auto-Submit: Tobias Tebbi <tebbi@chromium.org>
    Reviewed-by: 's avatarMichael Stanton <mvstanton@chromium.org>
    Commit-Queue: Tobias Tebbi <tebbi@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#61522}
    a19c3ffb
code-stub-assembler.cc 521 KB