v8/test/unittests/interpreter
Joyee Cheung 713ebae3b4 [class] Add IC support for defining class fields to replace runtime call
Introduces several new runtime mechanics for defining private fields,
including:
  - Bytecode StaKeyedPropertyAsDefine
  - Builtins StoreOwnIC{Trampoline|Baseline|_NoFeedback}
  - Builtins KeyedDefineOwnIC{Trampoline|Baseline|_Megamorphic}
  - TurboFan IR opcode JSDefineProperty

These new operations can reduce a runtime call per class field into a
more traditional Store equivalent. In the microbenchmarks, this
results in a substantial win over the status quo (~8x benchmark score
for single fields with the changes, ~20x with multiple fields).

The TurboFan JSDefineProperty op is lowered in
JSNativeContextSpecialization, however this required some hacks.
Because private fields are defined as DONT_ENUM when added to the
object, we can't find a suitable transition using the typical data
property (NONE) flags. I've added a mechanism to specify the required
PropertyAttributes for the transition we want to look up.

Details:

New bytecodes:
  - StaKeyedPropertyAsDefine, which is essentially StaKeyedProperty
    but with a different IC builtin (KeyedDefineOwnIC). This is a
    bytecode rather than a flag for the existing StaKeyedProperty in
    order to avoid impacting typical keyed stores in any way due to
    additional branching and testing.

New builtins:
  - StoreOwnIC{TTrampoline|Baseline|_NoFeedback} is now used for
    StaNamedOwnProperty. Unlike the regular StoreIC, this variant will
    no longer look up the property name in the prototype.
    In adddition, this CL changes an assumption that
    StoreNamedOwnProperty can't result in a map transition, as we
    can't rely on the property already being present in the Map due
    to an object literal boilerplate.

    In the context of class features, this replaces the runtime
    function %CreateDataProperty().

  - KeyedDefineOwnIC{Trampoline|Baseline|_Megamorphic} is used by the
    new StaKeyedPropertyAsDefine bytecode. This is similar to an
    ordinary KeyedStoreIC, but will not check the prototype for
    setters, and for private fields, will take the slow path if the
    field already exists.

    In the context of class features, this replaces the runtime
    function %AddPrivateField().

TurboFan IR:
  - JSDefineProperty is introduced to represent a situation where we
    need to use "Define" semantics, in particular, it codifies that we
    do not consult the prototype chain, and the semantics relating to
    private fields are implied as well.

R=leszeks@chromium.org, syg@chromium.org, rmcilroy@chromium.org

Bug: v8:9888
Change-Id: Idcc947585c0e612f9e8533aa4e2e0f8f0df8875d
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2795831
Reviewed-by: Igor Sheludko <ishell@chromium.org>
Reviewed-by: Michael Stanton <mvstanton@chromium.org>
Reviewed-by: Leszek Swirski <leszeks@chromium.org>
Reviewed-by: Georg Neis <neis@chromium.org>
Reviewed-by: Shu-yu Guo <syg@chromium.org>
Commit-Queue: Joyee Cheung <joyee@igalia.com>
Cr-Commit-Position: refs/heads/main@{#77377}
2021-10-13 10:40:24 +00:00
..
bytecode-array-builder-unittest.cc [class] Add IC support for defining class fields to replace runtime call 2021-10-13 10:40:24 +00:00
bytecode-array-iterator-unittest.cc [cleanup] Convert some global enums to enum class 2021-05-11 10:47:49 +00:00
bytecode-array-random-iterator-unittest.cc Reland "[interpreter] Short Star bytecode" 2021-02-17 16:18:26 +00:00
bytecode-array-writer-unittest.cc [cleanup] Clean up SYNCHRONIZED_ACCESSORS macro naming and its uses 2020-10-05 11:01:22 +00:00
bytecode-decoder-unittest.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
bytecode-node-unittest.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
bytecode-operands-unittest.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
bytecode-register-allocator-unittest.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
bytecode-register-optimizer-unittest.cc [interpreter] Rename AccumulatorUse so it can be expanded for short star 2021-02-11 23:35:29 +00:00
bytecode-source-info-unittest.cc Move remaining files in src/ 2019-05-24 18:24:36 +00:00
bytecode-utils.h Move relevant files to src/execution 2019-05-22 08:36:33 +00:00
bytecodes-unittest.cc [interpreter] Rename AccumulatorUse so it can be expanded for short star 2021-02-11 23:35:29 +00:00
constant-array-builder-unittest.cc [offthread] Add an OffThreadIsolate 2020-02-04 11:37:47 +00:00
interpreter-assembler-unittest.cc [Compiler] Remove untrusted code mitigations. 2021-08-12 12:58:24 +00:00
interpreter-assembler-unittest.h [Compiler] Remove untrusted code mitigations. 2021-08-12 12:58:24 +00:00