- 20 Feb, 2018 2 commits
-
-
Yang Guo authored
R=bmeurer@chromium.org Bug: v8:7421 Change-Id: Iacdd8d294c02b7feb72e3a0bb397930e91197ae7 Reviewed-on: https://chromium-review.googlesource.com/926124 Commit-Queue: Yang Guo <yangguo@chromium.org> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#51391}
-
Benedikt Meurer authored
There's no need to have the AsyncFunctionAwait/AsyncGeneratorAwait operations as separate closures that are called via JavaScript calling convention, but instead we can just have them as intrinsics (with the goal to eventually turn them into IC stubs). Drive-by-fix: Tail call to the ResumeGenerator builtin when resuming an async function. The earlier restrictions no only apply with the new machinery. Bug: v8:7253 Change-Id: I0c4d04dae15b4211158fc07151adafda69d4faec Reviewed-on: https://chromium-review.googlesource.com/924703Reviewed-by:
Yang Guo <yangguo@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#51382}
-
- 19 Feb, 2018 2 commits
-
-
Peter Marshall authored
Factor out IterableToList into a helper stub to save space. There are two callers now, TypedArrayFrom and ConstructByIterable, and it is ~2.5kb so we save space by doing this. Increase test coverage to cover more of the branching in CSA. This is doesn't follow the control flow in the spec exactly - see the big code comment for an explanation. Change-Id: Ief39e93c4202cb7bf0e28a39dc6aa81b8b9c59d2 Reviewed-on: https://chromium-review.googlesource.com/908755 Commit-Queue: Peter Marshall <petermarshall@chromium.org> Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/master@{#51377}
-
Jakob Kummerow authored
This is a reland of dda0419e. Originally reviewed-on: https://chromium-review.googlesource.com/914513 and landed as refs/heads/master@{#51342}. Bug: v8:6791 Change-Id: I3b3a069da7a0e64c38a81b3110dc5ece4887cb19 Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng Reviewed-on: https://chromium-review.googlesource.com/924665Reviewed-by:
Georg Neis <neis@chromium.org> Commit-Queue: Georg Neis <neis@chromium.org> Cr-Commit-Position: refs/heads/master@{#51352}
-
- 17 Feb, 2018 2 commits
-
-
Michael Achenbach authored
This reverts commit dda0419e. Reason for revert: msvc unhappy: https://build.chromium.org/p/client.v8/builders/V8%20Win64%20-%20msvc/builds/1434 Original change's description: > [bigint] Add BigInt64Array, BigUint64Array > > Bug: v8:6791 > Tbr: hpayer@chromium.org > Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng > Change-Id: I637e9084d2fe4869ad0be2fb996149ab9940f346 > Reviewed-on: https://chromium-review.googlesource.com/914513 > Commit-Queue: Jakob Kummerow <jkummerow@chromium.org> > Reviewed-by: Georg Neis <neis@chromium.org> > Cr-Commit-Position: refs/heads/master@{#51342} TBR=jkummerow@chromium.org,neis@chromium.org,hpayer@chromium.org Change-Id: I49237fa323f0d3ea70e744d92d5cbdd4d5c4b39f No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: v8:6791 Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng Reviewed-on: https://chromium-review.googlesource.com/924663Reviewed-by:
Michael Achenbach <machenbach@chromium.org> Commit-Queue: Michael Achenbach <machenbach@chromium.org> Cr-Commit-Position: refs/heads/master@{#51344}
-
Jakob Kummerow authored
Bug: v8:6791 Tbr: hpayer@chromium.org Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng Change-Id: I637e9084d2fe4869ad0be2fb996149ab9940f346 Reviewed-on: https://chromium-review.googlesource.com/914513 Commit-Queue: Jakob Kummerow <jkummerow@chromium.org> Reviewed-by:
Georg Neis <neis@chromium.org> Cr-Commit-Position: refs/heads/master@{#51342}
-
- 16 Feb, 2018 1 commit
-
-
Benedikt Meurer authored
The ES2017 specification contains a so-called "throwaway" promise that is used to specify the behavior of await in terms of PerformPromiseThen, but it's actually not necessary and never exposed to user code. In addition to that, hooking up the promise in await required a context (to refer to the generator object) and two closures for the reject/fulfill handling, which would resume the generator corresponding to the async function. That meant, we had to allocate 4 additional objects for every await. Instead of using a JSPromise plus the callbacks, this CL adds logic to allow PromiseReaction and PromiseReactionJobTask to carry arbitrary payloads and Code handlers. We use this for await to avoid the additional 4 objects mentioned above, and instead just have simple Code handlers that resume the generator (for the async function), either by throwing (in case of a rejection) or by resuming normally (in case of fulfillment). For this to work properly the JSGeneratorObject has to have a link to the outer promise returned by the async function, so that the catch prediction can still figure out what to do in case of promise rejection. This is done by adding a new generator_outer_promise_symbol when the debugger is active, which refers from the generator to the outer promise. With this change the doxbee-async-es2017-native test goes from around 100.54ms to around 82.45ms, which corresponds to a ~18% reduction in execution time. Bug: v8:7253 Change-Id: Iae25b3300bac351c3417be5ae687eff469b0e61f Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng Reviewed-on: https://chromium-review.googlesource.com/924069Reviewed-by:
Yang Guo <yangguo@chromium.org> Reviewed-by:
Sathya Gunasekaran <gsathya@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#51334}
-
- 15 Feb, 2018 2 commits
-
-
Georg Neis authored
This is a reland of af677f29, fixing an issue with negative indices. Original change's description: > [ic] EmitElementStore: don't miss when hitting new space limit. > > CSA::EmitElementStore used to bail out (IC miss) via > CSA::CheckForCapacityGrow when the capacity hits the new space > limit, causing the store IC to go megamorphic in my example (see > referenced bug). With this CL, we do what TF'ed code does already: > call into Runtime::kGrowArrayElements (in this situation), thus > staying monomorphic. > > Here's a contrived test case: > > //////////////////////// > let x = []; > > function bar() { > for (let i = 0; i < 50000; ++i) x[i] = i; > } > > function foo() { > for (let i = x.length; i < 100e6; ++i) x[i] = i; > } > > bar(); > foo(); > //////////////////////// > > This took about 4s on my machine, now it takes 3s. > > Bug: v8:7447 > Change-Id: I7f268fc55835f363d250613ce0357444a663051c > Reviewed-on: https://chromium-review.googlesource.com/918723 > Commit-Queue: Georg Neis <neis@chromium.org> > Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> > Cr-Commit-Position: refs/heads/master@{#51297} Bug: v8:7447, chromium:812451 Change-Id: I345b5e5b2437c4f50e42bbd87947630f24cd95eb Reviewed-on: https://chromium-review.googlesource.com/921201 Commit-Queue: Georg Neis <neis@chromium.org> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#51311}
-
Toon Verwaest authored
instance_class_name takes up space unnecessarily, and %_ClassOf and class_name implement [[Class]] which isn't part of ES2015+ anymore. Bug: Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng Change-Id: I3a73f732ad83a616817fde9992f4e4d584638fa8 Reviewed-on: https://chromium-review.googlesource.com/776683Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Commit-Queue: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#51309}
-
- 13 Feb, 2018 2 commits
-
-
Sigurd Schneider authored
This is a reland of 6d5b54df82e27a82811a836dcdbbfe26829f0e6d Original change's description: > [cleanup] Harden the SubString CSA/Runtime implementations. > > Remove the self-healing for invalid parameters in the > CodeStubAssembler::SubString helper and the %SubString runtime function, > which is used as a fallback for the CodeStubAssembler implementation. > All call sites must do appropriate parameter validation anyways now that > the self-hosted JavaScript builtins using these helpers are gone, and we > have proper contracts with the uses. > > Also remove the context parameter from the CodeStubAssembler::SubString > method, which is unnecessary, since this can no longer throw an > exception. > > Bug: v8:5269, v8:6936, v8:7109, v8:7137 > Change-Id: I19d93bad5f41faa0561c4561a48f78fcba99a549 > Reviewed-on: https://chromium-review.googlesource.com/795720 > Reviewed-by: Jakob Gruber <jgruber@chromium.org> > Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> > Cr-Commit-Position: refs/heads/master@{#49702} Bug: v8:5269, v8:6936, v8:7109, v8:7137 Change-Id: I5e84998a2dd3990d7981505b401ffc770e0b7ac5 Reviewed-on: https://chromium-review.googlesource.com/913130Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Commit-Queue: Sigurd Schneider <sigurds@chromium.org> Cr-Commit-Position: refs/heads/master@{#51265}
-
Benedikt Meurer authored
This introduces dedicated builtins - FulfillPromise, - RejectPromise, and - ResolvePromise, which perform the corresponding operations from the language specification, and removes the redundant entry points and the excessive inlining of these operations into other builtins. We also add the same logic on the C++ side, so that we don't need to go into JavaScript land when resolving/rejecting from the API. The C++ side has a complete implementation, including full support for the debugger and the current PromiseHook machinery. This is to avoid constantly crossing the boundary for those cases, and to also simplify the CSA side (and soon the TurboFan side), where we only do the fast-path and bail out to the runtime for the general handling. On top of this we introduce %_RejectPromise and %_ResolvePromise, which are entry points used by the bytecode and parser desugarings for async functions, and also used by the V8 Extras API. Thanks to this we can uniformly optimize these in TurboFan, where we have corresponding operators JSRejectPromise and JSResolvePromise, which currently just call into the builtins, but middle-term can be further optimized, i.e. to skip the "then" lookup for JSResolvePromise when we know something about the resolution. In TurboFan we can also already inline the default PromiseCapability [[Reject]] and [[Resolve]] functions, although this is not as effective as it can be right now, until we have inlining support for the Promise constructor (being worked on by petermarshall@ right now) and/or SFI based CALL_IC feedback. Overall this change is meant as a refactoring without significant performance impact anywhere; it seems to improve performance of simple async functions a bit, but otherwise is neutral. Bug: v8:7253 Change-Id: Id0b979f9b2843560e38cd8df4b02627dad4b6d8c Reviewed-on: https://chromium-review.googlesource.com/911632Reviewed-by:
Sathya Gunasekaran <gsathya@chromium.org> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Georg Neis <neis@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#51260}
-
- 12 Feb, 2018 1 commit
-
-
Caitlin Potter authored
Implements the change outlined in https://github.com/tc39/ecma262/pull/890, which has been ratified and pulled into the specification. In particular, template callsite objects are no longer kept in a global, eternal Map, but are instead associated with their callsite, which can be collected. This prevents a memory leak incurred by TaggedTemplate calls. Changes, summarized: - Remove the TemplateMap and TemplateMapShape objects, instead caching template objects in the feedback vector. - Remove the `hash` member of TemplateObjectDescriptor, and the Equals method (used by TemplateMap) - Add a new FeedbackSlotKind (kTemplateObject), which behaves similarly to FeedbackSlotKind::kLiteral, but prevents eval caching. This ensures that a new feedback vector is always created for eval() containing tagged templates, even when the CompilationCache is used. - GetTemplateObject bytecode now takes a feedback index, and only calls into the runtime if the feedback is Smi::kZero (uninitialized). BUG=v8:3230, v8:2891 R=littledan@chromium.org, yangguo@chromium.org, bmeurer@chromium.org, rmcilroy@chromium.org Cq-Include-Trybots: luci.v8.try:v8_linux_noi18n_rel_ng Change-Id: I7827bc148d3d93e2b056ebf63dd624da196ad423 Reviewed-on: https://chromium-review.googlesource.com/624564 Commit-Queue: Caitlin Potter <caitp@igalia.com> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Ross McIlroy <rmcilroy@chromium.org> Cr-Commit-Position: refs/heads/master@{#51248}
-
- 08 Feb, 2018 3 commits
-
-
Sathya Gunasekaran authored
PromiseHooks can be called with a proxy which fails the cast and crashes. This patch changes the runtime functions to explicitly check for a JSPromise. This has the side effect of removing the existing broken support for catch prediction for non native promises. Bug: v8:7398, v8:7190 Change-Id: I66dbe5f9935943a91afb7ee14919bd9248f9f7e4 Reviewed-on: https://chromium-review.googlesource.com/907677Reviewed-by:
Aleksey Kozyatinskiy <kozyatinskiy@chromium.org> Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Commit-Queue: Sathya Gunasekaran <gsathya@chromium.org> Cr-Commit-Position: refs/heads/master@{#51182}
-
Adam Klein authored
This reverts commit 14108f4c. Reason for revert: Not the culprit for Canary microtask crashes Original change's description: > [builtins] Mega-revert to address the Dev blocker in crbug.com/808911. > > - Revert "[builtins] Save one word in contexts for Promise.all." > This reverts commit 7632da06. > - Revert "[builtins] Also use the Promise#then protector for Promise#finally()." > This reverts commit d4f072ce. > - Revert "[builtins] Don't mess with entered context for MicrotaskCallbacks." > This reverts commit 6703dacd. > - Revert "[debugger] Properly deal with settled promises in catch prediction." > This reverts commit 40dd0658. > - Revert "[builtins] Widen the fast-path for Promise builtins." > This reverts commit db0556b7. > - Revert "[builtins] Unify PerformPromiseThen and optimize it with TurboFan." > This reverts commit a582199c. > - Revert "[builtins] Remove obsolete PromiseBuiltinsAssembler::AppendPromiseCallback." > This reverts commit 6bf88852. > - Revert "[builtins] Turn NewPromiseCapability into a proper builtin." > This reverts commit 313b490d. > - Revert "[builtins] Inline InternalPromiseThen into it's only caller" > This reverts commit f7bd6a2f. > - Revert "[builtins] Implement Promise#catch by really calling into Promise#then." > This reverts commit b23b098f. > - Revert "[promise] Remove incorrect fast path" > This reverts commit 0f6eafe8. > - Revert "[builtins] Squeeze JSPromise::result and JSPromise::reactions into a single field." > This reverts commit 8a677a28. > - Revert "[builtins] Refactor promises to reduce GC overhead." > This reverts commit 8e7737cb. > > Tbr: hpayer@chromium.org > Bug: chromium:800651, chromium:808911, v8:5691, v8:7253 > Change-Id: I8c8ea5ed32ed62f6cd8b0d027a3707ddd891e5f1 > Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng > Reviewed-on: https://chromium-review.googlesource.com/906991 > Commit-Queue: Yang Guo <yangguo@chromium.org> > Commit-Queue: Adam Klein <adamk@chromium.org> > Reviewed-by: Adam Klein <adamk@chromium.org> > Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> > Cr-Commit-Position: refs/heads/master@{#51158} Change-Id: I09d958cbebd635a325809072a290f2f53df8c5d4 Tbr: adamk@chromium.org,yangguo@chromium.org,bmeurer@chromium.org Bug: chromium:800651, chromium:808911, v8:5691, v8:7253 Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng Reviewed-on: https://chromium-review.googlesource.com/908988Reviewed-by:
Adam Klein <adamk@chromium.org> Commit-Queue: Adam Klein <adamk@chromium.org> Cr-Commit-Position: refs/heads/master@{#51181}
-
Taketoshi Aono authored
Original CL is https://chromium-review.googlesource.com/c/v8/v8/+/810504 Reverted issue is https://bugs.chromium.org/p/chromium/issues/detail?id=804159 Fix Object.entries descriptor array value index. This reverts commit e5ecb248. Bug: v8:6804, chromium:804159 Change-Id: I73a5a5f670c5b36e0c5cc7984d5979ecec43d969 Reviewed-on: https://chromium-review.googlesource.com/892684 Commit-Queue: Camillo Bruni <cbruni@chromium.org> Reviewed-by:
Camillo Bruni <cbruni@chromium.org> Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/master@{#51170}
-
- 07 Feb, 2018 5 commits
-
-
Benedikt Meurer authored
- Revert "[builtins] Save one word in contexts for Promise.all." This reverts commit 7632da06. - Revert "[builtins] Also use the Promise#then protector for Promise#finally()." This reverts commit d4f072ce. - Revert "[builtins] Don't mess with entered context for MicrotaskCallbacks." This reverts commit 6703dacd. - Revert "[debugger] Properly deal with settled promises in catch prediction." This reverts commit 40dd0658. - Revert "[builtins] Widen the fast-path for Promise builtins." This reverts commit db0556b7. - Revert "[builtins] Unify PerformPromiseThen and optimize it with TurboFan." This reverts commit a582199c. - Revert "[builtins] Remove obsolete PromiseBuiltinsAssembler::AppendPromiseCallback." This reverts commit 6bf88852. - Revert "[builtins] Turn NewPromiseCapability into a proper builtin." This reverts commit 313b490d. - Revert "[builtins] Inline InternalPromiseThen into it's only caller" This reverts commit f7bd6a2f. - Revert "[builtins] Implement Promise#catch by really calling into Promise#then." This reverts commit b23b098f. - Revert "[promise] Remove incorrect fast path" This reverts commit 0f6eafe8. - Revert "[builtins] Squeeze JSPromise::result and JSPromise::reactions into a single field." This reverts commit 8a677a28. - Revert "[builtins] Refactor promises to reduce GC overhead." This reverts commit 8e7737cb. Tbr: hpayer@chromium.org Bug: chromium:800651, chromium:808911, v8:5691, v8:7253 Change-Id: I8c8ea5ed32ed62f6cd8b0d027a3707ddd891e5f1 Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng Reviewed-on: https://chromium-review.googlesource.com/906991 Commit-Queue: Yang Guo <yangguo@chromium.org> Commit-Queue: Adam Klein <adamk@chromium.org> Reviewed-by:
Adam Klein <adamk@chromium.org> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#51158}
-
Yang Guo authored
We reuse most of the infrastructure to set break points, with minor differences when we encounter functions where we can only break on entry: - PrepareFunctionForBreakPoints simply deopts all functions. - Break point objects have the canonical source position 0. - Break point is set/checked/cleared via bit on the DebugInfo. - Debug::Break do not continue stepping since stepping is implemented via regular break points and therefore do not interfere with break on entry. I promise to add more tests. Bug: v8:178 Change-Id: Ifc8231995c771286db0b848b811e1c3ad3b12494 Reviewed-on: https://chromium-review.googlesource.com/906245 Commit-Queue: Yang Guo <yangguo@chromium.org> Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/master@{#51152}
-
Peter Marshall authored
Cleanup CL that removes unnecessary builtins that were just wrapping the throwing of errors. Use the ThrowTypeError and ThrowRangeError helpers more consistently from CSA. Change-Id: I2d0c3647340c88c457b27e16c0a81567869b7ec7 Reviewed-on: https://chromium-review.googlesource.com/906769 Commit-Queue: Peter Marshall <petermarshall@chromium.org> Reviewed-by:
Franziska Hinkelmann <franzih@chromium.org> Cr-Commit-Position: refs/heads/master@{#51150}
-
Peter Marshall authored
We don't need these wrappers - we can just use ThrowTypeError from CSA instead. There were also a bunch of unused runtime functions which we can just delete. This CL has no behavior changes. Change-Id: I5efefd726aff4cca8e8feba6cd05fe8ff5663931 Reviewed-on: https://chromium-review.googlesource.com/906470Reviewed-by:
Franziska Hinkelmann <franzih@chromium.org> Commit-Queue: Peter Marshall <petermarshall@chromium.org> Cr-Commit-Position: refs/heads/master@{#51144}
-
Peter Marshall authored
Move the class declaration for SpeciesCreateByLength to a header file so that we can share more TypedArray CSA code. Delete the C++ implementation of species create for typed arrays because it is no longer used. Change-Id: I7c43b8ef144ba9a8ce12516f7cb8fb570491cb26 Reviewed-on: https://chromium-review.googlesource.com/904987Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Commit-Queue: Peter Marshall <petermarshall@chromium.org> Cr-Commit-Position: refs/heads/master@{#51139}
-
- 05 Feb, 2018 1 commit
-
-
Andreas Haas authored
The test required a special runtime function, which did not work in general but only in the context of that one test. After an offline discussion we decided that what the test is testing is not worth a runtime function, since we would also see in other tests if something goes wrong. R=clemensh@chromium.org Bug: v8:7403 Change-Id: I129a189a9df299d409a4a555eae28783e47b97d1 Reviewed-on: https://chromium-review.googlesource.com/901284Reviewed-by:
Clemens Hammacher <clemensh@chromium.org> Commit-Queue: Andreas Haas <ahaas@chromium.org> Cr-Commit-Position: refs/heads/master@{#51095}
-
- 02 Feb, 2018 1 commit
-
-
Caitlin Potter authored
A version of the spec change from https://github.com/tc39/ecma262/pull/988, but applied to the Async-from-Sync iterator type. This change does not modify generated bytecode (but maybe it should to take advantage of load IC feedback for loading "next"). Doing this grows bytecode by quite a bit, since it's necessary to throw-if-not-an-object before loading "next" (which currently gets to live in a code stub instead). BUG=v8:5855 Cq-Include-Trybots: luci.v8.try:v8_linux_noi18n_rel_ng Change-Id: I0d2affef664d1069b24c54a553d62e17b49e5a16 Reviewed-on: https://chromium-review.googlesource.com/723136 Commit-Queue: Caitlin Potter <caitp@igalia.com> Reviewed-by:
Ross McIlroy <rmcilroy@chromium.org> Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/master@{#51078}
-
- 01 Feb, 2018 1 commit
-
-
Michaël Zasso authored
See https://chromium-review.googlesource.com/c/v8/v8/+/869932 Bug: v8:6972 Change-Id: I012210a31265adb7f7038a9b447f24e2d40ebca7 Reviewed-on: https://chromium-review.googlesource.com/895762Reviewed-by:
Franziska Hinkelmann <franzih@chromium.org> Reviewed-by:
Michael Achenbach <machenbach@chromium.org> Commit-Queue: Franziska Hinkelmann <franzih@chromium.org> Cr-Commit-Position: refs/heads/master@{#51022}
-
- 31 Jan, 2018 4 commits
-
-
Benedikt Meurer authored
A given JSPromise can either be in pending state, and accumulates reactions, or in settled state, where all reactions are scheduled as microtasks, and it carries a result. So we can use a single field on the JSPromise instance to hold both the result and the reactions and that field is interpreted differently depending on the status of the JSPromise. Bug: v8:7253 Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng Change-Id: I19a7d499c88f452f0d35979ab95deb110021cde9 Reviewed-on: https://chromium-review.googlesource.com/895528Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Yang Guo <yangguo@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#51004}
-
Mike Stanton authored
The FeedbackNexus classes initially were one-to-one with IC classes, but over time this got out of date. We also found Nexus' useful, so we made more classes even for cases that weren't ICs. The inheritence and polymorphism became confusing and led to duplication. Better, to just talk about a (single) FeedbackNexus. Bug: v8:7344 Change-Id: I509dc9657895d56c3859de6e6589695cdff9e73e Reviewed-on: https://chromium-review.googlesource.com/890452 Commit-Queue: Michael Stanton <mvstanton@chromium.org> Reviewed-by:
Franziska Hinkelmann <franzih@chromium.org> Reviewed-by:
Michael Starzinger <mstarzinger@chromium.org> Reviewed-by:
Igor Sheludko <ishell@chromium.org> Cr-Commit-Position: refs/heads/master@{#50997}
-
Benedikt Meurer authored
This implements the ideas outlined in the section "Microtask queue" of the exploration document "Promise and async/await performance" (at https://goo.gl/WHRar2), except that the microtask queue stays a linear FixedArray for now, to avoid running into trouble with the parallel scavenger. This way we can already save a significant amount of allocations, thereby reducing the GC frequency quite a bit. All items on the microtask queue are now proper structs that subclass Microtask, i.e. we also wrap JSFunction and MicrotaskCallback jobs into structs. We also consistently remember the context for every microtask (except for MicrotaskCallback where we don't have a context), and execute it later in exactly that context (as required by the spec anyways for the Promise related jobs). Particularly interesting is the PromiseReactionJobTask and its subclasses, since they are designed to have the same size as the PromiseReaction. When we resolve a JSPromise we just take the existing PromiseReaction instances and morph them into PromiseFulfillReactionJobTask or PromiseRejectReactionJobTask (depending whether you "Fulfill" or "Reject"). That way the JSPromise class is now only 6 words instead of 10 words. Also the PromiseReaction and the reaction tasks can either carry a JSPromise (for the fast native case) or a PromiseCapability (for the generic case), which means we don't always pay the overhead of having to also remember the "deferred resolve" and "deferred reject" handlers that are only relevant for the generic case anyways. It also fixes a spec violation where we called "then" before we actually enqueued the PromiseResolveThenableJob, which is observably wrong. Calling it later has the advantage that it should be fairly straight-forward now to completely avoid it for native Promise instances. This seems to save around 10-20% on the various Promise benchmarks and micro-benchmarks. We expect to gain even more as we're now able to inline various operations into TurboFan optimized code easily. Bug: v8:7253 Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng Change-Id: I893d24ca5bb046974b4f5826a8f6dd22f1210b6a Reviewed-on: https://chromium-review.googlesource.com/892819 Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Sathya Gunasekaran <gsathya@chromium.org> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#50980}
-
Georg Neis authored
Async generators didn't correctly handle the situation where one calls .return on a suspended-at-start async generator and passes a promise-like object whose awaiting causes a new request to the generator. Bug: chromium:805729 Change-Id: I4da13ab5bd97f8c2a2c5373242a2d5e2ab0f7f10 Reviewed-on: https://chromium-review.googlesource.com/891231Reviewed-by:
Caitlin Potter <caitp@igalia.com> Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Georg Neis <neis@chromium.org> Cr-Commit-Position: refs/heads/master@{#50974}
-
- 30 Jan, 2018 2 commits
-
-
jgruber authored
Some tests need to ensure all builtins are deserialized. This adds a helper to make that easier. Drive-by-refactoring: Centralize lazy-deserialization tracing. TBR=rmcilroy@chromium.org Bug: v8:6624 Change-Id: I1f7caa6c539b12aabcba5b7b28c50ad40355848b Reviewed-on: https://chromium-review.googlesource.com/891822 Commit-Queue: Jakob Gruber <jgruber@chromium.org> Reviewed-by:
Yang Guo <yangguo@chromium.org> Cr-Commit-Position: refs/heads/master@{#50959}
-
Choongwoo Han authored
- Port TypedArray.prototype.slice to CSA - Implement TypedArraySpeciesCreateByLength as a CSA - Fix spec bugs: Throw if a source typed array is neutered after creating a result typed array Bug: v8:5929 Cq-Include-Trybots: luci.v8.try:v8_linux_noi18n_rel_ng Change-Id: Ia7ce2239d37db6db172c00aa120ef51c31a14bac Reviewed-on: https://chromium-review.googlesource.com/830991 Commit-Queue: Jakob Gruber <jgruber@chromium.org> Commit-Queue: Peter Marshall <petermarshall@chromium.org> Reviewed-by:
Peter Marshall <petermarshall@chromium.org> Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/master@{#50952}
-
- 29 Jan, 2018 3 commits
-
-
Sathya Gunasekaran authored
Things that don't work yet: (a) pre parsed scope data is broken (b) private fields can be accessed outside classes (c) no early or runtime error for accessing unknown fields Things that do work: everything else Change-Id: I3d58be44e2be73ec50defb42403112a8a5e68c54 Bug: v8:5368 Reviewed-on: https://chromium-review.googlesource.com/865497 Commit-Queue: Sathya Gunasekaran <gsathya@chromium.org> Reviewed-by:
Georg Neis <neis@chromium.org> Reviewed-by:
Mythri Alle <mythria@chromium.org> Cr-Commit-Position: refs/heads/master@{#50935}
-
Benedikt Meurer authored
This adjusts the RunMicrotask logic to invoke CallHandlerInfo microtasks from CSA land directly (via a runtime function call), instead of bailing out to C++ for the rest of the microtask queue entries. Even in simple micro-benchmarks there doesn't seem to be a huge performance difference. In fact performance get's better when CallHandlerInfo and promises are mixed, which makes sense, since calling from C++ to JS land is more expensive than the other way around. But just in case the runtime function call overhead ever becomes the bottleneck we can introduce a direct C++ call and setup a handle scope around it, much like a very simple version of CallApiFunctionStub. This greatly simplifies the microtask handling and paves the way for refactoring the queue to significant reduce the GC overhead associated with promises currently. Bug: v8:7253 Change-Id: I33adb62a6bada138674d324f36d4be894e27f3c9 Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng Reviewed-on: https://chromium-review.googlesource.com/890441Reviewed-by:
Michael Starzinger <mstarzinger@chromium.org> Reviewed-by:
Sathya Gunasekaran <gsathya@chromium.org> Reviewed-by:
Yang Guo <yangguo@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#50934}
-
Ross McIlroy authored
BUG=chromium:798964 Change-Id: I63c373ef3f27a3295fc79f5c82d78b5fd89a83da Reviewed-on: https://chromium-review.googlesource.com/888752 Commit-Queue: Ross McIlroy <rmcilroy@chromium.org> Reviewed-by:
Michael Starzinger <mstarzinger@chromium.org> Cr-Commit-Position: refs/heads/master@{#50925}
-
- 24 Jan, 2018 2 commits
-
-
Benedikt Meurer authored
Refactor the PromiseHandle builtin and move the separate debug checks into the PromiseHookBefore and PromiseHookAfter runtime calls, so they are performed only when we've already hit the slow-path. Bug: v8:7253 Change-Id: I01ab8592a474b6897280734b995cab0b90a5e010 Reviewed-on: https://chromium-review.googlesource.com/884583Reviewed-by:
Sathya Gunasekaran <gsathya@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#50856}
-
Leszek Swirski authored
The SwitchOnGeneratorState bytecode now also falls through if the generator object is undefined (so that we don't need that jump) and restores generator context (so that we don't need that PushContext). This saves 10 bytes per generator. Change-Id: Ie0872c827119b9f1d1e9244d3be6496a30cd9620 Reviewed-on: https://chromium-review.googlesource.com/867051 Commit-Queue: Leszek Swirski <leszeks@chromium.org> Reviewed-by:
Ross McIlroy <rmcilroy@chromium.org> Reviewed-by:
Georg Neis <neis@chromium.org> Cr-Commit-Position: refs/heads/master@{#50845}
-
- 23 Jan, 2018 2 commits
-
-
Ben L. Titzer authored
As part of the effort to despecialize WASM code, convert many uses of WasmInstanceObject which were simply indirecting through to either the compiled module or the shared module data with helpers on the respective Frame objects. R=mstarzinger@chromium.org Bug: Change-Id: I05bd1a18b1d81cceef8a80d9f6988e4f5d537e66 Reviewed-on: https://chromium-review.googlesource.com/876125 Commit-Queue: Ben Titzer <titzer@chromium.org> Reviewed-by:
Michael Starzinger <mstarzinger@chromium.org> Cr-Commit-Position: refs/heads/master@{#50798}
-
Benedikt Meurer authored
Use this in the PromiseThen operation to skip the (expensive) lookup in the SpeciesConstructor operation. This yields in a nice 3-5% improvement on the bluebird and wikipedia benchmarks, and paves the way for inlining certain Promise operations into TurboFan optimized code later. On the micro-benchmark mentioned in the bug (from the findings doc), we reduce the overall execution time by 25%, which makes sense given that Promise.prototype.then spends a significant portion of it's time just figuring out the appropriate constructor. Bug: v8:7253, v8:7349 Change-Id: Ia1577b59d1b7e4b8dbda83e2186583edab76695a Reviewed-on: https://chromium-review.googlesource.com/880681Reviewed-by:
Yang Guo <yangguo@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#50794}
-
- 22 Jan, 2018 3 commits
-
-
Michal Majewski authored
During GC fuzzing we combine multiple tests and run them inside a wrapper that needs to ignore all errors/exceptions/asserts to keep the combined tests running. We will use this flag to ignore %AbortJS calls. Bug: v8:6917 Change-Id: Ib426a68228cadbea8364c5e1d29c39dd53129481 Reviewed-on: https://chromium-review.googlesource.com/857514Reviewed-by:
Michael Achenbach <machenbach@chromium.org> Commit-Queue: Michał Majewski <majeski@google.com> Cr-Commit-Position: refs/heads/master@{#50768}
-
Leszek Swirski authored
Instead of requiring the pattern that a SuspendGenerator must be followed by a Return, make SuspendGenerator return directly. This can, in the future, simplify some of the reasoning around generator suspends. Change-Id: I94c0156a89dc0e1c0bc306bc57acf766f3b4deb5 Reviewed-on: https://chromium-review.googlesource.com/857463Reviewed-by:
Georg Neis <neis@chromium.org> Reviewed-by:
Aleksey Kozyatinskiy <kozyatinskiy@chromium.org> Reviewed-by:
Ross McIlroy <rmcilroy@chromium.org> Reviewed-by:
Yang Guo <yangguo@chromium.org> Commit-Queue: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/master@{#50748}
-
Jakob Gruber authored
This reverts commit 03e9d415. Reason for revert: Correctness issues, see https://crbug.com/804159. Bug: chromium:804159 Original change's description: > Reland: Reimplement Object.entries/values as CSA to optimize performance. > > Add Object.entries/values builtins to debug-evaluate.cc whitelist macro. > This fix revert commit of https://chromium-review.googlesource.com/c/v8/v8/+/859937 > Original is https://chromium-review.googlesource.com/c/v8/v8/+/810504 > >> Reimplements Object.entries/values as CSA to optimize performance. See more detail about https://bugs.chromium.org/p/v8/issues/ Issue 6804. > > This reverts commit 1b49f725. > > Bug: v8:6804 > Change-Id: I57e8b66e1c4ece2abb52e1630a97fbfd4070d810 > Reviewed-on: https://chromium-review.googlesource.com/860679 > Commit-Queue: Yang Guo <yangguo@chromium.org> > Reviewed-by: Yang Guo <yangguo@chromium.org> > Cr-Commit-Position: refs/heads/master@{#50492} TBR=yangguo@chromium.org,cbruni@chromium.org,jgruber@chromium.org,ishell@chromium.org,brn@b6n.ch # Not skipping CQ checks because original CL landed > 1 day ago. Bug: v8:6804 Change-Id: I39b1854ca7c2f57819ba377f84560356d3756bfb Reviewed-on: https://chromium-review.googlesource.com/877886Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Commit-Queue: Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/master@{#50746}
-
- 19 Jan, 2018 1 commit
-
-
Peter Marshall authored
This is a reland of a7c91c77. Original change's description: > [typedarray] Port ConstructByTypedArray to CSA. > > This is needed to easily port the constructor dispatcher to CSA. > > Bug: v8:7102 > Change-Id: I9672416495940ca12088a2980a9ecc61364aef9d > Reviewed-on: https://chromium-review.googlesource.com/785630 > Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> > Reviewed-by: Toon Verwaest <verwaest@chromium.org> > Commit-Queue: Peter Marshall <petermarshall@chromium.org> > Cr-Commit-Position: refs/heads/master@{#50671} Bug: v8:7102 Change-Id: I9d839343d9b95f288f806953455c2c26ca8cab06 Reviewed-on: https://chromium-review.googlesource.com/875031Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Toon Verwaest <verwaest@chromium.org> Commit-Queue: Peter Marshall <petermarshall@chromium.org> Cr-Commit-Position: refs/heads/master@{#50723}
-