• 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
..
c-signature.h Loading commit data...
call-tester.h Loading commit data...
code-assembler-tester.h Loading commit data...
codegen-tester.cc Loading commit data...
codegen-tester.h Loading commit data...
function-tester.cc Loading commit data...
function-tester.h Loading commit data...
graph-builder-tester.h Loading commit data...
serializer-tester.cc Loading commit data...
serializer-tester.h Loading commit data...
test-basic-block-profiler.cc Loading commit data...
test-branch-combine.cc Loading commit data...
test-code-assembler.cc Loading commit data...
test-code-generator.cc Loading commit data...
test-gap-resolver.cc Loading commit data...
test-graph-visualizer.cc Loading commit data...
test-instruction-scheduler.cc Loading commit data...
test-instruction.cc Loading commit data...
test-js-constant-cache.cc Loading commit data...
test-js-context-specialization.cc Loading commit data...
test-js-typed-lowering.cc Loading commit data...
test-jump-threading.cc Loading commit data...
test-linkage.cc Loading commit data...
test-loop-analysis.cc Loading commit data...
test-machine-operator-reducer.cc Loading commit data...
test-multiple-return.cc Loading commit data...
test-node.cc Loading commit data...
test-operator.cc Loading commit data...
test-representation-change.cc Loading commit data...
test-run-bytecode-graph-builder.cc Loading commit data...
test-run-calls-to-external-references.cc Loading commit data...
test-run-deopt.cc Loading commit data...
test-run-intrinsics.cc Loading commit data...
test-run-jsbranches.cc Loading commit data...
test-run-jscalls.cc Loading commit data...
test-run-jsexceptions.cc Loading commit data...
test-run-jsobjects.cc Loading commit data...
test-run-jsops.cc Loading commit data...
test-run-load-store.cc Loading commit data...
test-run-machops.cc Loading commit data...
test-run-native-calls.cc Loading commit data...
test-run-retpoline.cc Loading commit data...
test-run-stackcheck.cc Loading commit data...
test-run-tail-calls.cc Loading commit data...
test-run-unwinding-info.cc Loading commit data...
test-run-variables.cc Loading commit data...
value-helper.cc Loading commit data...
value-helper.h Loading commit data...