- 04 Feb, 2019 1 commit
-
-
Sigurd Schneider authored
This CL adds handling for Load/StoreMessage to LoadElimination. It is handled like a Load/StoreField to an external location. Change-Id: I50f27fba9cb7ffabf1474aa409083676cef65442 Bug: v8:8183, chromium:927746 Reviewed-on: https://chromium-review.googlesource.com/c/1451879 Commit-Queue: Sigurd Schneider <sigurds@chromium.org> Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#59344}
-
- 17 Sep, 2018 2 commits
-
-
Benedikt Meurer authored
Cleanup the JSArrayBuffer bit fields to use the proper object macros that are now otherwise used consistently across the code base. Also change TurboFan to consistently bailout when it sees an array buffer that was previously neutered, so that the generic path / builtins are again the chokepoints for the spec violations (the fact that we don't always raise exceptions when we see a neutered array buffer), except for the ArrayBufferView accessor inlining in the JSCallReducer, where we still turn the values into zero (because we don't have access to a CALL_IC speculation guard in the common case). This also removes the ArrayBufferWasNeutered simplified operator, and does regular LoadField + Number bitwise operations instead, which is good enough and allows us to get rid of a lot of unnecessary complexity. Bug: v8:4153, v8:7881, v8:8015, v8:8171, v8:8178 Change-Id: I4ce79ece762c632e6318f2ab7bcc6b2f82383947 Reviewed-on: https://chromium-review.googlesource.com/1226887Reviewed-by:
Georg Neis <neis@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#55958}
-
Florian Sattler authored
Fixing clang-tidy warning. Bug: v8:8015 Change-Id: I7d885f0e2ba3cdf97de190166dc4cdd24dc0c11e Reviewed-on: https://chromium-review.googlesource.com/1224091 Commit-Queue: Florian Sattler <sattlerf@google.com> Reviewed-by:
Michael Starzinger <mstarzinger@chromium.org> Cr-Commit-Position: refs/heads/master@{#55956}
-
- 23 Jul, 2018 1 commit
-
-
Stephan Herhut authored
This moves the static handle() helper function to handles-inl.h as it ultimately depends on handles-inl.h anyway. To make this possible, also move some other code to -inl.h files and split up some header files into a -inl.h part. Bug: v8:7490 Change-Id: I0f68e0728ba082b87ffa911aaf205d9b1523d2c9 Reviewed-on: https://chromium-review.googlesource.com/1146723Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Michael Lippautz <mlippautz@chromium.org> Commit-Queue: Stephan Herhut <herhut@chromium.org> Cr-Commit-Position: refs/heads/master@{#54617}
-
- 15 Jun, 2018 1 commit
-
-
Leszek Swirski authored
Bug: v8:7786 Change-Id: I1e568ff6da02dfd92b24b8badd665096cf49a13a Reviewed-on: https://chromium-review.googlesource.com/1101321Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/master@{#53747}
-
- 13 Mar, 2018 1 commit
-
-
Benedikt Meurer authored
Depending on visitation order the LoadElimination might be find memoized nodes in its state tables that were killed by other reducers in the mean time. The LoadElimination must just ignore those stale entries. Bug: chromium:820820 Change-Id: Ia62e401ff77da547ed215a14074e70aeb5c3a766 Reviewed-on: https://chromium-review.googlesource.com/958843Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#51892}
-
- 25 Oct, 2017 1 commit
-
-
Jaroslav Sevcik authored
This reverts commit 37b4b2f1. Reason for revert: Likely breaking canary. Original change's description: > [turbofan] Prune control flow based on failed map checks and comparisons. > > This introduces unreachable state into load elimination. We mark state > as unreachable if we know statically that a map check would fail. > When processing effect phis, we disconnect unreachable state's > control from the effect phi's merge, and point it to RuntimeAbort. > The control input to the merge is then updated with Dead. Dead > code elimination prunes the merge, phis and effect phis. > > Bug: v8:6396 > Change-Id: I01874b576e548747a915c7b645b96ebaa6f6700d > Reviewed-on: https://chromium-review.googlesource.com/730754 > Commit-Queue: Jaroslav Sevcik <jarin@chromium.org> > Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> > Cr-Commit-Position: refs/heads/master@{#48810} TBR=jarin@chromium.org,bmeurer@chromium.org # Not skipping CQ checks because original CL landed > 1 day ago. Bug: v8:6396, chromium:777843 Change-Id: I6fac6f86e138f33756e688ec30424cb940690dae Reviewed-on: https://chromium-review.googlesource.com/737829Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#48918}
-
- 23 Oct, 2017 2 commits
-
-
Michael Hablich authored
This reverts commit ddd15cda. Reason for revert: Blocks roll: https://chromium-review.googlesource.com/c/chromium/src/+/732565 Original change's description: > [turbofan] Instance type tracking in load elimination. > > This tracks instance type in load elimination, so that it can be used > to prune control flow with unreachable states. > > (This is a cut down version of https://chromium-review.googlesource.com/c/v8/v8/+/727761), > the regression should be addressed by the map invalidation fix from > https://chromium-review.googlesource.com/c/v8/v8/+/730705.) > > Bug: v8:6396 > Change-Id: I3acab16ebbc0f1f16c7900a8d307deb84e1cb618 > Reviewed-on: https://chromium-review.googlesource.com/732307 > Commit-Queue: Jaroslav Sevcik <jarin@chromium.org> > Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> > Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> > Cr-Commit-Position: refs/heads/master@{#48812} TBR=jarin@chromium.org,bmeurer@chromium.org Change-Id: I1a3fe1d62c05889ea83e2f6cfb31a6ccbe65241d No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: v8:6396 Reviewed-on: https://chromium-review.googlesource.com/732898Reviewed-by:
Michael Hablich <hablich@chromium.org> Commit-Queue: Michael Hablich <hablich@chromium.org> Cr-Commit-Position: refs/heads/master@{#48833}
-
Jaroslav Sevcik authored
This tracks instance type in load elimination, so that it can be used to prune control flow with unreachable states. (This is a cut down version of https://chromium-review.googlesource.com/c/v8/v8/+/727761), the regression should be addressed by the map invalidation fix from https://chromium-review.googlesource.com/c/v8/v8/+/730705.) Bug: v8:6396 Change-Id: I3acab16ebbc0f1f16c7900a8d307deb84e1cb618 Reviewed-on: https://chromium-review.googlesource.com/732307 Commit-Queue: Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#48812}
-
- 22 Oct, 2017 1 commit
-
-
Jaroslav Sevcik authored
This introduces unreachable state into load elimination. We mark state as unreachable if we know statically that a map check would fail. When processing effect phis, we disconnect unreachable state's control from the effect phi's merge, and point it to RuntimeAbort. The control input to the merge is then updated with Dead. Dead code elimination prunes the merge, phis and effect phis. Bug: v8:6396 Change-Id: I01874b576e548747a915c7b645b96ebaa6f6700d Reviewed-on: https://chromium-review.googlesource.com/730754 Commit-Queue: Jaroslav Sevcik <jarin@chromium.org> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#48810}
-
- 20 Oct, 2017 1 commit
-
-
Jaroslav Sevcik authored
Instead we only change the map for the node being checked. This also changes AbstractMaps to look through renames for keys. That might theoretically lead to seeing less precise types for MayAlias tests, the hope is it does not matter much. Bug: v8:6396 Change-Id: I28a067080a3bc58c62a9dd5a76dce1aa348d8e0c Reviewed-on: https://chromium-review.googlesource.com/730705Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Commit-Queue: Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#48785}
-
- 19 Oct, 2017 2 commits
-
-
Jaroslav Sevcik authored
This reverts commit 71bcc1d9. Reason for revert: Regresses Octane/Box2D, among other things. Original change's description: > [turbofan] Load elimination prunes control flow based on instance type. > > Changes: > - introduce the notion of unreachable abstract states. > > - reconnect unreachables states to runtime abort in effect phis (so that > the merged states are not polluted by unreachable branches while > preserving SSA). > > - mark states with failed map checks, unreachable map guars as unreachable. > > - add instance type to AbstractMaps, only invalidate instance type on > mismatched effect merges. > > > This results in 2-3% improvement on ARES/ML steady state. > > Bug: v8:6396 > Change-Id: I35b0d4482fa400ba7ee9a754f8ef1b2663ebc7dc > Reviewed-on: https://chromium-review.googlesource.com/727761 > Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> > Commit-Queue: Jaroslav Sevcik <jarin@chromium.org> > Cr-Commit-Position: refs/heads/master@{#48742} TBR=jarin@chromium.org,bmeurer@chromium.org Change-Id: I6302b37dbf5ea781c64815ef1900681531ad7d71 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: v8:6396 Reviewed-on: https://chromium-review.googlesource.com/728440Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#48763}
-
Jaroslav Sevcik authored
Changes: - introduce the notion of unreachable abstract states. - reconnect unreachables states to runtime abort in effect phis (so that the merged states are not polluted by unreachable branches while preserving SSA). - mark states with failed map checks, unreachable map guars as unreachable. - add instance type to AbstractMaps, only invalidate instance type on mismatched effect merges. This results in 2-3% improvement on ARES/ML steady state. Bug: v8:6396 Change-Id: I35b0d4482fa400ba7ee9a754f8ef1b2663ebc7dc Reviewed-on: https://chromium-review.googlesource.com/727761Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Commit-Queue: Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#48742}
-
- 06 Oct, 2017 1 commit
-
-
Jaroslav Sevcik authored
Currently, the transition elements kind operation invalidates the elements of all other arrays. In particular, if we loop over matrix elements using two nested loops, and do possibly transitioning access a[i][j] in every iteration, we invalidate the load elimination state for the array 'a' because a[i][j] might transition elements kind for the 'a[i]' array. As a result, the 'a[i]' access cannot be hoisted from the inner loop. With this CL, we figure out that transitioning 'a[i]' cannot affect 'a' because we know that 'a' does not have the transition's source map. In the micro-benchmark below, the time for summing up the elements of 100x100 matrix improves by factor of 1.7 (from ~340ms to ~190ms). function matrixSum(a) { let s = 0; let rowCount = a.length; let columnCount = a[0].length; for (let i = 0; i < rowCount; i++) { for (let j = 0; j < columnCount ; j++) { s += a[i][j]; } } return s; } // Setup the matrices: // Smi elements. var ma = [[1, 2], [3, 4]]; // Holey double elements. var b = Array(100); for (let i = 0; i < 100; i++) b[i] = 1.1; var mb = []; for (let i = 0; i < 100; i++) mb[i] = b; // Warmup. matrixSum(mb); matrixSum(mb); matrixSum(ma); matrixSum(mb); matrixSum(ma); %OptimizeFunctionOnNextCall(matrixSum); function runner(m) { let s = 0; for (let i = 0; i < 1e4; i++) { s += matrixSum(m); } return s; } // Make sure the runner does not know the elements kinds. %NeverOptimizeFunction(runner); // Measure. console.time("Sum"); runner(mb); console.timeEnd("Sum"); Bug: v8:6344 Change-Id: Ie0642d8693ed63116b1aaed7d2f261fcb64729fe Reviewed-on: https://chromium-review.googlesource.com/704634 Commit-Queue: Jaroslav Sevcik <jarin@chromium.org> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#48334}
-
- 28 Aug, 2017 1 commit
-
-
Benedikt Meurer authored
Instead of introducing a lot of explicit branching in the JSNativeContextSpecialization for polymorphic property accesses that cannot be folded into a single LoadField/StoreField, and which are mostly invisible and not optimizable for later passes, we now have a single CompareMaps operator that takes a set of maps (like the CheckMaps operator) and produces a boolean indicating the result of the comparison. R=jarin@chromium.org Bug: v8:6761 Change-Id: Iee8788e915b762d542acb54feb9931346e442dc0 Reviewed-on: https://chromium-review.googlesource.com/636365Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#47635}
-
- 21 Aug, 2017 1 commit
-
-
Jaroslav Sevcik authored
When merging effect phis, we currently do not try to merge information for any variables that are merged by phis on the same control merge. This CL implements a very limited version of merging map information for nodes: If all the map information for all inputs of the phi is the same, we assign that map information to the phi itself. This is somewhat consistent with merging map information for a node: there we also combine the information only if in all incoming paths we have teh same set of maps. In theory, we could union the sets of maps. Also, we could consider merging other information (such as abstract fields). This yields some small improvement (~2%) on the Octane deltablue benchmark. Bug: v8:5267 Change-Id: I9447732e3f0d06eb44632db492782fa35529f9fd Reviewed-on: https://chromium-review.googlesource.com/622792 Commit-Queue: Jaroslav Sevcik <jarin@chromium.org> Reviewed-by:
Tobias Tebbi <tebbi@chromium.org> Cr-Commit-Position: refs/heads/master@{#47475}
-
- 18 Aug, 2017 2 commits
-
-
Benedikt Meurer authored
In LoadElimination, don't consider two fields as potentially aliasing if they have different names. This gives another 5% boost on the Octane/DeltaBlue benchmark, since the redundant loads and checks on the elms of the OrderedCollection can be properly eliminated in the chainTest. Bug: v8:5267 Change-Id: Id2dbb8cac02f9c95a85e5cc8acac3f66b679fd06 Reviewed-on: https://chromium-review.googlesource.com/620727Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#47424}
-
Benedikt Meurer authored
The MapGuard node sits in the effect chain as a hint for other optimization passes that a certain value has a certain (set of) map(s) guarded by checks on the control chain. This is useful to learn from explicit control flow inserted for polymorphic property accesses, and then used as part of the polymorphic inlining. This change improves the score on the Octane/DeltaBlue benchmark by around 7-8% and the score on the Octane/Richards benchmark by like 3% on average. Bug: v8:5267 Change-Id: Id0b0b2c72e6a9342d5750a0d62cf6be6fb8c5916 Also-By: jarin@chromium.org Reviewed-on: https://chromium-review.googlesource.com/620586 Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#47417}
-
- 02 Aug, 2017 1 commit
-
-
Julien Brianceau authored
Bug: chromium:750830 Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.linux:linux_chromium_rel_ng;master.tryserver.v8:v8_linux_noi18n_rel_ng Change-Id: Icab7b5a1c469d5e77d04df8bfca8319784e92af4 Reviewed-on: https://chromium-review.googlesource.com/595655 Commit-Queue: Julien Brianceau <jbriance@cisco.com> Reviewed-by:
Yang Guo <yangguo@chromium.org> Reviewed-by:
Michael Starzinger <mstarzinger@chromium.org> Reviewed-by:
Clemens Hammacher <clemensh@chromium.org> Reviewed-by:
Daniel Ehrenberg <littledan@chromium.org> Cr-Commit-Position: refs/heads/master@{#47072}
-
- 27 Jul, 2017 1 commit
-
-
Jaroslav Sevcik authored
This reverts commit 3ca64085. Reason: it does not seem to improve anything (including microbenchmarks that only do "if (m.has(x)) s += m.get(x);" in a tight loop). Bug: v8:6410 Change-Id: I025bf885f313ac5e54ca450ae9cff5b4a15b04fd Reviewed-on: https://chromium-review.googlesource.com/574020Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Commit-Queue: Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#46952}
-
- 13 Jul, 2017 1 commit
-
-
Mike Stanton authored
Bug: v8:1956 Change-Id: I41af0cf5eb2fbb9f1d9d4172f3f546bcc2a715dc Reviewed-on: https://chromium-review.googlesource.com/548639 Commit-Queue: Michael Stanton <mvstanton@chromium.org> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Daniel Clifford <danno@chromium.org> Cr-Commit-Position: refs/heads/master@{#46618}
-
- 11 Jul, 2017 2 commits
-
-
Alexandre Talon authored
Each reducer now has a virtual reducer_name function, returning its name (the name of the class containing this reducer). This gets displayed when using the --trace_turbo_reduction flag. Also when using this flags more messages are displayed. Actually when a node is replaced in-place (which is called an update of the node), other reducers can still update it right after the in-place replacement. When a node is really replaced (not in-place), then we stop trying to apply reducers to it before we propagate the reduction through the relevant nodes. Before a message got printed only for the last reduction it went through. So in case a node was reduced in-place several times in a row, only the last update was printed, or none at all if after being reduced in-place it got reduced by being replaced by another node: only the non-in-place replacement was showed. Now each time an in-place reduction is applied to a node, a message gets printed. Bug: Change-Id: Id0f816fecd44c01d0253966c6decc4861be0c2fa Reviewed-on: https://chromium-review.googlesource.com/563365Reviewed-by:
Michael Starzinger <mstarzinger@chromium.org> Reviewed-by:
Ross McIlroy <rmcilroy@chromium.org> Commit-Queue: Alexandre Talon <alexandret@google.com> Cr-Commit-Position: refs/heads/master@{#46552}
-
Jaroslav Sevcik authored
BUG=v8:6410 Change-Id: I140eb9c79a7bf22b71c175fe152473d8bb8e7a76 Reviewed-on: https://chromium-review.googlesource.com/563694Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Commit-Queue: Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#46549}
-
- 09 May, 2017 1 commit
-
-
bmeurer authored
Due to speculative optimizations, the compiler can run into situations where it's asked perform impossible operations, like loading a tagged element as a float64 instead. All of this is guaranteed to be in dead code (unless there's a bug), but leads to confusion and violates assumptions in the compiler (that make perfect sense for code that is not dead). So teach LoadElimination not to mix up element accesses with incompatible representations. BUG=chromium:719479 R=jarin@chromium.org Review-Url: https://codereview.chromium.org/2866233002 Cr-Commit-Position: refs/heads/master@{#45185}
-
- 02 Jan, 2017 1 commit
-
-
bmeurer authored
Store maps on the CheckMaps operator instead of burning inputs for the individual maps. Use the same data structure (the ZoneHandleSet) in the LoadElimination to track multiple maps per object. BUG=v8:5267 R=jarin@chromium.org Review-Url: https://codereview.chromium.org/2431563002 Cr-Commit-Position: refs/heads/master@{#42010}
-
- 07 Nov, 2016 1 commit
-
-
bmeurer authored
When we hit an unspported field store, only flush the state of potentially aliasing objects, but don't flush the full state table. R=jarin@chromium.org BUG=v8:5608 Review-Url: https://codereview.chromium.org/2476213002 Cr-Commit-Position: refs/heads/master@{#40799}
-
- 17 Oct, 2016 1 commit
-
-
jochen authored
R=machenbach@chromium.org,titzer@chromium.org,bmeurer@chromium.org,jgruber@chromium.org BUG= CQ_INCLUDE_TRYBOTS=master.tryserver.v8:v8_win_dbg,v8_mac_dbg;master.tryserver.chromium.android:android_arm64_dbg_recipe Review-Url: https://codereview.chromium.org/2416243002 Cr-Commit-Position: refs/heads/master@{#40350}
-
- 02 Sep, 2016 1 commit
-
-
bmeurer authored
This makes it easier to read and maintain this code. R=epertoso@chromium.org Review-Url: https://codereview.chromium.org/2304093002 Cr-Commit-Position: refs/heads/master@{#39127}
-
- 01 Sep, 2016 1 commit
-
-
bmeurer authored
For two FinishRegion nodes, the alias analysis returned "may alias" even without properly looking through them. Drive-by-fix: Add meaningful output for --trace-turbo-load-elimination. R=jarin@chromium.org BUG=v8:5267 Review-Url: https://codereview.chromium.org/2301903002 Cr-Commit-Position: refs/heads/master@{#39075}
-
- 31 Aug, 2016 1 commit
-
-
bmeurer authored
If the type of a tracked field or element value is less precise than the advertised type of the field or element load, then we replace the load operation with a TypeGuard that guards the advertised type. R=jarin@chromium.org BUG=v8:5267 Review-Url: https://codereview.chromium.org/2295643002 Cr-Commit-Position: refs/heads/master@{#39032}
-
- 26 Aug, 2016 1 commit
-
-
bmeurer authored
Using the dedicated simplified operator we are able to eliminate redundant neuterung checks as long as there is no call in the effect chain. This yields a nice speed up for the Octane Mandreel benchmark (and TypedArray-heavy workloads in general). R=jarin@chromium.org BUG=v8:5267 Review-Url: https://codereview.chromium.org/2279213002 Cr-Commit-Position: refs/heads/master@{#38932}
-
- 08 Aug, 2016 1 commit
-
-
bmeurer authored
Introduce a dedicated MaybeGrowFastElements simplified operator, which tries to grow a fast elements backing store for a given element that should be added to an array/object. Use that to lower a growing keyed store to a sequence of 1) check index is a valid array index, 2) check stored value, 3) maybe grow elements backing store (and deoptimize if it would normalize), and 4) store the actual element. The actual growing is done by two dedicated GrowFastDoubleElements and GrowFastSmiOrObjectElements builtins, which are very similar to the GrowArrayElementsStub that is used by Crankshaft. Drive-by-fix: Turn CopyFixedArray into CopyFastSmiOrObjectElements builtin, similar to the new growing builtins, so we don't need to inline the store+write barrier for the elements into all optimized code objects anymore. Also fix a bug in the OperationTyper for NumberSilenceNaN, which was triggered by this change. BUG=v8:5272 Review-Url: https://codereview.chromium.org/2227493002 Cr-Commit-Position: refs/heads/master@{#38418}
-
- 05 Aug, 2016 3 commits
-
-
bmeurer authored
This extends JSNativeContextSpecialization with support for stores to fast object/smi element backing stores that are marked as copy-on-write. In this case we first call the CopyFixedArray builtin to take a copy of the elements backing store, and then store the new elements back to the object, and finally perform the actual element store. R=epertoso@chromium.org BUG=v8:4470 Committed: https://crrev.com/ac98ad22f049a59c48387f1bab1590f135d219c6 Review-Url: https://codereview.chromium.org/2218703003 Cr-Original-Commit-Position: refs/heads/master@{#38370} Cr-Commit-Position: refs/heads/master@{#38392}
-
bmeurer authored
Revert of [turbofan] Add support for copy-on-write element stores. (patchset #2 id:20001 of https://codereview.chromium.org/2218703003/ ) Reason for revert: Breaks tree? Original issue's description: > [turbofan] Add support for copy-on-write element stores. > > This extends JSNativeContextSpecialization with support for stores to > fast object/smi element backing stores that are marked as copy-on-write. > In this case we first call the CopyFixedArray builtin to take a copy of > the elements backing store, and then store the new elements back to the > object, and finally perform the actual element store. > > R=epertoso@chromium.org > BUG=v8:4470 > > Committed: https://crrev.com/ac98ad22f049a59c48387f1bab1590f135d219c6 > Cr-Commit-Position: refs/heads/master@{#38370} TBR=epertoso@chromium.org # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=v8:4470 Review-Url: https://codereview.chromium.org/2220513002 Cr-Commit-Position: refs/heads/master@{#38376}
-
bmeurer authored
This extends JSNativeContextSpecialization with support for stores to fast object/smi element backing stores that are marked as copy-on-write. In this case we first call the CopyFixedArray builtin to take a copy of the elements backing store, and then store the new elements back to the object, and finally perform the actual element store. R=epertoso@chromium.org BUG=v8:4470 Review-Url: https://codereview.chromium.org/2218703003 Cr-Commit-Position: refs/heads/master@{#38370}
-
- 02 Aug, 2016 1 commit
-
-
bmeurer authored
This adds support for lowering keyed access to JSTypedArray objects to element loads and stores instead of IC calls. There's still a lot of room for improvement, but the improvements can be done incrementally later. We add a dedicated UnsafePointerAdd operator, which sits in the effect chain, and does the (GC invisible) computation of addresses that are potentially inside HeapObjects. Also there's now a dedicated Retain operator, which ensures that we retain a certain tagged value, which is necessary to ensure that we keep a JSArrayBuffer alive as long as we might still potentially access elements in its backing store. R=epertoso@chromium.org Review-Url: https://codereview.chromium.org/2203693002 Cr-Commit-Position: refs/heads/master@{#38235}
-
- 29 Jul, 2016 1 commit
-
-
bmeurer authored
So far we always create explicit control flow for map checks during JSNativeContextSpecialization, or in the monomorphic case we used a CheckIf combined with a map comparison. In either case we cannot currently effectively utilize the map check information during load elimination to optimize (polymorphic) map checks and elements kind transitions. With the introduction of CheckMaps, we can now start optimizing map checks in a more effective fashion. This CL doesn't change anything in that direction yet, but merely changes the fundamental mechanism. This also removes the stable map optimization from the Typer, where it was always a bit odd, and puts it into the typed lowering and the native context specialization instead. R=epertoso@chromium.org BUG=v8:4930,v8:5141 Review-Url: https://codereview.chromium.org/2196653002 Cr-Commit-Position: refs/heads/master@{#38166}
-
- 26 Jul, 2016 1 commit
-
-
bmeurer authored
With the current approach we cannot eliminate context accesses in mid-size function contexts, so let's bump the limit a bit to make sure we can optimize those as well. R=jarin@chromium.org BUG=v8:4930,v8:5141 Review-Url: https://codereview.chromium.org/2182973004 Cr-Commit-Position: refs/heads/master@{#38050}
-
- 25 Jul, 2016 1 commit
-
-
bmeurer authored
Turn the LoadElimination into a proper graph Reducer so that it can run together with ValueNumbering and RedundancyElimination to a fixpoint for maximum load/check elimination. This also adds initial support for eliminating redundant LoadElement/StoreElement nodes. BUG=v8:4930,v8:5141 Review-Url: https://codereview.chromium.org/2164253002 Cr-Commit-Position: refs/heads/master@{#38015}
-
- 05 Jul, 2016 1 commit
-
-
bmeurer authored
This adds a new optimization phase to the TurboFan pipeline, which walks over the effect chain and tries to eliminate redundant loads (and even some stores) of object fields. We currently ignore element access, but that will probably need to be handled as well at some point. We also don't have any special treatment to properly track object maps, which is also on the list of things that will happen afterwards. The implementation is pretty simple currently, and probably way to inefficient. It's meant to be a proof-of-concept to iterate on. R=jarin@chromium.org BUG=v8:4930,v8:5141 Review-Url: https://codereview.chromium.org/2120253002 Cr-Commit-Position: refs/heads/master@{#37528}
-