- 07 May, 2018 1 commit
-
-
jgruber authored
Stubs and builtins are very similar. The main differences are that stubs can be parameterized and may be generated at runtime, whereas builtins are generated at mksnapshot-time and shipped with the snapshot (or embedded into the binary). My main motivation for these conversions is that we can generate faster calls and jumps to (embedded) builtins callees from (embedded) builtin callers. Instead of going through the builtins constants table indirection, we can simply do a pc-relative call/jump. This also unlocks other refactorings, e.g. removal of CallRuntimeDelayed. TBR=mlippautz@chromium.org Bug: v8:6666 Change-Id: I4cd63477f19a330ec70bbf20e2af8a42fb05fabb Reviewed-on: https://chromium-review.googlesource.com/1044245Reviewed-by: Jakob Gruber <jgruber@chromium.org> Reviewed-by: Michael Starzinger <mstarzinger@chromium.org> Commit-Queue: Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/master@{#53027}
-
- 19 Dec, 2017 1 commit
-
-
Georg Neis authored
It's still unused there but now at least it ends up in the feedback vector. Bug: v8:6791 Change-Id: I0114d317830b80be4715c74dc5a8950fff4d3485 Reviewed-on: https://chromium-review.googlesource.com/829136Reviewed-by: Michael Stanton <mvstanton@chromium.org> Commit-Queue: Georg Neis <neis@chromium.org> Cr-Commit-Position: refs/heads/master@{#50194}
-
- 12 Dec, 2017 1 commit
-
-
Georg Neis authored
R=jkummerow@chromium.org Bug: v8:6791 Change-Id: I6664ce5b9d208f2cb1e8320c9cc9a67a682316a7 Reviewed-on: https://chromium-review.googlesource.com/817316 Commit-Queue: Georg Neis <neis@chromium.org> Reviewed-by: Jakob Kummerow <jkummerow@chromium.org> Cr-Commit-Position: refs/heads/master@{#50022}
-
- 20 Nov, 2017 1 commit
-
-
Benedikt Meurer authored
The ToBooleanHints were used to represent the ToBoolean feedback collected by Fullcodegen. But Ignition doesn't collect this feedback and also TurboFan doesn't make use of the hints, so we should remove this for now. Bug: v8:7101 Change-Id: Ifc97d3ebb7494029b33ad79fc8bafdf3c08fb871 Reviewed-on: https://chromium-review.googlesource.com/778163Reviewed-by: Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#49470}
-
- 01 Sep, 2017 1 commit
-
-
Benedikt Meurer authored
This CL adds support to optimize for..in in fast enum-cache mode to the same degree that it was optimized in Crankshaft, without adding the same deoptimization loop that Crankshaft had with missing enum cache indices. That means code like for (var k in o) { var v = o[k]; // ... } and code like for (var k in o) { if (Object.prototype.hasOwnProperty.call(o, k)) { var v = o[k]; // ... } } which follows the https://eslint.org/docs/rules/guard-for-in linter rule, can now utilize the enum cache indices if o has only fast properties on the receiver, which speeds up the access o[k] significantly and reduces the pollution of the global megamorphic stub cache. For example the micro-benchmark in the tracking bug v8:6702 now runs faster than ever before: forIn: 1516 ms. forInHasOwnProperty: 1674 ms. forInHasOwnPropertySafe: 1595 ms. forInSum: 2051 ms. forInSumSafe: 2215 ms. Compared to numbers from V8 5.8 which is the last version running with Crankshaft forIn: 1641 ms. forInHasOwnProperty: 1719 ms. forInHasOwnPropertySafe: 1802 ms. forInSum: 2226 ms. forInSumSafe: 2409 ms. and V8 6.0 which is the current stable version with TurboFan: forIn: 1713 ms. forInHasOwnProperty: 5417 ms. forInHasOwnPropertySafe: 5324 ms. forInSum: 7556 ms. forInSumSafe: 11067 ms. It also improves the throughput on the string-fasta benchmark by around 7-10%, and there seems to be a ~5% improvement on the Speedometer/React benchmark locally. For this to work, the ForInPrepare bytecode was split into ForInEnumerate and ForInPrepare, which is very similar to how it was handled in Fullcodegen initially. In TurboFan we introduce a new operator LoadFieldByIndex that does the dynamic property load. This also removes the CheckMapValue operator again in favor of just using LoadField, ReferenceEqual and CheckIf, which work automatically with the EscapeAnalysis and the BranchConditionElimination. Bug: v8:6702 Change-Id: I91235413eea478ba77ace7bd14bb2f62e155dd9a Reviewed-on: https://chromium-review.googlesource.com/645949 Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by: Yang Guo <yangguo@chromium.org> Reviewed-by: Jaroslav Sevcik <jarin@chromium.org> Reviewed-by: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/master@{#47768}
-
- 28 Aug, 2017 1 commit
-
-
Georg Neis authored
This reverts commit 1169f55b. Reason for revert: http://crbug.com/758994 Original change's description: > Remove obsolete kNumber binop feedback. > > With the removal of Crankshaft, kNumber has become obsolete as > BinaryOperationFeedback. Turbofan uses kNumberOrOddball. > > Bug: > Change-Id: If577f5efcc81d7c08f43908f2764ff0ec6f8747c > Reviewed-on: https://chromium-review.googlesource.com/628376 > Reviewed-by: Jaroslav Sevcik <jarin@chromium.org> > Reviewed-by: Mythri Alle <mythria@chromium.org> > Reviewed-by: Jakob Kummerow <jkummerow@chromium.org> > Commit-Queue: Jakob Kummerow <jkummerow@chromium.org> > Cr-Commit-Position: refs/heads/master@{#47555} TBR=jkummerow@chromium.org,jarin@chromium.org,neis@chromium.org,mythria@chromium.org # Not skipping CQ checks because original CL landed > 1 day ago. Change-Id: I1b33f572f3e6865e00d2468bffcce2ea466814b3 Reviewed-on: https://chromium-review.googlesource.com/637711Reviewed-by: Georg Neis <neis@chromium.org> Commit-Queue: Georg Neis <neis@chromium.org> Cr-Commit-Position: refs/heads/master@{#47642}
-
- 23 Aug, 2017 1 commit
-
-
Georg Neis authored
With the removal of Crankshaft, kNumber has become obsolete as BinaryOperationFeedback. Turbofan uses kNumberOrOddball. Bug: Change-Id: If577f5efcc81d7c08f43908f2764ff0ec6f8747c Reviewed-on: https://chromium-review.googlesource.com/628376Reviewed-by: Jaroslav Sevcik <jarin@chromium.org> Reviewed-by: Mythri Alle <mythria@chromium.org> Reviewed-by: Jakob Kummerow <jkummerow@chromium.org> Commit-Queue: Jakob Kummerow <jkummerow@chromium.org> Cr-Commit-Position: refs/heads/master@{#47555}
-
- 11 Aug, 2017 1 commit
-
-
Benedikt Meurer authored
For Divide operations like r = a / b where r has only truncated uses (i.e. only used in bitwise operations), we used to generate a Float64Div unless we statically knew something about a and b, even if a and b have always been integers so far. Crankshaft was able to generate an integer division here, because Fullcodegen collected feedback independently for inputs and outputs of binary operations. This adds new BinaryOperationFeedback::kSignedSmallInputs, which is used specifically for Divide to state that we have seen only SignedSmall inputs thus far, but the outputs weren't always in the SignedSmall range. The issue was discovered in a WebGL Triangulation library and reported via https://twitter.com/mourner/status/895708603117518848 after Node 8.3.0 was released with I+TF. R=jarin@chromium.org Bug: v8:6698 Change-Id: I830e421a3bf91fc8fa3665cbb706bc13675a6d2b Reviewed-on: https://chromium-review.googlesource.com/612063 Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by: Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#47302}
-
- 19 Jul, 2017 1 commit
-
-
Ross McIlroy authored
There remained a few of regressions and we didn't see any significant improvement in the real world with this turned on. This CL reverts all the StringConcat bytecode work which landed. BUG=v8:6243 Change-Id: I832eb72e880ad41411dbec8fe29f71ef0f2025c8 Reviewed-on: https://chromium-review.googlesource.com/575130 Commit-Queue: Ross McIlroy <rmcilroy@chromium.org> Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by: Leszek Swirski <leszeks@chromium.org> Reviewed-by: Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/master@{#46769}
-
- 08 Jun, 2017 1 commit
-
-
Ross McIlroy authored
Add the ability for the typer to track whether a string could be the empty string. This is needed for typed lowering of JSStringConcat since we can't create cons string chain with the empty string in arbitrary positions. The ToPrimitiveToString bytecode handler is modified to collect feedback on whether it has ever seen the empty string, which is used by SpeculativeToPrimitiveToString to ensure that the output is non-empty (or depot) which will subsiquently be used to enable inline cons-string creation for the JSStringConcat operator in typed lowering in a subsiquent CL. BUG=v8:6243 Change-Id: I41b99b59798993f756aada8cff90fb137d65ea52 Reviewed-on: https://chromium-review.googlesource.com/522122 Commit-Queue: Ross McIlroy <rmcilroy@chromium.org> Reviewed-by: Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#45786}
-
- 06 Jun, 2017 1 commit
-
-
bmeurer authored
Previously Ignition would collect precise Number feedback for binary operators, but TurboFan would just ignore that and treat it the same as NumberOrOddball. That however generates a lot of unnecessary code, plus it defeats redundancy elimination if the same input is also used by compare operations, which do properly distinguish feedback Number and NumberOrOddball. This CL adds the missing bits to connect the existing functionality properly, i.e. adding the missing BinaryOperationHint and using the NumberOperationHint::kNumber in the representation selection for tagged inputs. R=jarin@chromium.org Review-Url: https://codereview.chromium.org/2923543003 Cr-Commit-Position: refs/heads/master@{#45732}
-
- 22 May, 2017 2 commits
-
-
Wiktor Garbacz authored
Change-Id: I20ed35a7fb5104a9cc66bb54fa8966589c43d7f9 Reviewed-on: https://chromium-review.googlesource.com/507287Reviewed-by: Andreas Haas <ahaas@chromium.org> Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by: Daniel Clifford <danno@chromium.org> Reviewed-by: Jakob Gruber <jgruber@chromium.org> Reviewed-by: Marja Hölttä <marja@chromium.org> Reviewed-by: Jochen Eisinger <jochen@chromium.org> Commit-Queue: Wiktor Garbacz <wiktorg@google.com> Cr-Commit-Position: refs/heads/master@{#45458}
-
bmeurer authored
Introduce a new Symbol comparison feedback bit in the lattice and collect that feedback on Equal/StrictEqual in Ignition. Utilize this feedback in TurboFan by adding a dedicated CheckSymbol operator to check for symbol inputs. This way we can optimize Symbol comparison where TurboFan doesn't know anything statically about either side, or abstract equality comparisons where TurboFan doesn't statically know anything about one side. BUG=v8:6278,v8:6344,v8:6423 R=jarin@chromium.org Review-Url: https://codereview.chromium.org/2893263002 Cr-Commit-Position: refs/heads/master@{#45455}
-
- 14 Feb, 2017 1 commit
-
-
bbudge authored
LOG=Y BUG=v8:4124,v8:5948 R=bradnelson@chromium.org,bmeurer@chromium.org,jochen@chromium.org,hpayer@chromium.org,danno@chromium.org Review-Url: https://codereview.chromium.org/2684313003 Cr-Original-Original-Commit-Position: refs/heads/master@{#43162} Committed: https://chromium.googlesource.com/v8/v8/+/d170c57ab996d00c4665a9d865bd5754a1806c6c Review-Url: https://codereview.chromium.org/2684313003 Cr-Original-Commit-Position: refs/heads/master@{#43169} Committed: https://chromium.googlesource.com/v8/v8/+/a9b59a11f1bfe069afabe5567f919727456f1f12 Review-Url: https://codereview.chromium.org/2684313003 Cr-Commit-Position: refs/heads/master@{#43176}
-
- 13 Feb, 2017 4 commits
-
-
franzih authored
Revert of Remove SIMD.js from V8. (patchset #7 id:120001 of https://codereview.chromium.org/2684313003/ ) Reason for revert: Breaks Node integration build. Original issue's description: > Remove SIMD.js from V8. > > LOG=Y > BUG=v8:4124,v8:5948 > R=bradnelson@chromium.org,bmeurer@chromium.org,jochen@chromium.org,hpayer@chromium.org,danno@chromium.org > > Review-Url: https://codereview.chromium.org/2684313003 > Cr-Original-Commit-Position: refs/heads/master@{#43162} > Committed: https://chromium.googlesource.com/v8/v8/+/d170c57ab996d00c4665a9d865bd5754a1806c6c > Review-Url: https://codereview.chromium.org/2684313003 > Cr-Commit-Position: refs/heads/master@{#43169} > Committed: https://chromium.googlesource.com/v8/v8/+/a9b59a11f1bfe069afabe5567f919727456f1f12 TBR=bradnelson@chromium.org,bmeurer@chromium.org,jochen@chromium.org,hpayer@chromium.org,danno@chromium.org,bradnelson@google.com,machenbach@chromium.org,bbudge@chromium.org # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=v8:4124,v8:5948 Review-Url: https://codereview.chromium.org/2695653005 Cr-Commit-Position: refs/heads/master@{#43170}
-
bbudge authored
LOG=Y BUG=v8:4124,v8:5948 R=bradnelson@chromium.org,bmeurer@chromium.org,jochen@chromium.org,hpayer@chromium.org,danno@chromium.org Review-Url: https://codereview.chromium.org/2684313003 Cr-Original-Commit-Position: refs/heads/master@{#43162} Committed: https://chromium.googlesource.com/v8/v8/+/d170c57ab996d00c4665a9d865bd5754a1806c6c Review-Url: https://codereview.chromium.org/2684313003 Cr-Commit-Position: refs/heads/master@{#43169}
-
bradnelson authored
Revert of Remove SIMD.js from V8. (patchset #7 id:120001 of https://codereview.chromium.org/2684313003/ ) Reason for revert: red Original issue's description: > Remove SIMD.js from V8. > > LOG=Y > BUG=v8:4124,5948 > R=bradnelson@chromium.org,bmeurer@chromium.org,jochen@chromium.org,hpayer@chromium.org,danno@chromium.org > (notry since trybots can't patch directory deletes) > NOTRY=true > > Review-Url: https://codereview.chromium.org/2684313003 > Cr-Commit-Position: refs/heads/master@{#43162} > Committed: https://chromium.googlesource.com/v8/v8/+/d170c57ab996d00c4665a9d865bd5754a1806c6c TBR=bmeurer@chromium.org,jochen@chromium.org,hpayer@chromium.org,danno@chromium.org,bradnelson@google.com,bbudge@chromium.org # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=v8:4124,5948 Review-Url: https://codereview.chromium.org/2692933002 Cr-Commit-Position: refs/heads/master@{#43164}
-
bbudge authored
LOG=Y BUG=v8:4124,5948 R=bradnelson@chromium.org,bmeurer@chromium.org,jochen@chromium.org,hpayer@chromium.org,danno@chromium.org (notry since trybots can't patch directory deletes) NOTRY=true Review-Url: https://codereview.chromium.org/2684313003 Cr-Commit-Position: refs/heads/master@{#43162}
-
- 18 Jan, 2017 1 commit
-
-
bmeurer authored
Collect Receiver feedback for abstract/strict equality in Ignition and use it in TurboFan to optimize JSEqual and JSStrictEqual operations to pointer equality instead of having to call Equal/StrictEqual builtins. R=jarin@chromium.org BUG=v8:5267,v8:5400 Review-Url: https://codereview.chromium.org/2639883002 Cr-Commit-Position: refs/heads/master@{#42435}
-
- 02 Jan, 2017 1 commit
-
-
bmeurer authored
Add machinery to Ignition and TurboFan to collect and consume InternalizedString feedback for abstract and strict equality comparisons. Here we can turn the comparison into a simple pointer equality check. R=jarin@chromium.org BUG=v8:5786 Review-Url: https://codereview.chromium.org/2609013002 Cr-Commit-Position: refs/heads/master@{#42008}
-
- 07 Dec, 2016 1 commit
-
-
lpy authored
This patch introduces: 1. ICStats class to store ic statistics items produced by V8, 2. A disabled by default tracing category v8.ic_stats, 3. An trace event V8.ICStats that contains ic statistics items in args, We store ic statistics items in an array until the array is full to reduce the number of trace events. TBR=jkummerow@chromium.org,ishell@chromium.org Review-Url: https://codereview.chromium.org/2503183002 Cr-Commit-Position: refs/heads/master@{#41559}
-
- 17 Nov, 2016 1 commit
-
-
rmcilroy authored
Collect string feedback for compare operations. Without this, functions which have a lot of string compare operations end up with a high generic type percentage, and don't get optimized until very late. Currently TurboFan doesn't use this String feedback for compare operations, but this could be done in future work if it is useful. BUG=chromium:660947 Review-Url: https://codereview.chromium.org/2506013005 Cr-Commit-Position: refs/heads/master@{#41078}
-
- 11 Nov, 2016 1 commit
-
-
jkummerow authored
And decouple hydrogen-instructions.h from code-stubs.h. This avoids all of Crankshaft being recompiled when code-stub-assembler.h changes. Review-Url: https://codereview.chromium.org/2498563002 Cr-Commit-Position: refs/heads/master@{#40912}
-
- 20 Sep, 2016 2 commits
-
-
mvstanton authored
Full code uses patching ICs for this feedback, and the interpreter uses the type feedback vector. It's a good idea to code the vector slots appropriately as ICs so that the runtime profiler can better gauge if the function is ready for tiering up from Ignition to TurboFan. As is, the feedback is stored in "general" slots which can't be characterized by the runtime profiler into feedback states. This CL addresses that problem. Note that it's also important to carefully exclude these slots from the profiler's consideration when determining if you want to optimize from Full code. BUG= Review-Url: https://codereview.chromium.org/2342853002 Cr-Commit-Position: refs/heads/master@{#39555}
-
bmeurer authored
Extract String feedback on Add operation and utilize to lower ConsString creation in JSTypedLowering when we know that a String addition will definitely result in the creation of a ConsString. Note that Crankshaft has to guard the potential length overflow of the resulting string with an eager deoptimization exit, while we can safely throw an exception in that case. Also note that the bytecode pipeline does not currently provide the String feedback for the addition, which has to be added. BUG=v8:5267 R=jarin@chromium.org Review-Url: https://codereview.chromium.org/2354853002 Cr-Commit-Position: refs/heads/master@{#39540}
-
- 09 Aug, 2016 1 commit
-
-
bmeurer authored
Remove the useless information from the BinaryOperationHints and CompareOperationHints, and cache the JS operators appropriately. R=epertoso@chromium.org Review-Url: https://codereview.chromium.org/2228983002 Cr-Commit-Position: refs/heads/master@{#38506}
-
- 08 Aug, 2016 1 commit
-
-
bmeurer authored
This allows us to consume the type hints gathered by the CompareIC for the abstract equality and inequality operators. We need to distinguish Number and NumberOrOddball feedback now, as abstract equality doesn't truncate null and undefined to Number. R=epertoso@chromium.org BUG=v8:4583 Review-Url: https://codereview.chromium.org/2222983002 Cr-Commit-Position: refs/heads/master@{#38432}
-
- 13 Jul, 2016 1 commit
-
-
bmeurer authored
Extends the truncation and type checks for NumberOrUndefined in representation selection and truncation analysis to deal with all oddballs not just undefined. Also extend the type hints to always report NumberOrOddball. This is necessary for the bitwise and shift operators where NUMBER feedback actually means NUMBER or ODDBALL. R=jarin@chromium.org Review-Url: https://codereview.chromium.org/2149583002 Cr-Commit-Position: refs/heads/master@{#37711}
-
- 16 Jun, 2016 1 commit
-
-
jarin authored
Review-Url: https://codereview.chromium.org/2035383003 Cr-Commit-Position: refs/heads/master@{#37024}
-
- 02 Jun, 2016 1 commit
-
-
jarin authored
This introduces optimized number operations based on type feedback. Summary of changes: 1. Typed lowering produces SpeculativeNumberAdd/Subtract for JSAdd/Subtract if there is suitable feedback. The speculative nodes are connected to both the effect chain and the control chain and they retain the eager frame state. 2. Simplified lowering now executes in three phases: a. Propagation phase computes truncations by traversing the graph from uses to definitions until checkpoint is reached. It also records type-check decisions for later typing phase, and computes representation. b. The typing phase computes more precise types base on the speculative types (and recomputes representation for affected nodes). c. The lowering phase performs lowering and inserts representation changes and/or checks. 3. Effect-control linearization lowers the checks to machine graphs. Notes: - SimplifiedLowering will be refactored to have handling of each operation one place and with clearer input/output protocol for each sub-phase. I would prefer to do this once we have more operations implemented, and the pattern is clearer. - The check operations (Checked<A>To<B>) should have some flags that would affect the kind of truncations that they can handle. E.g., if we know that a node produces a number, we can omit the oddball check in the CheckedTaggedToFloat64 lowering. - In future, we want the typer to reuse the logic from OperationTyper. BUG=v8:4583 LOG=n Review-Url: https://codereview.chromium.org/1921563002 Cr-Commit-Position: refs/heads/master@{#36674}
-
- 03 Dec, 2015 1 commit
-
-
bmeurer authored
Extract ToBoolean hints from the fullcodegen code object and put them into the ToBoolean nodes created by the AstGraphBuilder. We currently do not yet consume this feedback, that will be done in a followup CL. R=mstarzinger@chromium.org BUG=v8:4583 LOG=n Review URL: https://codereview.chromium.org/1494973002 Cr-Commit-Position: refs/heads/master@{#32576}
-
- 01 Dec, 2015 1 commit
-
-
bmeurer authored
This is the initial support for binary operation hints on javascript binary operators, i.e. JSAdd, JSSubtract and so on. The hints are extracted from the fullcodegen code object before graph building and the AstGraphBuilder puts those hints on the operators if available. R=jarin@chromium.org BUG=v8:4583 LOG=n Review URL: https://codereview.chromium.org/1487973002 Cr-Commit-Position: refs/heads/master@{#32443}
-