v8/test/cctest
Benedikt Meurer f1ec44e2f5 [turbofan] Optimize fast enum cache driven for..in.
This CL adds support to optimize for..in in fast enum-cache mode to the
same degree that it was optimized in Crankshaft, without adding the same
deoptimization loop that Crankshaft had with missing enum cache indices.
That means code like

  for (var k in o) {
    var v = o[k];
    // ...
  }

and code like

  for (var k in o) {
    if (Object.prototype.hasOwnProperty.call(o, k)) {
      var v = o[k];
      // ...
    }
  }

which follows the https://eslint.org/docs/rules/guard-for-in linter
rule, can now utilize the enum cache indices if o has only fast
properties on the receiver, which speeds up the access o[k]
significantly and reduces the pollution of the global megamorphic
stub cache.

For example the micro-benchmark in the tracking bug v8:6702 now runs
faster than ever before:

 forIn: 1516 ms.
 forInHasOwnProperty: 1674 ms.
 forInHasOwnPropertySafe: 1595 ms.
 forInSum: 2051 ms.
 forInSumSafe: 2215 ms.

Compared to numbers from V8 5.8 which is the last version running with
Crankshaft

 forIn: 1641 ms.
 forInHasOwnProperty: 1719 ms.
 forInHasOwnPropertySafe: 1802 ms.
 forInSum: 2226 ms.
 forInSumSafe: 2409 ms.

and V8 6.0 which is the current stable version with TurboFan:

 forIn: 1713 ms.
 forInHasOwnProperty: 5417 ms.
 forInHasOwnPropertySafe: 5324 ms.
 forInSum: 7556 ms.
 forInSumSafe: 11067 ms.

It also improves the throughput on the string-fasta benchmark by
around 7-10%, and there seems to be a ~5% improvement on the
Speedometer/React benchmark locally.

For this to work, the ForInPrepare bytecode was split into
ForInEnumerate and ForInPrepare, which is very similar to how it was
handled in Fullcodegen initially. In TurboFan we introduce a new
operator LoadFieldByIndex that does the dynamic property load.

This also removes the CheckMapValue operator again in favor of
just using LoadField, ReferenceEqual and CheckIf, which work
automatically with the EscapeAnalysis and the
BranchConditionElimination.

Bug: v8:6702
Change-Id: I91235413eea478ba77ace7bd14bb2f62e155dd9a
Reviewed-on: https://chromium-review.googlesource.com/645949
Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
Reviewed-by: Yang Guo <yangguo@chromium.org>
Reviewed-by: Jaroslav Sevcik <jarin@chromium.org>
Reviewed-by: Leszek Swirski <leszeks@chromium.org>
Cr-Commit-Position: refs/heads/master@{#47768}
2017-09-01 11:27:37 +00:00
..
compiler Revert "[cctest] Add fuzz tests for generating parallel moves." 2017-08-31 09:25:16 +00:00
ffi Add COMPONENT tags to OWNERS files where appropriate 2017-05-22 10:15:28 +00:00
heap [heap] Remove CS expectation from test 2017-08-30 15:53:50 +00:00
interpreter [turbofan] Optimize fast enum cache driven for..in. 2017-09-01 11:27:37 +00:00
libplatform Reland "Switch tracing to use v8::TracingController" 2017-07-03 11:49:23 +00:00
libsampler Include only stuff you need, part 6: Fix cctest.h. 2016-09-01 12:02:16 +00:00
parsing [parser] Skipping inner funcs: fix sloppy block generators. 2017-08-31 05:42:36 +00:00
wasm [wasm] Remove non-trivially dead or redundant code 2017-09-01 10:35:05 +00:00
BUILD.gn [cleanup] Replace List with std::vector in cctests and d8. 2017-08-29 13:29:26 +00:00
cctest_exe.isolate [Swarming] Isolate perf tests. 2016-02-15 11:17:18 +00:00
cctest.cc Rename "NoBarrier" memory operations to "Relaxed". 2017-05-30 07:44:37 +00:00
cctest.gyp [cleanup] Replace List with std::vector in cctests and d8. 2017-08-29 13:29:26 +00:00
cctest.h Delegate getting current wall-clock time to the Platform interface. 2017-08-30 06:28:09 +00:00
cctest.isolate [Interpreter] Refactor bytecode generator test suite. 2016-02-25 12:07:19 +00:00
cctest.status PPC: disable SimdLoadStoreLoad 2017-08-25 02:26:25 +00:00
DEPS Add DEPS files and run checkdeps in presubmit check 2014-06-03 13:39:42 +00:00
expression-type-collector-macros.h Make typing-asm match spec more closely around load/store, add more tests. 2015-11-30 21:11:47 +00:00
gay-fixed.cc Disable soon to be deprecated APIs per default for v8 2015-12-09 10:35:04 +00:00
gay-fixed.h [presubmit] Enable readability/namespace linter checking. 2015-09-30 13:47:11 +00:00
gay-precision.cc Disable soon to be deprecated APIs per default for v8 2015-12-09 10:35:04 +00:00
gay-precision.h [presubmit] Enable readability/namespace linter checking. 2015-09-30 13:47:11 +00:00
gay-shortest.cc Disable soon to be deprecated APIs per default for v8 2015-12-09 10:35:04 +00:00
gay-shortest.h [presubmit] Enable readability/namespace linter checking. 2015-09-30 13:47:11 +00:00
log-eq-of-logging-and-traversal.js Fix test-log/EquivalenceOfLoggingAndTraversal 2013-08-26 14:56:23 +00:00
OWNERS Remove x87 port 2017-07-18 18:20:40 +00:00
print-extension.cc Pass Isolate pointer to String::Utf8Value/Value constructors 2017-08-28 18:17:08 +00:00
print-extension.h Remove deprecated functions the smaller half of the remaing tests 2015-11-17 12:42:44 +00:00
profiler-extension.cc Introduce v8::CpuProfiler::New and v8::CpuProfiler::Dispose API. 2016-07-08 15:01:10 +00:00
profiler-extension.h Introduce v8::CpuProfiler::New and v8::CpuProfiler::Dispose API. 2016-07-08 15:01:10 +00:00
scope-test-helper.h [parser] Skipping inner funcs: Associate data to SharedFunctionInfo, not Script. 2017-06-30 11:12:52 +00:00
setup-isolate-for-tests.cc Reland "[snapshot] Move builtins generation into mksnapshot" 2017-04-07 13:31:29 +00:00
setup-isolate-for-tests.h [cleanup] Remove unnecessary entries in cctest.status 2017-06-09 16:05:09 +00:00
test-access-checks.cc Fix receiver checks for v8::Function on a remote context receiver. 2017-02-22 10:13:24 +00:00
test-accessor-assembler.cc [csa] Enforce using BIND macro 2017-05-19 16:47:56 +00:00
test-accessors.cc [cctest] Simplify the majority of callers of CcTest::CollectAllGarbage 2017-04-27 17:20:54 +00:00
test-allocation.cc Revert "[Memory] Improve OOM callback tests." 2017-08-14 09:20:38 +00:00
test-api-accessors.cc Remove experimental fast accessor builder API 2017-03-14 08:14:48 +00:00
test-api-interceptors.cc Pass Isolate pointer to String::Utf8Value/Value constructors 2017-08-28 18:17:08 +00:00
test-api.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-api.h Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-array-list.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-assembler-arm64.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-assembler-arm.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-assembler-ia32.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-assembler-mips64.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-assembler-mips.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-assembler-ppc.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-assembler-s390.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-assembler-x64.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-atomicops.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-bignum-dtoa.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-bignum.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-bit-vector.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-circular-queue.cc Disable soon to be deprecated APIs per default for v8 2015-12-09 10:35:04 +00:00
test-code-cache.cc [cleanup] Replace List with std::vector in cctests and d8. 2017-08-29 13:29:26 +00:00
test-code-layout.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-code-stub-assembler.cc [promise] Reduce size of PromiseCapability by making it a struct 2017-08-31 04:20:16 +00:00
test-code-stubs-arm64.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-code-stubs-arm.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-code-stubs-ia32.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-code-stubs-mips64.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-code-stubs-mips.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-code-stubs-x64.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-code-stubs.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-code-stubs.h [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-compiler.cc [Modules] Introduce ScriptOrModule and HostDefinedOptions 2017-08-31 00:28:56 +00:00
test-constantpool.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-conversions.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-cpu-profiler.cc Delegate getting current wall-clock time to the Platform interface. 2017-08-30 06:28:09 +00:00
test-date.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-debug.cc Pass Isolate pointer to String::Utf8Value/Value constructors 2017-08-28 18:17:08 +00:00
test-decls.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-deoptimization.cc Pass Isolate pointer to String::Utf8Value/Value constructors 2017-08-28 18:17:08 +00:00
test-dictionary.cc [runtime] Make GetHash and GetOrCreateHash member functions 2017-08-22 00:35:31 +00:00
test-disasm-arm64.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-disasm-arm.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-disasm-ia32.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-disasm-mips64.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-disasm-mips.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-disasm-ppc.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-disasm-s390.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-disasm-x64.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-diy-fp.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-double.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-dtoa.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-elements-kind.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-experimental-extra.js Add experimental, non-snapshotted V8 extras 2015-08-20 00:01:14 +00:00
test-extra.js Add isPromise V8 extras util 2017-04-06 13:16:35 +00:00
test-fast-dtoa.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-feedback-vector.cc [turbofan] Optimize fast enum cache driven for..in. 2017-09-01 11:27:37 +00:00
test-feedback-vector.h [objects] Make feedback vector a first-class object 2017-07-27 13:31:55 +00:00
test-field-type-tracking.cc Cache fewer StoreIC-Transition handlers 2017-08-18 16:06:44 +00:00
test-fixed-dtoa.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-flags.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-func-name-inference.cc [iwyu] Remove include debug.h -> arguments.h 2017-02-09 09:19:23 +00:00
test-fuzz-arm64.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-global-handles.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-global-object.cc Pass Isolate pointer to String::Utf8Value/Value constructors 2017-08-28 18:17:08 +00:00
test-hashcode.cc [runtime] Make GetHash and GetOrCreateHash member functions 2017-08-22 00:35:31 +00:00
test-hashmap.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-heap-profiler.cc [cleanup] Replace List with std::vector in cctests and d8. 2017-08-29 13:29:26 +00:00
test-identity-map.cc [cleanup] Replace List with std::vector in cctests and d8. 2017-08-29 13:29:26 +00:00
test-inobject-slack-tracking.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-intl.cc [intl] Implement Intl.NumberFormat.prototype.formatToParts 2017-06-30 20:14:18 +00:00
test-javascript-arm64.cc include fixing: api.h shouldn't include objects-inl.h 2017-01-09 13:43:28 +00:00
test-js-arm64-variables.cc include fixing: api.h shouldn't include objects-inl.h 2017-01-09 13:43:28 +00:00
test-list.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-liveedit.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-lockers.cc [cleanup] Replace List with std::vector in cctests and d8. 2017-08-29 13:29:26 +00:00
test-log-stack-tracer.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-log.cc Pass Isolate pointer to String::Utf8Value/Value constructors 2017-08-28 18:17:08 +00:00
test-macro-assembler-arm.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-macro-assembler-mips64.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-macro-assembler-mips.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-macro-assembler-x64.cc [fullcodegen] Delete FullCodegen. 2017-08-11 11:50:05 +00:00
test-managed.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-mementos.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-modules.cc [api] Expose a module's status and exception. 2017-06-28 15:54:57 +00:00
test-object.cc [cctest] Add simple test for EnumCache 2017-08-31 09:53:24 +00:00
test-orderedhashtable.cc Reland "[runtime] Store hash code in length field" 2017-08-21 05:30:01 +00:00
test-parsing.cc Pass Isolate pointer to String::Utf8Value/Value constructors 2017-08-28 18:17:08 +00:00
test-platform-linux.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-platform-win32.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-platform.cc S390:Update inline asm constraint in test-platform 2016-07-16 15:36:45 +00:00
test-profile-generator.cc [cleanup] Replace List with std::vector in cctests and d8. 2017-08-29 13:29:26 +00:00
test-random-number-generator.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-regexp.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-representation.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-run-wasm-relocation-arm64.cc [compiler] Delay allocation of code-embedded heap numbers. 2017-05-31 14:00:11 +00:00
test-run-wasm-relocation-arm.cc [compiler] Delay allocation of code-embedded heap numbers. 2017-05-31 14:00:11 +00:00
test-run-wasm-relocation-ia32.cc [iwyu] Split frame-constants.h out of frames.h to reduce transitive includes. 2017-08-03 10:12:12 +00:00
test-run-wasm-relocation-x64.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-sampler-api.cc Include only stuff you need, part 6: Fix cctest.h. 2016-09-01 12:02:16 +00:00
test-serialize.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-simulator-arm64.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-simulator-arm.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-strings.cc Pass Isolate pointer to String::Utf8Value/Value constructors 2017-08-28 18:17:08 +00:00
test-strtod.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-symbols.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-thread-termination.cc [console] correctly propagate exceptions. 2017-08-31 13:37:12 +00:00
test-threads.cc [cleanup] Replace List with std::vector in cctests and d8. 2017-08-29 13:29:26 +00:00
test-trace-event.cc [cleanup] Replace List with std::vector in cctests and d8. 2017-08-29 13:29:26 +00:00
test-traced-value.cc [tracing] Use locale independent writer for FP values. 2017-01-12 08:08:57 +00:00
test-transitions.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-transitions.h Refactor TransitionArray access 2017-07-28 19:41:21 +00:00
test-typedarrays.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-types.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-unbound-queue.cc Disable soon to be deprecated APIs per default for v8 2015-12-09 10:35:04 +00:00
test-unboxed-doubles.cc [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-unscopables-hidden-prototype.cc Disable soon to be deprecated APIs per default for v8 2015-12-09 10:35:04 +00:00
test-usecounters.cc [parsing] Add a UseCounter for labeled expression statements 2017-08-04 18:51:54 +00:00
test-utils-arm64.cc Reland of Reland of "ARM64: Add NEON support" 2017-05-31 13:58:43 +00:00
test-utils-arm64.h Reland of Reland of "ARM64: Add NEON support" 2017-05-31 13:58:43 +00:00
test-utils.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-version.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-weakmaps.cc [runtime] Make GetHash and GetOrCreateHash member functions 2017-08-22 00:35:31 +00:00
test-weaksets.cc [runtime] Make GetHash and GetOrCreateHash member functions 2017-08-22 00:35:31 +00:00
testcfg.py [test] Fix deterministic test shards. 2016-03-31 07:38:22 +00:00
trace-extension.cc Expose TickSample and its APIs in v8-profiler.h 2016-07-06 18:40:31 +00:00
trace-extension.h Expose TickSample and its APIs in v8-profiler.h 2016-07-06 18:40:31 +00:00
types-fuzz.h [turbofan] HeapConstant types should compare by handle address 2016-10-08 16:51:53 +00:00
unicode-helpers.h [parser/test] Move cctest/PreParserScopeAnalysis into a new file. 2017-02-07 10:11:01 +00:00