v8/test/cctest
Matt Gardner 32fc0acfef Optimize in operator
This change implements optimizations for the `in` operator for packed array
elements and object properties. It adds a new feedback slot kind and an IC
path similar to KeyedLoadIC for handling the lookups. TurboFan uses the
feedback to optimize based on the maps and keys.

For more details see:
https://docs.google.com/document/d/1tIfzywY8AeNVcy_sen-5Xev21MeZwjcU8QhSdzHvXig

This can provide 10x performance improvements of on loops of the form:

    for (let i = 0; i < ary.length; ++i) {
      if (i in ary) {
        ...
      }
    }


Bug: v8:8733
Change-Id: I766bf865a547a059e5bce5399bb6112e5d9a85c8
Reviewed-on: https://chromium-review.googlesource.com/c/1432598
Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
Reviewed-by: Igor Sheludko <ishell@chromium.org>
Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
Reviewed-by: Toon Verwaest <verwaest@chromium.org>
Commit-Queue: Matt Gardner <magardn@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#59843}
2019-02-25 18:11:14 +00:00
..
compiler [ptr-compr][x64] Change compression scheme to zero upper 32-bits 2019-02-15 15:12:19 +00:00
heap [heap] Relax accessing markbits in ranges. 2019-02-25 15:28:41 +00:00
interpreter Optimize in operator 2019-02-25 18:11:14 +00:00
libplatform [tracing] Fix races in TracingController implementation 2019-02-21 08:34:16 +00:00
libsampler [cpu-profiler] Only record SIGPROF-based samples for samplers that request samples 2019-02-13 09:29:38 +00:00
parsing Fix & reland "[utf8] Rewrite NewStringFromUtf8 using Utf8::ValueOfIncremental" 2019-02-06 13:11:11 +00:00
torque [torque] make overload resolution robust concerning branching contexts 2019-02-15 10:04:36 +00:00
wasm [wasm] Reserve upto maximum for a shared WebAssembly.Memory 2019-02-23 01:59:12 +00:00
assembler-helper-arm.cc [assembler] Remove legacy constructor 2019-01-17 12:39:57 +00:00
assembler-helper-arm.h [ubsan] Port Object to the new design 2018-12-26 20:54:07 +00:00
BUILD.gn [cleanup] Improve dependency handling in gn targets 2019-02-15 21:52:32 +00:00
cctest.cc [api] Accept Extensions via unique_ptr 2019-02-01 07:15:18 +00:00
cctest.h Reland "[test] Add testing facility for SerializerForBackgroundCompilation" 2019-01-29 13:59:42 +00:00
cctest.status [cpu-profiler] Enable CpuProfileDeepStack test 2019-02-25 14:31:37 +00:00
DEPS [torque]: Add the ability to test Torque functionality with cctest 2018-05-13 10:58:56 +00:00
expression-type-collector-macros.h [cleanup] Fix remaining (D)CHECK macro usages 2017-10-18 10:12:31 +00:00
gay-fixed.cc Use nullptr instead of NULL where possible 2017-10-13 17:21:49 +00:00
gay-fixed.h [presubmit] Enable readability/namespace linter checking. 2015-09-30 13:47:11 +00:00
gay-precision.cc Use nullptr instead of NULL where possible 2017-10-13 17:21:49 +00:00
gay-precision.h [presubmit] Enable readability/namespace linter checking. 2015-09-30 13:47:11 +00:00
gay-shortest.cc Use nullptr instead of NULL where possible 2017-10-13 17:21:49 +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 [log] Improve log parsing 2018-06-20 13:40:22 +00:00
OWNERS Add myself to src/libsampler/OWNERS test/cctest/OWNERS 2019-02-14 17:14:27 +00:00
print-extension.cc Use nullptr instead of NULL where possible 2017-10-13 17:21:49 +00:00
print-extension.h [cleanup] Mark test/ methods in subclasses with override. 2018-09-17 07:40:00 +00:00
profiler-extension.cc Reland "[Compile] Ensure we don't access the native context during bytecode finalization." 2018-10-26 22:33:56 +00:00
profiler-extension.h [cleanup] Mark test/ methods in subclasses with override. 2018-09-17 07:40:00 +00:00
scope-test-helper.h [parser] Various Scope and Context speedups 2019-01-28 13:06:03 +00:00
setup-isolate-for-tests.cc [interpreter] Always put bytecode handlers in builtins table 2018-09-20 09:58:15 +00:00
setup-isolate-for-tests.h [interpreter] Always put bytecode handlers in builtins table 2018-09-20 09:58:15 +00:00
test-access-checks.cc Replace CHECK(false) by UNREACHABLE() 2017-12-19 18:58:07 +00:00
test-accessor-assembler.cc [ubsan] Port Map to the new design 2018-11-13 06:59:12 +00:00
test-accessors.cc [ubsan] Port Code to the new design 2018-11-12 18:47:04 +00:00
test-allocation.cc Clean up VirtualMemory allocation 2018-09-17 10:16:38 +00:00
test-api-accessors.cc [cleanup] Replace 0 and NULL with nullptr for test files. 2018-09-14 12:56:00 +00:00
test-api-interceptors.cc Optimize in operator 2019-02-25 18:11:14 +00:00
test-api.cc [wasm] fix wasm atomic wait callback test on BE 2019-02-22 16:02:26 +00:00
test-api.h [ubsan] Replace a few more Object** with alternatives 2018-12-17 14:17:22 +00:00
test-array-list.cc [explicit isolates] Remove GetIsolate from objects.cc 2018-07-13 12:42:14 +00:00
test-assembler-arm64.cc [cleanup][arm64] Replace kPointerSize usages in arm64 ... 2019-02-19 11:02:56 +00:00
test-assembler-arm.cc Cleanup unused dead labels and make Label dtor only available in DEBUG. 2019-02-05 16:26:29 +00:00
test-assembler-ia32.cc [cleanup][ia32] Fix kPointerSize in ia32 builtins 2019-02-15 07:43:09 +00:00
test-assembler-mips64.cc [assembler] Remove legacy constructor 2019-01-17 12:39:57 +00:00
test-assembler-mips.cc [assembler] Remove legacy constructor 2019-01-17 12:39:57 +00:00
test-assembler-ppc.cc Cleanup unused dead labels and make Label dtor only available in DEBUG. 2019-02-05 16:26:29 +00:00
test-assembler-s390.cc PPC/s390: [test] Refactor AllocateAssemblerBuffer 2019-01-17 17:37:32 +00:00
test-assembler-x64.cc [assembler] Remove legacy constructor 2019-01-17 12:39:57 +00:00
test-atomicops.cc Normalize casing of hexadecimal digits 2017-12-02 01:24:40 +00:00
test-bignum-dtoa.cc [jumbo] add test namespaces for cctest 2017-09-21 08:46:16 +00:00
test-bignum.cc Normalize casing of hexadecimal digits 2017-12-02 01:24:40 +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 [cleanup] Mark test/ methods in subclasses with override. 2018-09-17 07:40:00 +00:00
test-code-layout.cc [ppc] Emit the constant pool after handler table generation 2019-02-01 15:19:42 +00:00
test-code-stub-assembler.cc [cleanup] #include heap-inl.h less often 2019-02-15 06:22:53 +00:00
test-compiler.cc [turbofan] Skip arguments adaptor when target cannot observe arguments. 2019-02-25 12:47:36 +00:00
test-constantpool.cc [assembler] Move ConstantPools out of src/assembler.h 2018-10-19 11:38:39 +00:00
test-conversions.cc [objects.h splitting] Move HeapNumber to heap-number.h 2018-12-17 17:58:09 +00:00
test-cpu-profiler.cc [test] Explicitly set --turbo-inlining in a cctest 2019-02-20 16:38:10 +00:00
test-date.cc [Intl] Move cachedOrNewService to C++ w/o caching 2018-11-02 07:08:26 +00:00
test-debug.cc [cleanup] Fix kPointerSize in tests 2019-02-14 15:29:52 +00:00
test-decls.cc [api] Mark SetHiddenPrototype as DEPRECATED 2019-02-08 14:49:30 +00:00
test-deoptimization.cc [deprecation] Deprecate ToBoolean(Local<Context>) 2018-09-24 12:02:09 +00:00
test-dictionary.cc Switch RehashBasedOnMap to use ReadOnlyRoots 2019-02-25 12:28:26 +00:00
test-disasm-arm64.cc Explicitly store the code layout in CodeDesc 2019-01-30 13:17:38 +00:00
test-disasm-arm.cc [assembler] Remove legacy constructor 2019-01-17 12:39:57 +00:00
test-disasm-ia32.cc [logger] Untangle log.h includes 2019-01-22 10:56:52 +00:00
test-disasm-mips64.cc [assembler] Remove legacy constructor 2019-01-17 12:39:57 +00:00
test-disasm-mips.cc [assembler] Remove legacy constructor 2019-01-17 12:39:57 +00:00
test-disasm-ppc.cc PPC/s390: [assembler] Remove legacy constructor 2019-01-17 17:11:57 +00:00
test-disasm-s390.cc PPC/s390: [assembler] Remove legacy constructor 2019-01-17 17:11:57 +00:00
test-disasm-x64.cc [test][x64] Reenable some DisasmX64 test lines. 2019-01-28 15:15:10 +00:00
test-diy-fp.cc Normalize casing of hexadecimal digits 2017-12-02 01:24:40 +00:00
test-double.cc Normalize casing of hexadecimal digits 2017-12-02 01:24:40 +00:00
test-dtoa.cc [jumbo] add test namespaces for cctest 2017-09-21 08:46:16 +00:00
test-elements-kind.cc [objects] Adjust overly aggressive over-allocation. 2019-02-19 06:54:51 +00:00
test-extra.js [js] Remove CORE JS Natives (prologue.js), port extra utils to C++/Torque 2019-01-07 11:57:46 +00:00
test-factory.cc Move CodeDesc to dedicated file 2019-01-30 14:08:59 +00:00
test-fast-dtoa.cc [jumbo] add test namespaces for cctest 2017-09-21 08:46:16 +00:00
test-feedback-vector.cc [ic] Remove FeedbackNexus::StateFromFeedback() in favor of ic_state() 2019-02-13 14:52:48 +00:00
test-feedback-vector.h [objects] Merge SFI outer_scope_info and feedback_metadata 2018-04-06 15:06:04 +00:00
test-field-type-tracking.cc Constant field tracking for arrays. 2019-02-06 14:44:43 +00:00
test-fixed-dtoa.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-flags.cc [nojit] Add a few flag implications based on --jitless 2019-01-15 11:20:19 +00:00
test-func-name-inference.cc [Cleanup] String::GetChars() should take a DisallowHeapAllocation ref. 2018-12-04 16:07:46 +00:00
test-fuzz-arm64.cc Reland "Add Windows ARM64 ABI support to V8" 2018-10-24 19:46:36 +00:00
test-global-handles.cc [cleanup] #include heap-inl.h less often 2019-02-15 06:22:53 +00:00
test-global-object.cc [iwyu] api.h iwyu 2018-07-20 11:49:02 +00:00
test-hashcode.cc Optionally use halfsiphash for integer hashing. 2019-01-09 15:20:51 +00:00
test-hashmap.cc [ubsan] Fix various cases of undefined behavior 2019-01-10 13:52:04 +00:00
test-heap-profiler.cc [cleanup] #include heap-inl.h less often 2019-02-15 06:22:53 +00:00
test-icache.cc [cleanup] Fix kPointerSize in tests 2019-02-14 15:29:52 +00:00
test-identity-map.cc [objects.h splitting] Move HeapNumber to heap-number.h 2018-12-17 17:58:09 +00:00
test-inobject-slack-tracking.cc [objects] Adjust overly aggressive over-allocation. 2019-02-19 06:54:51 +00:00
test-inspector.cc [cleanup] Refactor inspector to use default members. 2018-09-18 09:13:59 +00:00
test-intl.cc Defer inferring language mode as far as possible 2019-01-25 11:53:19 +00:00
test-javascript-arm64.cc [deprecation] Deprecate ToBoolean(Local<Context>) 2018-09-24 12:02:09 +00:00
test-js-arm64-variables.cc [jumbo] arm64 cctest fixes 2017-09-30 17:17:23 +00:00
test-js-weak-refs.cc [js weak refs] Expand WeakCell::WeakCellVerify + minor fix 2019-01-31 16:50:20 +00:00
test-liveedit.cc [cleanup] Replace calls to deprecated String::Concat and ToInt32 from tests. 2018-07-24 17:30:14 +00:00
test-lockers.cc [api] Accept Extensions via unique_ptr 2019-02-01 07:15:18 +00:00
test-log-stack-tracer.cc [logger] Start cleaning up Logger class 2019-01-21 11:53:32 +00:00
test-log.cc [arm] Add missing RELATIVE_CODE_TARGET iteration 2019-01-23 10:45:50 +00:00
test-macro-assembler-arm.cc [cleanup] Remove obsolete representations. 2019-02-21 06:07:06 +00:00
test-macro-assembler-mips64.cc [assembler] Remove legacy constructor 2019-01-17 12:39:57 +00:00
test-macro-assembler-mips.cc MIPS32: Fix failing build 2019-01-17 16:54:49 +00:00
test-macro-assembler-x64.cc [cleanup] Remove obsolete representations. 2019-02-21 06:07:06 +00:00
test-managed.cc Add size estimate to Managed<T> 2018-05-30 10:26:21 +00:00
test-mementos.cc [cleanup] #include heap-inl.h less often 2019-02-15 06:22:53 +00:00
test-modules.cc [api,modules] Allow GetModuleNamespace on unevaluated modules. 2018-01-08 09:01:25 +00:00
test-object.cc [parser] Various Scope and Context speedups 2019-01-28 13:06:03 +00:00
test-orderedhashtable.cc [dict] Add more useful methods 2019-01-07 19:39:34 +00:00
test-parsing.cc [class] Throw error when private name occurs in top level function 2019-02-20 16:16:30 +00:00
test-platform.cc s390: Edited Generate_CEntry to correctly return buffer when built with clang 2018-09-05 07:01:16 +00:00
test-poison-disasm-arm.cc [test] Add type confusion poisoning test for polymorhic access. 2018-10-10 17:57:57 +00:00
test-profile-generator.cc [profiler] Provide line-level info in streaming profiles 2019-02-11 18:11:12 +00:00
test-random-number-generator.cc [cleanup] Fix remaining (D)CHECK macro usages 2017-10-18 10:12:31 +00:00
test-regexp.cc [cleanup] #include heap-inl.h less often 2019-02-15 06:22:53 +00:00
test-representation.cc [cleanup] Remove obsolete representations. 2019-02-21 06:07:06 +00:00
test-roots.cc [cleanup] #include heap-inl.h less often 2019-02-15 06:22:53 +00:00
test-sampler-api.cc [cleanup] Refactor general tests to use default members. 2018-09-14 14:40:47 +00:00
test-serialize.cc [cleanup] #include heap-inl.h less often 2019-02-15 06:22:53 +00:00
test-smi-lexicographic-compare.cc [ubsan] Port Smi to the new design 2018-11-05 20:52:51 +00:00
test-strings.cc [cleanup] #include heap-inl.h less often 2019-02-15 06:22:53 +00:00
test-strtod.cc Normalize casing of hexadecimal digits 2017-12-02 01:24:40 +00:00
test-symbols.cc [cleanup] Remove Isolate parameter from object print 2018-07-12 11:31:57 +00:00
test-sync-primitives-arm64.cc [assembler] Remove legacy constructor 2019-01-17 12:39:57 +00:00
test-sync-primitives-arm.cc [base] Introduce MutexGuard as typedef for LockGuard<Mutex> 2018-10-12 15:44:51 +00:00
test-thread-termination.cc [bigint] Add interrupt checks to slow operations 2019-01-31 20:10:36 +00:00
test-threads.cc [cleanup] Mark test/ methods in subclasses with override. 2018-09-17 07:40:00 +00:00
test-trace-event.cc v8: Prep for removing TRACE_EVENT_SCOPED_CONTEXT. 2019-02-21 14:59:43 +00:00
test-traced-value.cc [tracing] Escape UTF8 strings in JSON compliant form. 2018-10-31 17:46:52 +00:00
test-transitions.cc [cleanup] Move some stuff out of objects-inl.h 2019-02-09 00:34:12 +00:00
test-transitions.h [ubsan] Port Map to the new design 2018-11-13 06:59:12 +00:00
test-typedarrays.cc Remove always-true --harmony-bigint runtime flag 2018-10-01 11:31:13 +00:00
test-types.cc Add target for common test headers 2019-02-12 09:30:01 +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 [cleanup] #include heap-inl.h less often 2019-02-15 06:22:53 +00:00
test-unscopables-hidden-prototype.cc [api] Mark SetHiddenPrototype as DEPRECATED 2019-02-08 14:49:30 +00:00
test-unwinder.cc [cleanup] #include heap-inl.h less often 2019-02-15 06:22:53 +00:00
test-usecounters.cc [counters] remove "override mistake" use counters 2019-01-18 19:27:29 +00:00
test-utils-arm64.cc [iwyu] Ensure that macro assembler includes happen correctly 2018-11-16 15:52:56 +00:00
test-utils-arm64.h [iwyu] Ensure that macro assembler includes happen correctly 2018-11-16 15:52:56 +00:00
test-utils.cc [cleanup] Split off api-inl.h from api.h to make latter self contained 2018-07-23 16:03:49 +00:00
test-version.cc [build] Introduce an embedder version string 2017-10-05 07:17:45 +00:00
test-weakmaps.cc [cleanup] #include heap-inl.h less often 2019-02-15 06:22:53 +00:00
test-weaksets.cc [cleanup] #include heap-inl.h less often 2019-02-15 06:22:53 +00:00
testcfg.py Revert "Preparing v8 to use with python3 /test" 2019-02-20 10:20:59 +00:00
trace-extension.cc [ubsan] Port Smi to the new design 2018-11-05 20:52:51 +00:00
trace-extension.h [cleanup] Mark test/ methods in subclasses with override. 2018-09-17 07:40:00 +00:00
unicode-helpers.cc Fix & reland "[utf8] Rewrite NewStringFromUtf8 using Utf8::ValueOfIncremental" 2019-02-06 13:11:11 +00:00
unicode-helpers.h [Parser] Add support for Zone allocated ConsumedPreParsingScopeData. 2018-09-07 10:28:40 +00:00