v8/test
Benedikt Meurer 1416d5a565 [map] Support in-place field representation changes.
This adds a new flag --modify-field-representation-inplace (enabled by
default), which lets the runtime perform field representation changes
for Smi to Tagged or for HeapObject to Tagged in-place instead of
creating new maps and marking the previous map tree as deprecated.

That means we create (a lot) fewer Maps and DescriptorArrays in the
beginning and also need to self-heal fewer objects later (migrating
off the deprecated maps). In TurboFan we just take the "field owner
dependency" whenever we use the field representation, which is very
similar to what we already do for the field types. That means if we
change the representation of a field that we used in optimized code,
we will simply deoptimize that code and have TurboFan potentially
later optimize it again with the new field representation.

On the Speedometer2/ElmJS-TodoMVC test, this reduces the total execution
time from around 415ms to around 352ms, which corresponds to a **15%**
improvement. The overall Speedometer2 score improves from around 74.1
to around 78.3 (on local runs with content_shell), corresponding to a
**5.6%** improvement here. 🎉

On the CNN desktop browsing story, it seems that we reduce map space
utilization/fragmentation by about 4-5%. But since we allocate a lot
less (fewer Maps and DescriptorArrays) we also significantly change
the GC timing, which heavily influences the results here. So take this
with a grain of salt. 🤷‍♂️

Note: For Double fields, this doesn't change anything, meaning they
still create new maps and deprecate the previous map trees.

Bug: v8:8749, v8:8865, v8:9114
Change-Id: I694a53f87ae5caeb868fd98a21809b66d4297d35
Cq-Include-Trybots: luci.chromium.try:linux-blink-rel
Doc: http://bit.ly/v8-in-place-field-representation-changes
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1561132
Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
Reviewed-by: Igor Sheludko <ishell@chromium.org>
Reviewed-by: Jaroslav Sevcik <jarin@chromium.org>
Reviewed-by: Georg Neis <neis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#60764}
2019-04-11 08:59:33 +00:00
..
benchmarks Reland "Preparing v8 to use with python3 /test" 2019-03-20 09:56:06 +00:00
cctest [map] Support in-place field representation changes. 2019-04-11 08:59:33 +00:00
common [wasm] Use engine's allocator consistently 2019-04-03 14:33:30 +00:00
debugger Reland "[debug] Mark toLocaleString and TA#join builtins as side-effect free." 2019-04-02 18:47:12 +00:00
fuzzer [wasm] Use engine's allocator consistently 2019-04-03 14:33:30 +00:00
inspector [wasm] Remove sequential compilation path 2019-04-10 11:02:27 +00:00
intl [Intl] Fix extra propertes in resolvedOptions 2019-04-09 22:38:54 +00:00
js-perf-test [js-perf-test] Add more WeakMap perf tests 2019-03-25 10:47:29 +00:00
memory [snapshot] Remove the builtins snapshot 2018-10-31 10:18:28 +00:00
message [ast] Refactor resolution of private names 2019-04-09 23:45:14 +00:00
mjsunit [map] Support in-place field representation changes. 2019-04-11 08:59:33 +00:00
mkgrokdump Make mkgrokdump depend on the page size 2019-03-18 17:49:48 +00:00
mozilla [torque]: Allow const-qualified struct and class fields 2019-04-03 10:55:33 +00:00
preparser [test] Don't test jitless without embedded-builtins 2019-02-26 14:33:01 +00:00
test262 [Intl] Calls thisBigIntValue in BigInt toLocaleString 2019-04-10 05:22:04 +00:00
torque [torque] Indexed class field initialization 2019-04-04 17:58:59 +00:00
unittests Revert "Reland "[torque] Throw exception instead of aborting if something goes wrong"" 2019-04-10 13:34:39 +00:00
wasm-js [testrunner] handle timeout param in file 2019-02-27 17:49:17 +00:00
wasm-spec-tests [wasm] Update core spec tests 2019-03-28 15:25:12 +00:00
webkit [test] Test more wasm variants 2019-04-09 13:41:52 +00:00
BUILD.gn [cctest] Enable shared linking for cctest 2019-04-09 12:12:19 +00:00
OWNERS Make tmrts an infra OWNER 2019-02-15 09:02:24 +00:00