- 31 Oct, 2017 1 commit
-
-
Benedikt Meurer authored
This adds support to the KeyedLoadIC to ignore out of bounds accesses for Strings and return undefined instead. We add a dedicated bit to the Smi handler to encode the OOB state and have TurboFan generate appropriate code for that case as well. This is mostly useful when programs accidentially access past the length of a string, which was observed and fixed for example in Babel recently, see https://github.com/babel/babel/pull/6589 for details. The idea is to also extend this mechanism to Arrays and maybe other receivers, as reading beyond the length is also often used in jQuery and other popular libraries. Note that this is considered a mitigation for a performance cliff and not a general optimization of OOB accesses. These should still be avoided and handled properly instead. This seems to further improve the babel test on the web-tooling-benchmark by around 1%, because the OOB access no longer turns the otherwise MONOMORPHIC access into MEGAMORPHIC state. Bug: v8:6936, v8:7014 Change-Id: I9df03304e056d7001a65da8e9621119f8e9bb55b Reviewed-on: https://chromium-review.googlesource.com/744022 Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Camillo Bruni <cbruni@chromium.org> Reviewed-by:
Leszek Swirski <leszeks@chromium.org> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#49049}
-
- 30 Oct, 2017 4 commits
-
-
Toon Verwaest authored
The bytecode interpreter nor TF rely on the explicit return value of store ICs anymore, so we can just return whatever is in the result slot. It won't be visible to JS anyway. Bug: Change-Id: I389615d1d77c5b050832f23a08e3d3bc07d9cbc6 Reviewed-on: https://chromium-review.googlesource.com/743366Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Commit-Queue: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#49027}
-
Benedikt Meurer authored
This is preparation for supporting OOB loads from strings, which requires the KeyedLoadIC to track this information. Bug: v8:6936, v8:7014 Change-Id: Ide132244ee523397dd418d21fe3377976f6633fd Reviewed-on: https://chromium-review.googlesource.com/743481Reviewed-by:
Toon Verwaest <verwaest@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#49026}
-
Toon Verwaest authored
Remove distinction between lazy and non-lazy CallApiCallback, always explicitly set up target context Bug: Change-Id: I0cb751a0415433fdfec21451e2fac3e0726bf26e Reviewed-on: https://chromium-review.googlesource.com/743019 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#49024}
-
Benedikt Meurer authored
This was discovered on the babel test of the web-tooling-benchmark, which suffers from a high %KeyedGetProperty overhead, and most of these calls come from the fact that the KeyedLoadIC_Megamorphic bails out to the runtime call for all String instance types. Just handling in-bound accesses to characters reduces the overhead incurred by %KeyedGetProperty from roughly 9% to roughly 2% only. This reduces the number of runs per second on the babel test by around 7-8% on average. Bug: v8:6936, v8:7014 Change-Id: I0dc247d7d6457c7032636d2852cb54cef1b24979 Reviewed-on: https://chromium-review.googlesource.com/743012Reviewed-by:
Yang Guo <yangguo@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#49021}
-
- 27 Oct, 2017 1 commit
-
-
Toon Verwaest authored
(This is a reland of cb84b6f6) This works in the ICs since compiled handlers are not shared anymore. Bug: chromium:759734 Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng Change-Id: I3b7d6ae34bb4cfa213f679354fac56fb51bfd5ed Reviewed-on: https://chromium-review.googlesource.com/739822Reviewed-by:
Igor Sheludko <ishell@chromium.org> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Commit-Queue: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#48999}
-
- 26 Oct, 2017 4 commits
-
-
Leszek Swirski authored
Add the --trace-feedback-updates flag (disabled by default, enabled by the v8_enable_trace_feedback_updates gn arg), which traces updates to feedback slots. Change-Id: Ib8f02f958e2adf04abda5d4ed680e29fa04895ab Reviewed-on: https://chromium-review.googlesource.com/725814Reviewed-by:
Toon Verwaest <verwaest@chromium.org> Reviewed-by:
Camillo Bruni <cbruni@chromium.org> Commit-Queue: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/master@{#48983}
-
Toon Verwaest authored
This reverts commit cb84b6f6. Reason for revert: <INSERT REASONING HERE> Original change's description: > [lazy-accessor-pairs] Don't take the fast paths if the context needs to be switched > > This works in the ICs since compiled handlers are not shared anymore. > > As drive-by cleanup I also removed custom code to deal with compiled handler sharing for primitive and access-checked objects. > > Bug: chromium:759734 > Change-Id: Ifb394221c2398f42ea9305acc02845db6004c680 > Reviewed-on: https://chromium-review.googlesource.com/738381 > Commit-Queue: Toon Verwaest <verwaest@chromium.org> > Reviewed-by: Igor Sheludko <ishell@chromium.org> > Reviewed-by: Jaroslav Sevcik <jarin@chromium.org> > Cr-Commit-Position: refs/heads/master@{#48979} TBR=jarin@chromium.org,ishell@chromium.org,verwaest@chromium.org Change-Id: I9b7424252cbc3f18efd6b6b5b3818651c2863f5c No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: chromium:759734 Reviewed-on: https://chromium-review.googlesource.com/739487Reviewed-by:
Toon Verwaest <verwaest@chromium.org> Commit-Queue: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#48980}
-
Toon Verwaest authored
This works in the ICs since compiled handlers are not shared anymore. As drive-by cleanup I also removed custom code to deal with compiled handler sharing for primitive and access-checked objects. Bug: chromium:759734 Change-Id: Ifb394221c2398f42ea9305acc02845db6004c680 Reviewed-on: https://chromium-review.googlesource.com/738381 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Reviewed-by:
Igor Sheludko <ishell@chromium.org> Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#48979}
-
Michael Starzinger authored
This moves the initialization of the {Code::stub_key} field into the allocator for {Code} objects, essentially making the field in question immutable after allocation. R=verwaest@chromium.org BUG=v8:6792 Change-Id: I8ba2ffeea792d0d566995c08e3572ae63a7c1e94 Reviewed-on: https://chromium-review.googlesource.com/739141 Commit-Queue: Michael Starzinger <mstarzinger@chromium.org> Reviewed-by:
Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#48971}
-
- 25 Oct, 2017 4 commits
-
-
Jakob Kummerow authored
Abstract equality comparison of a BigInt and a String converts the latter to BigInt. This conversion can fail; since we do not want to pass a context to the comparison function, we must signal such failure without throwing an exception. This CL uses the existing ShouldThrow enum to configure behavior of String-to-BigInt conversion, moving it out of Object into globals.h. Bug: v8:6791, v8:6979 Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng Change-Id: Ibb98675079b8392cf03bbcbbbd5556108500a32d Reviewed-on: https://chromium-review.googlesource.com/734172 Commit-Queue: Jakob Kummerow <jkummerow@chromium.org> Reviewed-by:
Georg Neis <neis@chromium.org> Reviewed-by:
Andreas Haas <ahaas@chromium.org> Cr-Commit-Position: refs/heads/master@{#48946}
-
Jakob Kummerow authored
and use a newly-introduced "enum class Operation" in all other places that so far passed Token::Values around. Also delete some related dead code along the way. Bug: v8:6921 Change-Id: I062f396d304aa62298cfeff202e3132a4a5597c1 Reviewed-on: https://chromium-review.googlesource.com/736851 Commit-Queue: Jakob Kummerow <jkummerow@chromium.org> Reviewed-by:
Michael Starzinger <mstarzinger@chromium.org> Reviewed-by:
Adam Klein <adamk@chromium.org> Cr-Commit-Position: refs/heads/master@{#48944}
-
Benedikt Meurer authored
Elements on typed arrays are never looked up in the prototype chain, so there's no point in depending on the prototype chain validity cells for keyed stores to typed arrays. You just risk going megamorphic for unrelated changes. Bug: v8:6999 Change-Id: Id831de42a2c9eadfd5317ee9b5dbfaa207f236fe Reviewed-on: https://chromium-review.googlesource.com/737789Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#48898}
-
Jakob Kummerow authored
as opposed to waiting until state() is PREMONOMORPHIC like named Load/StoreICs do. Keyed ICs do not have PREMONOMORPHIC state. Bug: v8:6999 Change-Id: If37705d3301fb93a2fc2bf10fdeb255ff06fdb5e Reviewed-on: https://chromium-review.googlesource.com/737655 Commit-Queue: Jakob Kummerow <jkummerow@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#48895}
-
- 24 Oct, 2017 4 commits
-
-
Camillo Bruni authored
Bug: v8:6921 Change-Id: Icbbb7c08b9ff9f20339988770d88d96653a9ddef Reviewed-on: https://chromium-review.googlesource.com/718656 Commit-Queue: Camillo Bruni <cbruni@chromium.org> Reviewed-by:
Ross McIlroy <rmcilroy@chromium.org> Reviewed-by:
Jakob Kummerow <jkummerow@chromium.org> Cr-Commit-Position: refs/heads/master@{#48890}
-
Benedikt Meurer authored
Once the KeyedStoreIC was in MEGAMORPHIC state storing to dictionary mode objects, we'd constantly hit the slow-path implemented via the %SetProperty runtime function, if the dictionary was created with a null prototype, i.e. via Object.create(null). This goes against the advice of using Object.create(null) for dictionaries (compared to using empty object literal), which is unfortunate. This CL addresses two issues, starting with - adding support for null prototypes to LookupPropertyOnPrototypeChain, which was always hitting the slow path for null prototypes, and - using the dedicated %AddDictionaryProperty runtime call when we have to grow the backing store. These changes combined improve the micro-benchmark from storeToDictionary: 559 ms. storeToFast: 95 ms. to storeToDictionary: 201 ms. storeToFast: 94 ms. which reduces overhead by about 65%. This overall improves the chai test on the web-tooling-benchmark by about 4%, which still leaves some room for improvement. Bug: v8:6936, v8:6985 Change-Id: I97b78961f51edb3a3e198bdb31457fd78bed947f Reviewed-on: https://chromium-review.googlesource.com/735139Reviewed-by:
Igor Sheludko <ishell@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#48858}
-
Benedikt Meurer authored
The (KEYED_)LOAD/STORE_ICs didn't properly leave the UNINITIALIZED as long as the receiver was always null/undefined. This leads to deoptimization loops in TurboFan, because the compiler always put in a SOFT deoptimization at this point. Bug: v8:6989 Change-Id: I1a32bfb722f121f8b593e8972e657290d7b0531d Reviewed-on: https://chromium-review.googlesource.com/735319Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#48854}
-
Camillo Bruni authored
This is in preparation for the new --trace-maps feature which will also log the current PC. Change-Id: I20f60c8a1e0104d4497460bafab623840a129f41 Reviewed-on: https://chromium-review.googlesource.com/734463Reviewed-by:
Adam Klein <adamk@chromium.org> Reviewed-by:
Jakob Kummerow <jkummerow@chromium.org> Commit-Queue: Camillo Bruni <cbruni@chromium.org> Cr-Commit-Position: refs/heads/master@{#48851}
-
- 20 Oct, 2017 4 commits
-
-
Ulan Degenbaev authored
The motivation for the new field is to provide race-free way to iterate used in-object properties of a JSObject in concurrent marker. This CL keeps the new field in sync with the unused_property_fields and subsequent CL will remove unused_property_fields. Bug: chromium:774644 Change-Id: I0971f079094d58d3a57415834c43c09427dacc77 Reviewed-on: https://chromium-review.googlesource.com/726639 Commit-Queue: Ulan Degenbaev <ulan@chromium.org> Reviewed-by:
Toon Verwaest <verwaest@chromium.org> Reviewed-by:
Tobias Tebbi <tebbi@chromium.org> Cr-Commit-Position: refs/heads/master@{#48795}
-
Benedikt Meurer authored
In the special case of KeyedLoadIC, where the key that is passed in is a Name that is always the same we only checked for identity in both the stub and the TurboFan case, which works fine for symbols and internalized strings, but doesn't really work with non-internalized strings, where the identity check will fail, the runtime will internalize the string, and the IC will then see the original internalized string again and not progress in the feedback lattice. This leads to tricky deoptimization loops in TurboFan and constantly missing ICs. This adds fixes the stub to always try to internalize strings first when the identity check fails and then doing the check again. If the name is not found in the string table we miss, since in that case the string cannot match the previously recorded feedback name (which is always a unique name). In TurboFan we represent this checks with new CheckEqualsSymbol and CheckEqualsInternalizedString operators, which validate the previously recorded feedback, and the CheckEqualsInternalizedString operator does the attempt to internalize the input. Bug: v8:6936, v8:6948, v8:6969 Change-Id: I3f3b4a587c67f00f7c4b60d239eb98a9626fe04a Reviewed-on: https://chromium-review.googlesource.com/730224Reviewed-by:
Toon Verwaest <verwaest@chromium.org> Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#48784}
-
Toon Verwaest authored
Bug: Change-Id: I67cfd5634e86472425c161b461684bd975e58a41 Reviewed-on: https://chromium-review.googlesource.com/730204 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Reviewed-by:
Michael Starzinger <mstarzinger@chromium.org> Cr-Commit-Position: refs/heads/master@{#48783}
-
Camillo Bruni authored
Bug: v8:6921 Change-Id: I28a42a320a575e396db4e79c2d4a505c15d0784c Reviewed-on: https://chromium-review.googlesource.com/718536Reviewed-by:
Jakob Kummerow <jkummerow@chromium.org> Reviewed-by:
Leszek Swirski <leszeks@chromium.org> Commit-Queue: Camillo Bruni <cbruni@chromium.org> Cr-Commit-Position: refs/heads/master@{#48768}
-
- 19 Oct, 2017 1 commit
-
-
Clemens Hammacher authored
Use the (D)CHECK_{EQ,NE,GT,...} macros instead of (D)CHECK with an embedded comparison. This gives better error messages and also does the right comparison for signed/unsigned mismatches. This will allow us to reenable the readability/check cpplint check. R=ishell@chromium.org Bug: v8:6837, v8:6921 Change-Id: If44435035d234e90c1dc306a306832c9d36013a2 Reviewed-on: https://chromium-review.googlesource.com/723019Reviewed-by:
Igor Sheludko <ishell@chromium.org> Commit-Queue: Clemens Hammacher <clemensh@chromium.org> Cr-Commit-Position: refs/heads/master@{#48729}
-
- 16 Oct, 2017 2 commits
-
-
Jakob Kummerow authored
This supports {valueOf() { return BigInt(...) }} objects as operands in binary and unary operations. Bug: v8:6791 Change-Id: I30ec9983ff611477742f9ea0bc6d04972fe21d3c Reviewed-on: https://chromium-review.googlesource.com/716863 Commit-Queue: Jakob Kummerow <jkummerow@chromium.org> Reviewed-by:
Georg Neis <neis@chromium.org> Reviewed-by:
Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/master@{#48612}
-
Leszek Swirski authored
Bug: v8:6921 Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng;master.tryserver.v8:v8_linux_noi18n_rel_ng Change-Id: I3294568a550b829b0ec90147a4cdaefe169bb7cb Reviewed-on: https://chromium-review.googlesource.com/718206Reviewed-by:
Yang Guo <yangguo@chromium.org> Reviewed-by:
Michael Stanton <mvstanton@chromium.org> Reviewed-by:
Marja Hölttä <marja@chromium.org> Commit-Queue: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/master@{#48587}
-
- 13 Oct, 2017 4 commits
-
-
John Barboza authored
New OWNERS jbarboza and mmallick and remove bjaideep. Bug: Change-Id: I3d7b8d13cad441bd60b1d598e5553716799ef739 Reviewed-on: https://chromium-review.googlesource.com/714136Reviewed-by:
Junliang Yan <jyan@ca.ibm.com> Reviewed-by:
Yang Guo <yangguo@chromium.org> Commit-Queue: Junliang Yan <jyan@ca.ibm.com> Cr-Commit-Position: refs/heads/master@{#48559}
-
Mathias Bynens authored
New code should use nullptr instead of NULL. This patch updates existing use of NULL to nullptr where applicable, making the code base more consistent. BUG=v8:6928,v8:6921 Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng;master.tryserver.v8:v8_linux_noi18n_rel_ng Change-Id: I4687f5b96fcfd88b41fa970a2b937b4f6538777c Reviewed-on: https://chromium-review.googlesource.com/718338 Commit-Queue: Mathias Bynens <mathias@chromium.org> Reviewed-by:
Andreas Haas <ahaas@chromium.org> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Ulan Degenbaev <ulan@chromium.org> Reviewed-by:
Toon Verwaest <verwaest@chromium.org> Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Reviewed-by:
Yang Guo <yangguo@chromium.org> Cr-Commit-Position: refs/heads/master@{#48557}
-
Igor Sheludko authored
Bug: chromium:764219 Change-Id: Ic68111e49da508aba255b1c651a85b2b00e62947 Reviewed-on: https://chromium-review.googlesource.com/718108Reviewed-by:
Toon Verwaest <verwaest@chromium.org> Commit-Queue: Igor Sheludko <ishell@chromium.org> Cr-Commit-Position: refs/heads/master@{#48534}
-
Igor Sheludko authored
This is a reland of 3d023952 Original change's description: > [runtime] Make JSFunction::prototype_or_initial_map field optional. > > Functions that don't have prototype need to store neither prototype nor > initial map, so the |prototype_or_initial_map| field is not required for > such maps. > > Bug: v8:6459 > Change-Id: I4b3066bd6a4fed42c19f217bae82a8bce552bdca > Reviewed-on: https://chromium-review.googlesource.com/570250 > Reviewed-by: Jaroslav Sevcik <jarin@chromium.org> > Reviewed-by: Jakob Kummerow <jkummerow@chromium.org> > Commit-Queue: Igor Sheludko <ishell@chromium.org> > Cr-Commit-Position: refs/heads/master@{#46840} Bug: v8:6459 Change-Id: I54e3516ea70474c6d4f873f7b91e74cb8a7d622a Reviewed-on: https://chromium-review.googlesource.com/583307Reviewed-by:
Toon Verwaest <verwaest@chromium.org> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Commit-Queue: Igor Sheludko <ishell@chromium.org> Cr-Commit-Position: refs/heads/master@{#48523}
-
- 12 Oct, 2017 3 commits
-
-
Igor Sheludko authored
Bug: chromium:768875 Change-Id: Ib5b324e90bea846e6cca419f81bf46bd293e83b4 Reviewed-on: https://chromium-review.googlesource.com/715802Reviewed-by:
Camillo Bruni <cbruni@chromium.org> Commit-Queue: Igor Sheludko <ishell@chromium.org> Cr-Commit-Position: refs/heads/master@{#48503}
-
Igor Sheludko authored
Bug: chromium:764219 Change-Id: I99d1192c5c0f2b8bf47e0f193a0c4d9c00477466 Reviewed-on: https://chromium-review.googlesource.com/712454 Commit-Queue: Igor Sheludko <ishell@chromium.org> Reviewed-by:
Jakob Kummerow <jkummerow@chromium.org> Cr-Commit-Position: refs/heads/master@{#48492}
-
Jaroslav Sevcik authored
In the current implementation of hash code for objects (identity hash), we do not bother to shift the hash when we retrieve it from the hash-length bitfield in a property array. (Even worse, we store shifted value even if we do not have property array or inside dictionaries.) That means that the hash-code for objects is always divisible by 1024. Since our hash table uses a simple masking with (2^logsize - 1) to obtain the bucket, we get terrible hash collisions - essentially, our hash table degenerates to a linked list for fewer than 1024 elements. This CL always shifts the hash code so that the value in the lowest 21 bits is uniformly distributed. This results in big improvements on medium to large hash tables. A program storing 1M elements into a WeakMap gets roughly 17x faster. A program retrieving 1M elements from a Map improves even more dramatically (>100x). const a = []; for (let i = 0; i < 1e6; i++) a[i] = {}; const m = new Map(); console.time("Map.set"); for (let i = 0; i < 1e6; i++) { m.set(a[i], i); } console.timeEnd("Map.set"); console.time("Map.get"); let s = 0; for (let i = 0; i < 1e6; i++) { s += m.get(a[i]); } console.timeEnd("Map.get"); const w = new WeakMap(); console.time("WeakMap.set"); for (let i = 0; i < 1e6; i++) { w.set(a[i], i); } console.timeEnd("WeakMap.set"); Before the fix: Map.set: 157.575000 Map.get: 28333.182000 WeakMap.set: 6923.826000 After the fix: Map.set: 178.382000 Map.get: 185.930000 WeakMap.set: 409.529000 Note that Map does not suffer from the hash collision on insertion because it uses chaining (insertion into linked list is fast regardless of size!), and we cleverly avoid lookup in the hash table on update if the key does not have identity hash yet. This is in contrast to the WeakMap, which uses open-addressing, and deals with collisions on insertion. Bug: v8:6916 Change-Id: Ic5497bd4501e3b767b3f4acb7efb4784cbb3a2e4 Reviewed-on: https://chromium-review.googlesource.com/713616Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#48480}
-
- 06 Oct, 2017 1 commit
-
-
Benedikt Meurer authored
This repairs the performance regression on Octane/EarleyBoyer and JetStream/EarleyBoyer benchmarks. Bug: chromium:772268, v8:6367, v8:6278, v8:6344 Change-Id: Ibc144a35b37c5822f88712550d8db09386241341 Reviewed-on: https://chromium-review.googlesource.com/704574Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#48326}
-
- 03 Oct, 2017 1 commit
-
-
Benedikt Meurer authored
THe change in https://chromium-review.googlesource.com/695108 flushed out an issue with the IC::UpdatePolymorphicIC logic, where we'd try to stay MONOMORPHIC or POLYMORPHIC as long as the internalized name doesn't change. But the calling code already does the internalization for keyed accesses with Strings, so we need to double check that the same combination of (map, handler) is not already in the list, and properly go to MEGAMORPHIC state if there's such a pair already. This seriously tanked the six-speed-object-literals-ext-es5.js benchmark on AWFY. Bug: v8:6367, v8:6278, v8:6344 Change-Id: I90ea88d1fe61c165990c0a10d4a8687ffe351986 Reviewed-on: https://chromium-review.googlesource.com/695307Reviewed-by:
Jakob Kummerow <jkummerow@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#48268}
-
- 02 Oct, 2017 2 commits
-
-
Benedikt Meurer authored
Until now keyed accesses to properties with string or symbol keys were only optimized properly while the IC was monomorphic and would go megamorphic as soon as there's another receiver map, even if the name was still the same (i.e. the same symbol or internalized string). This was a weird performance-cliff, that'll hurt modern code especially because for symbols you can only access them via keyed loads and stores. This CL fixes the state machine inside the ICs to properly transition to POLYMORPHIC state (and stay there) as long as the new name matches the previously recorded name. The FeedbackVector and TurboFan were already able to deal with this and didn't need any updates. On the micro-benchmark from the tracking bug we go from testStringMonomorphic: 429 ms. testSymbolMonomorphic: 431 ms. testStringPolymorphic: 429 ms. testSymbolPolymorphic: 5621 ms. to testStringMonomorphic: 429 ms. testSymbolMonomorphic: 429 ms. testStringPolymorphic: 429 ms. testSymbolPolymorphic: 430 ms. effectively eliminating the overhead for symbols completely, and yielding a 13.5x performance boost. This also seems to yield a 1% improvement on the ARES6 ML benchmark, because it eliminates the KEYED_LOAD_ICs for the Symbol.species lookups. Bug: v8:6367, v8:6278, v8:6344 Change-Id: I879fe56387b4c56203c1ad8ef8cafb6cc4c32897 Reviewed-on: https://chromium-review.googlesource.com/695108Reviewed-by:
Michael Stanton <mvstanton@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#48261}
-
Daniel Clifford authored
Change-Id: Iac4a95a0c094472d887d89bbf5d6189988c56f7c Reviewed-on: https://chromium-review.googlesource.com/692016 Commit-Queue: Daniel Clifford <danno@chromium.org> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#48253}
-
- 29 Sep, 2017 3 commits
-
-
Toon Verwaest authored
TBR: ofrobots@google.com, yangguo@chromium.org Bug: Change-Id: I6cb0704acabf9a7f2334de539a6600db8607baef Reviewed-on: https://chromium-review.googlesource.com/691720 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Reviewed-by:
Michael Starzinger <mstarzinger@chromium.org> Cr-Commit-Position: refs/heads/master@{#48237}
-
Toon Verwaest authored
Bug: Change-Id: I58ce9a0f42dfa81c8e8affa2377c5cc0d08a35e2 Reviewed-on: https://chromium-review.googlesource.com/691714 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#48222}
-
Toon Verwaest authored
Bug: Change-Id: I644c9f8b9ab3bd4250809ee557ec34ee738f5244 Reviewed-on: https://chromium-review.googlesource.com/691654 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Reviewed-by:
Michael Starzinger <mstarzinger@chromium.org> Cr-Commit-Position: refs/heads/master@{#48219}
-
- 28 Sep, 2017 1 commit
-
-
Toon Verwaest authored
Bug: Change-Id: I41d3f3086f5e90a1a1579c18eca59b5d098f637f Reviewed-on: https://chromium-review.googlesource.com/690374 Commit-Queue: Toon Verwaest <verwaest@chromium.org> Reviewed-by:
Michael Starzinger <mstarzinger@chromium.org> Cr-Commit-Position: refs/heads/master@{#48207}
-