- 29 Oct, 2018 1 commit
-
-
Benedikt Meurer authored
This introduces Word64 support for the CheckBounds operator, which now lowers to either CheckedUint32Bounds or CheckedUint64Bounds after the representation selection. The right hand side of CheckBounds can now be any positive safe integer on 64-bit architectures, whereas it remains Unsigned31 for 32-bit architectures. We only use the extended Word64 support when the right hand side is outside the Unsigned31 range, so for everything except DataViews this means that the performance should remain the same. The typing rule for the CheckBounds operator was updated to reflect this new behavior. The CheckBounds with a right hand side outside the Unsigned31 range will pass a new Signed64 feedback kind, which is handled with newly introduced CheckedFloat64ToInt64 and CheckedTaggedToInt64 operators in representation selection. The JSCallReducer lowering for DataView getType()/setType() methods was updated to not smi-check the [[ByteLength]] and [[ByteOffset]] anymore, but instead just use the raw uintptr_t values and operate on any value (for 64-bit architectures these fields can hold any positive safe integer, for 32-bit architectures it's limited to Unsigned31 range as before). This means that V8 can now handle huge DataViews fully, without falling off a performance cliff. This refactoring even gave us some performance improvements, on a simple micro-benchmark just exercising different DataView accesses we go from testDataViewGetUint8: 796 ms. testDataViewGetUint16: 997 ms. testDataViewGetInt32: 994 ms. testDataViewGetFloat64: 997 ms. to testDataViewGetUint8: 895 ms. testDataViewGetUint16: 889 ms. testDataViewGetInt32: 888 ms. testDataViewGetFloat64: 890 ms. meaning we lost around 10% on the single byte case, but gained 10% across the board for all the other element sizes. Design-Document: http://bit.ly/turbofan-word64 Bug: chromium:225811, v8:4153, v8:7881, v8:8171, v8:8383 Change-Id: Ic9d1bf152e47802c04dcfd679372e5c85e4abc83 Reviewed-on: https://chromium-review.googlesource.com/c/1303732Reviewed-by:
Sigurd Schneider <sigurds@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#57095}
-
- 01 Oct, 2018 1 commit
-
-
Benedikt Meurer authored
Following up on the earlier work regarding redundant Smi checks in https://chromium-review.googlesource.com/c/v8/v8/+/1246181, it was noticed that the handling of the 0 and -0 and how some operations identify these is not really consistent, but was still rather ad-hoc. This change tries to unify the handling a bit by making sure that all number comparisons generally pass truncations that identify zeros, since for the number comparisons in JavaScript there's no difference between 0 and -0. In the same spirit NumberAbs and NumberToBoolean should also pass these truncations, since they also don't care about the differences between 0 and -0. Adjust NumberCeil, NumberFloor, NumberTrunc, NumberMin and NumberMax to pass along any incoming kIdentifiesZeros truncation, since these operations also don't really care whether the inputs can be -0 if the use nodes don't care. Also utilize the kIdentifiesZeros truncation for NumberModulus with Signed32 inputs, because it's kind of common to do something like `x % 2 === 0`, where it doesn't really matter whether `x % 2` would eventually produce a negative zero (since that would still be considered true for the sake of the comparison). This also adds a whole lot of tests to ensure that not only are these optimizations correct, but also that we do indeed perform them. Drive-by-fix: The `NumberAbs(x)` would incorrectly lower to just `x` for PositiveIntegerOrMinusZeroOrNaN inputs, which was obviously wrong in case of -0. This was fixed as well, and an appropriate test was added. The reason for the unification is that with the introduction of Word64 for CheckBounds (which is necessary to support large TypedArrays and DataViews) we can no longer safely pass Word32 truncations for the interesting cases, since the index might be outside the Signed32 or Unsigned32 ranges, but we still identify 0 and -0 for the sake of the bounds check, and so it's important that this is handled consistently to not regress performance on TypedArrays and DataViews accesses. Bug: v8:8015, v8:8178 Change-Id: Ia1d32f1b726754cea1e5793105d9423d84a6393a Reviewed-on: https://chromium-review.googlesource.com/1246172Reviewed-by:
Sigurd Schneider <sigurds@chromium.org> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#56325}
-
- 17 Sep, 2018 1 commit
-
-
Benedikt Meurer authored
This change introduces the necessary conversion operators to convert from Word64 to other representations (Tagged, Word32, Float64, etc.), and plugs in the Word64 representation for NumberAdd/NumberSubtract, such that TurboFan will go to Int64Add/Sub on 64-bit architectures when the inputs and the output of the operation is in safe integer range. This includes the necessary changes to the Deoptimizer to be able to rematerialize Int64 values as Smi/HeapNumber when going back to Ignition later. This change might affect performance, although measurements indicate that there should be no noticable performance impact. The goal is to have TurboFan support Word64 representation to a degree that changing the TypedArray length to an uint64_t (for 64-bit archs) becomes viable and doesn't have any negative performance implications. Independent of that we might get performance improvements in other areas such as for crypto code later. Bug: v8:4153, v8:7881, v8:8171, v8:8178 Design-Document: bit.ly/turbofan-word64 Change-Id: I29d56e2a31c1bae61d04a89d29ea73f21fd49c59 Cq-Include-Trybots: luci.chromium.try:linux_chromium_headless_rel Reviewed-on: https://chromium-review.googlesource.com/1225709 Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#55937}
-
- 14 Sep, 2018 2 commits
-
-
Benedikt Meurer authored
This adds support to TurboFan's representation selection for the Word64 representation, and makes use of that to handle indices for memory access and allocation instructions (i.e. LoadElement, StoreElement, Allocate, etc.). These instructions had previously used Word32 as representation for the indices / sizes, and then internally converted it to the correct representation (aka Word64 on 64-bit architectures) later on, but that was kind of brittle, and sometimes led to weird generated code. The change thus only adds support to convert integer values in the safe integer range from all kinds of representations to Word64 (on 64-bit architectures). We don't yet handle the opposite direction and none of the representation selection heuristics for the numeric operations were changed so far. This will be done in follow-up CLs. This CL itself is supposed to be neutral wrt. functionality, and only serves as a starting point, and a cleanup for the (weird) implicit Word64 index/size handling. Bug: v8:7881, v8:8015, v8:8171 Design-Document: http://bit.ly/turbofan-word64 Change-Id: I3c6961a0e96cbc3fb8ac9d3e1be8f2e5c89bfd25 Cq-Include-Trybots: luci.chromium.try:linux_chromium_headless_rel Reviewed-on: https://chromium-review.googlesource.com/1224932 Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#55886}
-
Benedikt Meurer authored
This truncation doesn't have a proper meaning anyways and has never been used inside the representation selection. For pointer fields we also don't need to pass on a truncation anyways. Bug: v8:8015 Change-Id: I5ff49e20b70fa70d6bcf7401a357cd7ad9f1a938 Reviewed-on: https://chromium-review.googlesource.com/1226870 Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#55885}
-
- 11 Sep, 2018 1 commit
-
-
Jaroslav Sevcik authored
This inserts unreachable node after uncoditional deopt in bit-to-word conversion and wires it as an input to the dead-value. This fixes a problem, where a floating dead-value was inserted by a change of bit-to-word (which always fails because bit cannot be converted to word). Without the unrachable node (which this CL inserts in the effect chain after deopt), the dead value was scheduled before the uncoditional deoptimization and crash at runtime. Unfortunately, I do not know how to construct a test that does not end up in an infinite loop. Bug: chromium:878805 Change-Id: Ia03060949f6a9b914807f5614fadcf2271911998 Reviewed-on: https://chromium-review.googlesource.com/1196663Reviewed-by:
Tobias Tebbi <tebbi@chromium.org> Commit-Queue: Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#55770}
-
- 14 May, 2018 1 commit
-
-
Georg Neis authored
We must not accept something of kBit representation as of kWord32 representation (unless it's truncated accordingly). Deopt instead. Bug: v8:7740 Change-Id: Ib4f73600d66f8762a6e22f7ea1ce79e8ef451b34 Reviewed-on: https://chromium-review.googlesource.com/1054670 Commit-Queue: Georg Neis <neis@chromium.org> Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#53144}
-
- 28 Apr, 2018 1 commit
-
-
Jaroslav Sevcik authored
This is part of the effort to decrease the amount of undefined behavior. that v8 relies on. The main change here is to represent types with class Type rather than with pointer Type*. To make the CL smaller, I used an operator overload hack to separate the change from `->` to `.`. I am working on a CL that will remove the operator and change all those arrows to dots. Bug: v8:3770 Change-Id: I71a197cb739a1467937bc95c2a757fab0469aa22 Reviewed-on: https://chromium-review.googlesource.com/1032551 Commit-Queue: Jaroslav Sevcik <jarin@chromium.org> Reviewed-by:
Sigurd Schneider <sigurds@chromium.org> Cr-Commit-Position: refs/heads/master@{#52872}
-
- 08 Feb, 2018 1 commit
-
-
Sigurd Schneider authored
Bug: v8:7250 Change-Id: If4c9d0b32939a06993d3ffb39ac4b19edbad422f Reviewed-on: https://chromium-review.googlesource.com/906731Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Commit-Queue: Sigurd Schneider <sigurds@chromium.org> Cr-Commit-Position: refs/heads/master@{#51184}
-
- 23 Jan, 2018 1 commit
-
-
Sigurd Schneider authored
Simplified lowering may loose feedback by inserting Checked conversions for BoundsChecks in case the bounds check gets optimized away later on. Bug: v8:7127 Change-Id: I254a29ba4e578d653d1dee2d70582ce0a4b57789 Reviewed-on: https://chromium-review.googlesource.com/878743Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Commit-Queue: Sigurd Schneider <sigurds@chromium.org> Cr-Commit-Position: refs/heads/master@{#50783}
-
- 18 Dec, 2017 1 commit
-
-
Sigurd Schneider authored
This change is quite invasive, because CheckSmi is lowered through representation change depending on UseInfo to several different checked conversion operators. This CL adds feedback to every checked conversion operator to Int32. Bug: v8:7127, v8:7204 Change-Id: Icb780e5a69d321c2ec161c3c2a32984bdcf101f1 Reviewed-on: https://chromium-review.googlesource.com/831521Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Sigurd Schneider <sigurds@chromium.org> Cr-Commit-Position: refs/heads/master@{#50167}
-
- 05 Sep, 2017 1 commit
-
-
Jaroslav Sevcik authored
Checked number is not automatically truncating to float64. Bug: chromium:761892 Change-Id: I34bd5d7867cd38b2be18cd39a810605603f515e2 Reviewed-on: https://chromium-review.googlesource.com/649513 Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#47824}
-
- 24 Jul, 2017 1 commit
-
-
Jaroslav Sevcik authored
Change-Id: I8a1e53d1836f4c68f571d397c35dd6f091e68076 Reviewed-on: https://chromium-review.googlesource.com/577537Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#46829}
-
- 22 May, 2017 1 commit
-
-
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}
-
- 18 Apr, 2017 1 commit
-
-
bmeurer authored
The CheckBounds operator identifies zeros, but we ignore these bits in the representation selector, which generates unnecessary -0 checks for array accesses. R=jarin@chromium.org BUG=v8:5267 Review-Url: https://codereview.chromium.org/2823203002 Cr-Commit-Position: refs/heads/master@{#44680}
-
- 08 Mar, 2017 1 commit
-
-
jarin authored
This introduces a new truncation bit for truncation of minus-zero to zero. At the moment it is only used to handle the limit cases of deopt, such as the one in the Google maps workload (see simplified version below), where the -q (which is desugared to q * -1.0) currently deoptimizes because the result would produce minus zero. To handle this situation, we exploit the knowledge that righthand side of + cannot be -0, so even if lefthand side was -0, the result would still be 0 (so the + operation cannot distinguish between left hand side 0 and -0). function f(q) { q -= 4; return (-q) + q; } f(10); f(10); %OptimizeFunctionOnNextCall(f); f(4); Review-Url: https://codereview.chromium.org/2734253002 Cr-Commit-Position: refs/heads/master@{#43661}
-
- 10 Jan, 2017 1 commit
-
-
epertoso authored
BUG= Review-Url: https://codereview.chromium.org/2626603002 Cr-Commit-Position: refs/heads/master@{#42186}
-
- 03 Nov, 2016 1 commit
-
-
bmeurer authored
For lowering CheckHeapObject, always report TaggedPointer representation and let the RepresentationChanger come up with a reasonable conversion from whatever input representation to TaggedPointer. This way we no longer insert the useless ChangeSomethingToTagged and then check the result for HeapObject, i.e. mostly reduces the amount of useless code being generated. Note there are now two operators ChangeFloat64ToTaggedPointer and the old ChangeFloat64ToTagged, because their semantics different wrt. the strength reduction in the SimplifiedOperatorReducer. Also set the output MachineRepresentation::kTaggedPointer properly in SimplifiedLowering whenever we know that we produce a HeapObject. R=jarin@chromium.org BUG=v8:5267 Review-Url: https://codereview.chromium.org/2476593002 Cr-Commit-Position: refs/heads/master@{#40725}
-
- 13 Oct, 2016 1 commit
-
-
mvstanton authored
R=jarin@chromium.org BUG= Review-Url: https://codereview.chromium.org/2407153007 Cr-Commit-Position: refs/heads/master@{#40266}
-
- 12 Oct, 2016 1 commit
-
-
georgia.kouveli authored
The only way to get a minus zero result from subtraction is (-0) - (+0) = -0, hence checking for minus zero on the RHS is redundant. This is causing some unnecessary deoptimisations in Box2D from Octane on 32-bit platforms. BUG= Review-Url: https://codereview.chromium.org/2410883003 Cr-Commit-Position: refs/heads/master@{#40207}
-
- 23 Sep, 2016 1 commit
-
-
Benedikt Meurer authored
Rename the high-level operators CheckTaggedSigned to CheckSmi and CheckTaggedPointer to CheckHeapObject, to better match the naming convention (i.e. ObjectIsSmi and CheckSmi, ObjectIsString and CheckString, etc.). For lowering CheckSmi, always report TaggedSigned representation and let the RepresentationChanger come up with a reasonable conversion from whatever input representation to TaggedSigned. This way we no longer insert the useless ChangeSomethingToTagged and then Smi check the result sequences, i.e. mostly reduces the amount of useless code being generated. But we also observe a few performance improvements on some crypto benchmarks. This would enable us to avoid the Smi canonicalization when going from Float64 to Tagged completely and thus match the representation selection of Crankshaft in many areas (which might reduce the amount of polymorphism until we fix our object model). A follow-up CL will do the same for CheckHeapObject. BUG=v8:5267 R=jarin@chromium.org Review URL: https://codereview.chromium.org/2362173003 . Cr-Commit-Position: refs/heads/master@{#39654}
-
- 14 Sep, 2016 1 commit
-
-
bmeurer authored
Add a dedicated simplified operator to inline the general case for the ToBoolean conversion. In a follow up CL we will also use the ToBoolean hints gathered by the baseline compiler. CQ_INCLUDE_TRYBOTS=master.tryserver.v8:v8_linux_arm64_gc_stress_dbg R=jarin@chromium.org BUG=v8:5267 Committed: https://crrev.com/8c50b51ab3d21efcd2f6900d83962159f21e1590 Review-Url: https://codereview.chromium.org/2167593002 Cr-Original-Commit-Position: refs/heads/master@{#37882} Cr-Commit-Position: refs/heads/master@{#39420}
-
- 08 Sep, 2016 1 commit
-
-
bmeurer authored
The optimization is not correct for unsigned output types, and we the overall complexity seems too high. We need to find a better way to take into account the input/output type restrictions. Also added a regression test for the unsigned output bug. BUG=v8:5267,v8:5270,v8:5357 TBR=jarin@chromium.org Review-Url: https://codereview.chromium.org/2320013002 Cr-Commit-Position: refs/heads/master@{#39262}
-
- 06 Sep, 2016 2 commits
-
-
jarin authored
Similarly to the word32->float64 case, we interpret word32 as uint32 if the value is word32 truncated. This is fine because the users declared they only care about mod 2^32 of the value (that's what word32 truncation means). This CL also removes the ad-hoc handling of this situation (https://codereview.chromium.org/2311903002). BUG=chromium:644048 Review-Url: https://codereview.chromium.org/2312003005 Cr-Commit-Position: refs/heads/master@{#39224}
-
bmeurer authored
Keep the unrestricted feedback type around during retyping and use that to check whether an overflow check is actually necessary when doing the lowering of SpeculativeNumberAdd/Subtract/Multiply. If based on feedback that is taken for the inputs we already know that the result of the operation fits into Signed32 or Unsigned32 range, then we don't need to perform any overflow checks. R=mvstanton@chromium.org BUG=v8:5267,v8:5270 Review-Url: https://codereview.chromium.org/2309193003 Cr-Commit-Position: refs/heads/master@{#39198}
-
- 01 Sep, 2016 1 commit
-
-
mvstanton authored
This furthers our goal of avoiding using the representation dimension of the Type class. BUG=v8:5270 Review-Url: https://codereview.chromium.org/2295883004 Cr-Commit-Position: refs/heads/master@{#39064}
-
- 29 Aug, 2016 1 commit
-
-
mvstanton authored
Introduced MachineType::TaggedSigned() and TaggedPointer(). The idea is to quit using the representational dimension of Type, and instead encode this information in the MachineRepresentation (itself lightly wrapped in MachineType, along with MachineSemantic). There are three parts to the whole change: 1) Places that set the machine representation - constant nodes, loads nad stores, global object and native context specialization. 2) Places that propagate type/representation - this is representation inference (aka simplified lowering). At the end of this process we expect to have a MachineRepresentation for every node. An interesting part of this is phi merging. 3) Places that examine representation - WriteBarrier elimination does this. Currently it's looking at the Type representation dimension, but as a part of this change (or in a soon-to-follow change) it can simply examine the MachineRepresentation. BUG= Review-Url: https://codereview.chromium.org/2258073002 Cr-Commit-Position: refs/heads/master@{#38978}
-
- 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}
-
- 03 Aug, 2016 1 commit
-
-
bmeurer authored
So far we treated SignedSmall and Signed32 feedback the same for number operations. However it would be beneficial to generate (a lot) less code if we only do a Smi check on the inputs instead of doing the full Smi + HeapNumber + conversion check that we need to do for Signed32 feedback. R=epertoso@chromium.org BUG=v8:4583 Review-Url: https://codereview.chromium.org/2207893002 Cr-Commit-Position: refs/heads/master@{#38290}
-
- 27 Jul, 2016 2 commits
-
-
epertoso authored
This required the introduction of the CheckedNumberOrOddballAsWord32 use info, and a change in the RepresentationChanger to handle it. BUG= Review-Url: https://codereview.chromium.org/2184513003 Cr-Commit-Position: refs/heads/master@{#38086}
-
jarin authored
Review-Url: https://codereview.chromium.org/2183373002 Cr-Commit-Position: refs/heads/master@{#38078}
-
- 21 Jul, 2016 2 commits
-
-
bmeurer authored
Use better names for the query methods on the Truncation class, that express more clearly what you intend to query. R=jarin@chromium.org Review-Url: https://codereview.chromium.org/2171703002 Cr-Commit-Position: refs/heads/master@{#37935}
-
bmeurer authored
We can actually eliminate certain effectful operations like loads and speculative number operations during representation selection if we discover that their value outputs are unused (we also propagate this information through pure operations as well, so that we remove the maximum number of effectful nodes possible). R=jarin@chromium.org Review-Url: https://codereview.chromium.org/2168023002 Cr-Commit-Position: refs/heads/master@{#37928}
-
- 20 Jul, 2016 2 commits
-
-
bmeurer authored
Revert of [turbofan] Introduce TruncateTaggedToBit operator for ToBoolean truncation. (patchset #2 id:20001 of https://codereview.chromium.org/2167593002/ ) Reason for revert: Breaks arm64 gc stress: https://build.chromium.org/p/client.v8.ports/builders/V8%20Linux%20-%20arm64%20-%20sim%20-%20gc%20stress/builds/1605 Original issue's description: > [turbofan] Introduce TruncateTaggedToBit operator for ToBoolean truncation. > > Add a dedicated simplified operator to inline the general case for the > ToBoolean conversion. In a follow up CL we will also use the ToBoolean > hints gathered by the baseline compiler. > > Committed: https://crrev.com/8c50b51ab3d21efcd2f6900d83962159f21e1590 > Cr-Commit-Position: refs/heads/master@{#37882} TBR=jarin@chromium.org # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Review-Url: https://codereview.chromium.org/2170433002 Cr-Commit-Position: refs/heads/master@{#37899}
-
bmeurer authored
Add a dedicated simplified operator to inline the general case for the ToBoolean conversion. In a follow up CL we will also use the ToBoolean hints gathered by the baseline compiler. Review-Url: https://codereview.chromium.org/2167593002 Cr-Commit-Position: refs/heads/master@{#37882}
-
- 13 Jul, 2016 2 commits
-
-
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}
-
bmeurer authored
Checked integer division and modulus can be done more efficiently if we know that the inputs are in Unsigned32 range. Drive-by-fix: Replace the TypeCheckKind on NodeInfo by a proper restriction type, and thread the feedback type through binary Number operations similar to what we do for their speculative versions. Also deal with Unsigned32 inputs for integer multiplication. R=jarin@chromium.org BUG=v8:4583,v8:5141 Review-Url: https://codereview.chromium.org/2149493002 Cr-Commit-Position: refs/heads/master@{#37703}
-
- 12 Jul, 2016 1 commit
-
-
bmeurer authored
Turn the retyping pass of SimplifiedLowering into a proper phase, and make it possible to propagate feedback types through non-speculative operators. This defers the output representation selection to the retyping phase, and checks that we don't mess up. As a first user, we consume input type feedback for NumberAbs as well. Long-term we can add all other operators to the mix. R=jarin@chromium.org Review-Url: https://codereview.chromium.org/2139203002 Cr-Commit-Position: refs/heads/master@{#37672}
-
- 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}
-
- 22 Apr, 2016 1 commit
-
-
bmeurer authored
Get rid of further typing checks from ChangeLowering and put them into the representation selection pass instead (encoding the information in the operator instead). Drive-by-change: Rename ChangeSmiToInt32 to ChangeTaggedSignedToInt32 for consistency about naming Tagged, TaggedSigned and TaggedPointer. R=jarin@chromium.org Review URL: https://codereview.chromium.org/1909343002 Cr-Commit-Position: refs/heads/master@{#35723}
-