v8/test
Benedikt Meurer a15ad0d310 [turbofan] Reduce overhead of megamorphic property accesses.
We had an optimization in Crankshaft where we would call into the
megamorphic handler stub directly if an inline cache was already
found to be megamorphic when it hit the optimizing compiler. This
way we could avoid the dispatch overhead when we know that there's
no point in checking for the other states anyways. However we somehow
missed to port this optimization to TurboFan.

Now this change introduces support to call into LoadIC_Megamorphic and
KeyedLoadIC_Megamorphic directly (plus the trampoline versions), which
saves quite a lot of overhead for the cases where the map/name pair is
found in the megamorphic stub cache, and it's quite a simple change. We
can later extend this to also handle the StoreIC and KeyedStoreIC cases
if that turns out to be beneficial.

This improves the score on the Octane/TypeScript test by around ~2%
and the TypeScript test in the web-tooling-benchmark by around ~4%. On
the ARES-6 Air test the steady state mean improves by 2-4%, and on the
ARES-6 ML test the steady state mean seems to also improve by 1-2%, but
that might be within noise.

On a micro-benchmark that just runs `o.x` in a hot loop on a set of 9
different objects, which all have `x` as the first property and are
all in fast mode, we improve by around ~30%, and are now almost on par
with JavaScriptCore.

Bug: v8:6344, v8:6936
Change-Id: Iaa4c6e34c37e78da217ee75f32f6acc95a834250
Reviewed-on: https://chromium-review.googlesource.com/1215623
Reviewed-by: Jaroslav Sevcik <jarin@chromium.org>
Reviewed-by: Jakob Kummerow <jkummerow@chromium.org>
Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#55803}
2018-09-11 18:04:01 +00:00
..
benchmarks [test] Share resource-fetching logic with all d8 test cases 2018-08-29 17:51:43 +00:00
cctest [test] Also print hex representation of floats/doubles 2018-09-11 16:05:33 +00:00
common [ptr-compr] Explicitly pass v8::PageAllocator instance to helper functions. 2018-09-06 14:45:58 +00:00
debugger [test] Skip some tests on gc fuzzer 2018-09-07 18:35:52 +00:00
fuzzer Reland "[wasm] Implement the new API for WebAssembly.instantiateStreaming" 2018-08-14 08:20:19 +00:00
inspector [test] Add non-d8 test suites to Android testing 2018-09-11 11:12:21 +00:00
intl [Intl] fix formatToPart generate unit in plural if pass in plural as unit. 2018-09-11 10:02:04 +00:00
js-perf-test [builtins] Add FastCallFunction builtin that elides some checks 2018-09-11 07:31:32 +00:00
memory [builtins] Add embedded stats to --serialization-statistics 2018-07-05 12:33:26 +00:00
message Reland "[test] Increase coverage of d8_default test suites" 2018-09-07 07:53:29 +00:00
mjsunit Revert "[typedarray] Properly convert hole to undefined in TypedArray.from" 2018-09-11 17:49:16 +00:00
mkgrokdump Implement global proposal 2018-08-16 11:07:21 +00:00
mozilla [test] Add more test suites to Android testing 2018-09-07 09:53:15 +00:00
preparser [test] Share resource-fetching logic with all d8 test cases 2018-08-29 17:51:43 +00:00
test262 [Intl] fix formatToPart generate unit in plural if pass in plural as unit. 2018-09-11 10:02:04 +00:00
torque [torque] Fix all current lint errors in Torque code 2018-09-11 14:11:05 +00:00
unittests [turbofan] Reduce overhead of megamorphic property accesses. 2018-09-11 18:04:01 +00:00
wasm-spec-tests [test] Share resource-fetching logic with all d8 test cases 2018-08-29 17:51:43 +00:00
webkit Reland "[interpreter] Add bytecode for leading array spreads." 2018-09-05 09:29:51 +00:00
BUILD.gn Reland "[test] Add logic to run tests on Android" 2018-08-10 17:56:12 +00:00