v8/test
Benedikt Meurer bcee140617 [turbofan] Introduce InstanceOfIC to collect rhs feedback.
This adds a new InstanceOfIC where the TestInstanceOf bytecode collects
constant feedback about the right-hand side of instanceof operators,
including both JSFunction and JSBoundFunction instances. TurboFan then
uses the feedback to optimize instanceof in places where the right-hand
side is not a known constant (known to TurboFan).

This addresses the odd performance cliff that we see with instanceof in
functions with multiple closures. It was discovered as one of the main
bottlenecks on the uglify-es test in the web-tooling-benchmark. The
uglify-es test (run in separation) is ~18% faster with this change.

On the micro-benchmark in the tracking bug we go from

  instanceofSingleClosure_Const: 69 ms.
  instanceofSingleClosure_Class: 246 ms.
  instanceofMultiClosure: 246 ms.
  instanceofParameter: 246 ms.

to

  instanceofSingleClosure_Const: 70 ms.
  instanceofSingleClosure_Class: 75 ms.
  instanceofMultiClosure: 76 ms.
  instanceofParameter: 73 ms.

boosting performance by roughly 3.6x and thus effectively removing the
performance cliff around instanceof.

Bug: v8:6936, v8:6971
Change-Id: Ib88dbb9eaef9cafa4a0e260fbbde73427a54046e
Reviewed-on: https://chromium-review.googlesource.com/730686
Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
Reviewed-by: Michael Stanton <mvstanton@chromium.org>
Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
Reviewed-by: Jaroslav Sevcik <jarin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#48820}
2017-10-23 10:15:36 +00:00
..
benchmarks [test] Remove deprecated test-download feature 2017-10-11 15:18:19 +00:00
cctest [turbofan] Introduce InstanceOfIC to collect rhs feedback. 2017-10-23 10:15:36 +00:00
common [wasm] [multival] Reland: Allow function types as block types 2017-10-11 14:59:49 +00:00
debugger Reland "[inspector] breakpoint after last break position should not jump to first line" 2017-10-16 22:04:55 +00:00
fuzzer [fuzzer] Documentation: fix link for build configurations reference. 2017-10-05 16:45:12 +00:00
inspector [inspector] added V8InspectorClient::maxAsyncCallStackDepthChanged 2017-10-18 19:49:57 +00:00
intl Intl.DateTimeFormat: throw RangeError for non-finite input 2017-10-19 23:25:52 +00:00
js-perf-test [js-tests] Add benchmarks for large hash tables. 2017-10-19 08:45:22 +00:00
memory
message [js] Remove CHECK_OBJECT_COERCIBLE for Array methods 2017-10-20 19:29:36 +00:00
mjsunit [turbofan] Introduce InstanceOfIC to collect rhs feedback. 2017-10-23 10:15:36 +00:00
mkgrokdump
mozilla Reland "[d8] implement setTimeout." 2017-09-05 07:30:46 +00:00
preparser
promises-aplus [test] Remove deprecated test-download feature 2017-10-11 15:18:19 +00:00
test262 [typedarrays] Reduce overheads of TA.p.set 2017-10-19 08:25:52 +00:00
unittests [turbofan] Introduce InstanceOfIC to collect rhs feedback. 2017-10-23 10:15:36 +00:00
wasm-spec-tests [arm] [simulator] Reenable wasm float tests 2017-10-20 11:42:52 +00:00
webkit [js] Remove CHECK_OBJECT_COERCIBLE for Array methods 2017-10-20 19:29:36 +00:00
bot_default.gyp
bot_default.isolate
BUILD.gn
default.gyp
default.isolate
optimize_for_size.gyp
optimize_for_size.isolate
perf.gyp
perf.isolate