v8/test/cctest
Benedikt Meurer 0038e5f05f [async] Improve async function handling.
This change introduces new intrinsics used to desugar async functions
in the Parser and the BytecodeGenerator, namely we introduce a new
%_AsyncFunctionEnter intrinsic that constructs the generator object
for the async function (and in the future will also create the outer
promise for the async function). This generator object is internal
and never escapes to user code, plus since async functions don't have
a "prototype" property, we can just a single map here instead of tracking
the prototype/initial_map on every async function. This saves one word
per async function plus one initial_map per async function that was
invoked at least once.

We also introduce two new intrinsics %_AsyncFunctionReject, which
rejects the outer promise with the caught exception, and another
%_AsyncFunctionResolve, which resolves the outer promise with the
right hand side of the `return` statement. These functions also perform
the DevTools part of the job (aka popping from the promise stack and
sending the debug event). This allows us to get rid of the implicit
try-finally from async functions completely; because the finally
block only called to the %AsyncFunctionPromiseRelease builtin, which
was used to inform DevTools.

In essence we now turn an async function like

```js
async function f(x) { return await bar(x); }
```

into something like this (in Parser and BytecodeGenerator respectively):

```
function f(x) {
  .generator_object = %_AsyncFunctionEnter(.closure, this);
  .promise = %AsyncFunctionCreatePromise();
  try {
    .tmp = await bar(x);
    return %_AsyncFunctionResolve(.promise, .tmp);
  } catch (e) {
    return %_AsyncFunctionReject(.promise, e);
  }
}
```

Overall the bytecode for async functions gets significantly shorter
already (and will get even shorter once we put the outer promise into
the async function generator object). For example the bytecode for a
simple async function

```js
async function f(x) { return await x; }
```

goes from 175 bytes to 110 bytes (a ~38% reduction in size), which
is in particular due to the simplification around the try-finally
removal.

Overall this seems to improve the doxbee-async-es2017-native test by
around 2-3%. On the test case mentioned in v8:8276 we go from
1124ms to 441ms, which corresponds to a 60% reduction in total
execution time!

Tbr: marja@chromium.org
Bug: v8:7253, v8:7522, v8:8276
Cq-Include-Trybots: luci.chromium.try:linux_chromium_headless_rel;luci.chromium.try:linux_chromium_rel_ng;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: Id29dc92de7490b387ff697860c900cee44c9a7a4
Reviewed-on: https://chromium-review.googlesource.com/c/1269041
Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
Reviewed-by: Sathya Gunasekaran <gsathya@chromium.org>
Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
Reviewed-by: Jaroslav Sevcik <jarin@chromium.org>
Reviewed-by: Maya Lekova <mslekova@chromium.org>
Reviewed-by: Yang Guo <yangguo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#56502}
2018-10-10 06:37:53 +00:00
..
compiler [cleanup] Don't declare inline runtime functions by default 2018-10-05 13:10:56 +00:00
heap [cleanup] Split the mutable roots list into immovable and movable 2018-10-10 00:05:11 +00:00
interpreter [async] Improve async function handling. 2018-10-10 06:37:53 +00:00
libplatform [tracing] Custom tag for the traceEvents array 2018-05-07 16:54:59 +00:00
libsampler [cleanup] Refactor general tests to use default members. 2018-09-14 14:40:47 +00:00
parsing [parser] Remove FLAG_preparser_scope_analysis and friends 2018-10-09 09:31:03 +00:00
torque [torque] Allow atomarStatements in otherwise statements 2018-10-08 15:05:51 +00:00
wasm [x64] Wasm SIMD x64 Conversion, AllTrue/AnyTrue operations 2018-09-28 23:38:50 +00:00
assembler-helper-arm.cc [cleanup] Remove Isolate parameter from object print 2018-07-12 11:31:57 +00:00
assembler-helper-arm.h Replace CALL_GENERATED_CODE by GeneratedCode wrapper 2018-01-09 10:33:36 +00:00
BUILD.gn [test] Add type confusion poisoning pattern matching test. 2018-10-09 05:42:50 +00:00
cctest.cc [heap] Remove marking finalization flag 2018-09-19 09:08:35 +00:00
cctest.h [api][cleanup] Mark Call*OnForegroundThread as V8_DEPRECATE_SOON 2018-10-05 08:38:09 +00:00
cctest.status PPC64/s390x: re-enable I64Atomic test on ppc64/s390x 2018-10-05 15:08:23 +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
gay-precision.cc Use nullptr instead of NULL where possible 2017-10-13 17:21:49 +00:00
gay-precision.h
gay-shortest.cc Use nullptr instead of NULL where possible 2017-10-13 17:21:49 +00:00
gay-shortest.h
log-eq-of-logging-and-traversal.js [log] Improve log parsing 2018-06-20 13:40:22 +00:00
OWNERS Update MIPS file ownership to @wavecomp.com e-mail addresses 2018-07-26 16:28:10 +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 Replace CHECK(false) by UNREACHABLE() 2017-12-19 18:58:07 +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] Split building logic out of ProducedPreParserScopeData. 2018-09-07 11:39:58 +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 [in-place weak refs] Replace WeakCells in StubCache. 2018-05-23 14:53:26 +00:00
test-accessors.cc [cleanup] Replace 0 and NULL with nullptr for test files. 2018-09-14 12:56:00 +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 [deprecation] Deprecate ToBoolean(Local<Context>) 2018-09-24 12:02:09 +00:00
test-api.cc Remove always-true --harmony-bigint runtime flag 2018-10-01 11:31:13 +00:00
test-api.h Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +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 Fix compilation issue on native arm64 build. 2018-09-06 17:33:30 +00:00
test-assembler-arm.cc [arm] Eliminate old form of core-scalar vmov instructions. 2018-07-24 17:39:24 +00:00
test-assembler-ia32.cc [cleanup] Remove Isolate parameter from object print 2018-07-12 11:31:57 +00:00
test-assembler-mips64.cc [mips] Port [turbofan] Implement constant folding of string concatenations 2018-09-20 15:15:12 +00:00
test-assembler-mips.cc MIPS[64] Optimize trampoline and long branches. 2018-08-13 11:31:36 +00:00
test-assembler-ppc.cc [cleanup] Remove Isolate parameter from object print 2018-07-12 11:31:57 +00:00
test-assembler-s390.cc s390: Corrections to brxh / brxhg cctests in test-assembler-s390.cc 2018-07-30 20:40:21 +00:00
test-assembler-x64.cc [cleanup] Replace old c-style casts with c++ casts. 2018-09-13 14:48:25 +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 [ubsan] Change Address typedef to uintptr_t 2018-04-14 01:25:28 +00:00
test-code-stub-assembler.cc Refactor integer hashing function names 2018-09-20 11:43:13 +00:00
test-code-stubs-arm64.cc [test] Remove superflous FlushICache calls. 2018-07-31 18:19:42 +00:00
test-code-stubs-arm.cc [test] Remove superflous FlushICache calls. 2018-07-31 18:19:42 +00:00
test-code-stubs-ia32.cc [ia32,root] Use root register config in tests 2018-10-02 15:53:03 +00:00
test-code-stubs-mips64.cc [test] Remove superflous FlushICache calls. 2018-07-31 18:19:42 +00:00
test-code-stubs-mips.cc [test] Remove superflous FlushICache calls. 2018-07-31 18:19:42 +00:00
test-code-stubs-x64.cc Reland "[turboassembler] Introduce hard-abort mode" 2018-07-24 15:58:46 +00:00
test-code-stubs.cc [ubsan] Fix many static_cast<int32_t> with undefined behavior 2018-04-17 02:02:18 +00:00
test-code-stubs.h [cctest] Avoid disallowed "using namespace" directive. 2017-09-01 08:28:36 +00:00
test-compiler.cc Remove always-true --harmony-function-tostring runtime flag 2018-10-03 15:04:16 +00:00
test-constantpool.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-conversions.cc Reland: [cleanup] Refactor the Factory 2018-04-09 19:52:22 +00:00
test-cpu-profiler.cc [cpu-profiler] Use instruction start as the key for the CodeMap 2018-07-27 09:53:00 +00:00
test-date.cc [cleanup] Mark test/ methods in subclasses with override. 2018-09-17 07:40:00 +00:00
test-debug.cc inspector: mark all pauses on promise rejection with proper reason 2018-09-28 15:53:34 +00:00
test-decls.cc [cleanup] Mark test/ methods in subclasses with override. 2018-09-17 07:40:00 +00:00
test-deoptimization.cc [deprecation] Deprecate ToBoolean(Local<Context>) 2018-09-24 12:02:09 +00:00
test-dictionary.cc [ReadOnlyRoots] Make empty_property_dictionary a RO root 2018-10-09 15:15:50 +00:00
test-disasm-arm64.cc [cctest][arm64] Fix debug disassembler test with no simulator. 2018-08-16 08:38:57 +00:00
test-disasm-arm.cc [arm] Implement I64Atomic operations on Arm 2018-08-25 09:59:17 +00:00
test-disasm-ia32.cc [turbofan] Further optimize DataView accesses. 2018-08-14 09:20:47 +00:00
test-disasm-mips64.cc [mips64] Deprecate use of J and JAL instructions 2018-09-13 09:39:21 +00:00
test-disasm-mips.cc [turbofan] Thread through AssemblerOptions 2018-07-06 09:42:00 +00:00
test-disasm-ppc.cc [turbofan] Thread through AssemblerOptions 2018-07-06 09:42:00 +00:00
test-disasm-s390.cc [turbofan] Thread through AssemblerOptions 2018-07-06 09:42:00 +00:00
test-disasm-x64.cc Reland^2 "[Liftoff] Implement f32.copysign and f64.copysign" 2018-09-12 08:33:24 +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 Reland: [iwyu] Remove sfi-inl.h -> wasm include 2018-07-25 14:54:37 +00:00
test-experimental-extra.js
test-extra.js [turbofan] Properly optimize calls to promise extras. 2018-02-16 19:46:30 +00:00
test-fast-dtoa.cc [jumbo] add test namespaces for cctest 2017-09-21 08:46:16 +00:00
test-feedback-vector.cc [Interpreter] Create and use CallNoFeedback bytecode for one-shot code 2018-09-17 11:28:25 +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 Revert "Create a fast path to get migration target when updating map" 2018-09-30 09:29:26 +00:00
test-fixed-dtoa.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-flags.cc [GetIsolate] Remove GetIsolate use in Map 2018-06-25 11:38:37 +00:00
test-func-name-inference.cc [cleanup] Split off api-inl.h from api.h to make latter self contained 2018-07-23 16:03:49 +00:00
test-fuzz-arm64.cc [cleanup] Unify naming of instruction size constant 2018-08-07 12:18:13 +00:00
test-global-handles.cc [cleanup] Split off api-inl.h from api.h to make latter self contained 2018-07-23 16:03:49 +00:00
test-global-object.cc [iwyu] api.h iwyu 2018-07-20 11:49:02 +00:00
test-hashcode.cc [iwyu] api.h iwyu 2018-07-20 11:49:02 +00:00
test-hashmap.cc [cleanup] Fix remaining (D)CHECK macro usages 2017-10-18 10:12:31 +00:00
test-heap-profiler.cc [heap profiler] Refactor: Replace indices with HeapEntry* 2018-10-04 14:15:23 +00:00
test-identity-map.cc [explicit isolates] Convert src/* to ReadOnlyRoots 2018-07-04 10:29:45 +00:00
test-inobject-slack-tracking.cc Remove always-true --harmony-bigint runtime flag 2018-10-01 11:31:13 +00:00
test-inspector.cc [cleanup] Refactor inspector to use default members. 2018-09-18 09:13:59 +00:00
test-intl.cc [Intl] Clean up SupportedLocalesOf and GetAvailableLocales 2018-10-08 19:45:31 +00:00
test-isolate-independent-builtins.cc Reland "[turboassembler] Introduce hard-abort mode" 2018-07-24 15:58:46 +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-liveedit.cc [cleanup] Replace calls to deprecated String::Concat and ToInt32 from tests. 2018-07-24 17:30:14 +00:00
test-lockers.cc [cleanup] Mark test/ methods in subclasses with override. 2018-09-17 07:40:00 +00:00
test-log-stack-tracer.cc [cleanup] Split off api-inl.h from api.h to make latter self contained 2018-07-23 16:03:49 +00:00
test-log.cc Revert "[turbofan] Do not consume SignedSmall feedback in TurboFan anymore." 2018-10-07 10:19:01 +00:00
test-macro-assembler-arm.cc Reland "[turboassembler] Introduce hard-abort mode" 2018-07-24 15:58:46 +00:00
test-macro-assembler-mips64.cc [cleanup] Move enum Heap::RootListIndex to enum class RootIndex 2018-09-20 11:16:05 +00:00
test-macro-assembler-mips.cc [cleanup] Move enum Heap::RootListIndex to enum class RootIndex 2018-09-20 11:16:05 +00:00
test-macro-assembler-x64.cc Reland "[turboassembler] Introduce hard-abort mode" 2018-07-24 15:58:46 +00:00
test-managed.cc Add size estimate to Managed<T> 2018-05-30 10:26:21 +00:00
test-mementos.cc [heap] Remove support for aborting incremental marking 2018-09-17 10:44:52 +00:00
test-modules.cc [api,modules] Allow GetModuleNamespace on unevaluated modules. 2018-01-08 09:01:25 +00:00
test-object.cc [cleanup] Split off api-inl.h from api.h to make latter self contained 2018-07-23 16:03:49 +00:00
test-orderedhashtable.cc [GetIsolate] Remove (most) GetIsolate from src/objects-debug.cc 2018-06-21 16:34:27 +00:00
test-parsing.cc [parser] Remove FLAG_preparser_scope_analysis and friends 2018-10-09 09:31:03 +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 pattern matching test. 2018-10-09 05:42:50 +00:00
test-profile-generator.cc [cpu-profiler] Use instruction start as the key for the CodeMap 2018-07-27 09:53:00 +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 parsing: Lock ExternalStrings in the ExternalStringStream. 2018-09-04 14:09:04 +00:00
test-representation.cc Start preparing test/cctest for jumbo compilation 2017-08-14 20:58:10 +00:00
test-roots.cc [cleanup] Split the mutable roots list into immovable and movable 2018-10-10 00:05:11 +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 Reland "[snapshot] add checksum to startup snapshot" 2018-09-25 19:18:23 +00:00
test-smi-lexicographic-compare.cc [array] Use CallCFunction3 for SmiLexicographicCompare 2018-09-05 10:13:25 +00:00
test-strings.cc [esnext] Add cctests for well-formed JSON.stringify 2018-10-03 09:53:19 +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 Reland: [cleanup] Refactor the Factory 2018-04-09 19:52:22 +00:00
test-sync-primitives-arm.cc Reland: [cleanup] Refactor the Factory 2018-04-09 19:52:22 +00:00
test-thread-termination.cc [cleanup] Mark test/ methods in subclasses with override. 2018-09-17 07:40:00 +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 [deprecation] Deprecate ToBoolean(Local<Context>) 2018-09-24 12:02:09 +00:00
test-traced-value.cc Avoid octal escape sequences 2017-12-01 15:08:14 +00:00
test-transitions.cc [cleanup] Remove Isolate parameter from object print 2018-07-12 11:31:57 +00:00
test-transitions.h [explicit isolates] Eliminate GetIsolate from transitions.cc 2018-06-05 11:00:43 +00:00
test-typedarrays.cc Remove always-true --harmony-bigint runtime flag 2018-10-01 11:31:13 +00:00
test-types.cc [turbofan] Put some tests under a canonical handle scope. 2018-07-31 18:20:53 +00:00
test-unbound-queue.cc
test-unboxed-doubles.cc [cleanup] Split off api-inl.h from api.h to make latter self contained 2018-07-23 16:03:49 +00:00
test-unscopables-hidden-prototype.cc
test-usecounters.cc [Atomics] Add use counter for Atomics.{wake, notify} 2018-09-20 21:31:33 +00:00
test-utils-arm64.cc [arm64] Remove remaining instances of csp 2018-01-18 18:07:18 +00:00
test-utils-arm64.h [arm64] Remove remaining instances of csp 2018-01-18 18:07:18 +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 [heap] Remove support for aborting incremental marking 2018-09-17 10:44:52 +00:00
test-weaksets.cc [heap] Remove support for aborting incremental marking 2018-09-17 10:44:52 +00:00
testcfg.py [test] Add non-d8 test suites to Android testing 2018-09-11 11:12:21 +00:00
trace-extension.cc [ptr-compr] Support 31-bit Smis in lower half-word on 64-bit architectures. 2018-06-05 11:37:35 +00:00
trace-extension.h [cleanup] Mark test/ methods in subclasses with override. 2018-09-17 07:40:00 +00:00
types-fuzz.h [turbofan] Prepare broker for serialization. 2018-07-23 17:20:49 +00:00
unicode-helpers.cc [Parser] Add support for Zone allocated ConsumedPreParsingScopeData. 2018-09-07 10:28:40 +00:00
unicode-helpers.h [Parser] Add support for Zone allocated ConsumedPreParsingScopeData. 2018-09-07 10:28:40 +00:00