The array methods are a bit special since if we know it is a packed array we do not need to do any in checks.
On Tue, Aug 13, 2013 at 2:17 PM, Vyacheslav Egorov <vego...@chromium.org>wrote: > Looking at Runtime_HasElement it does not really have any fast path for > dense arrays. (it does tons of checks before it > reaches GetElementsAccessor()->GetAttributes(...)). Which explains why > speedup is minor and it also indicates that unconditionally replacing "in" > with something simpler would most certainly violate some semantical > expectations. > > > Vyacheslav Egorov > > > On Tue, Aug 13, 2013 at 7:07 PM, Erik Arvidsson <a...@chromium.org> wrote: > >> HasElements is 21% faster than existing code and it still passes all >> tests. >> >> I'll provide a new CL that only does that. >> >> >> On Tue, Aug 13, 2013 at 12:05 PM, Vyacheslav Egorov < >> vego...@chromium.org> wrote: >> >>> s/%HasElement(i, array)/%HasElement(array, i)/ >>> >>> Vyacheslav Egorov >>> >>> >>> On Tue, Aug 13, 2013 at 6:04 PM, Vyacheslav Egorov <vego...@chromium.org >>> > wrote: >>> >>>> DBC: >>>> >>>> Can't we just manually inline 'in' here? >>>> >>>> if I am not mistaken x in y essentially just calls IN function from >>>> runtime.js >>>> >>>> In this particular case you should be able just to replace i in array >>>> with %HasElement(i, array) and hopefully fast path in the %HasElement would >>>> take care of the rest. >>>> >>>> Ideally Crankshaft should take care of this but well... One can dream >>>> :-) >>>> >>>> Vyacheslav Egorov >>>> >>>> >>>> On Tue, Aug 13, 2013 at 5:47 PM, <mstarzin...@chromium.org> wrote: >>>> >>>>> >>>>> https://codereview.chromium.**org/22545007/diff/20001/src/**array.js<https://codereview.chromium.org/22545007/diff/20001/src/array.js> >>>>> File src/array.js (right): >>>>> >>>>> https://codereview.chromium.**org/22545007/diff/20001/src/** >>>>> array.js#newcode1263<https://codereview.chromium.org/22545007/diff/20001/src/array.js#newcode1263> >>>>> src/array.js:1263: if (!isProxy && %HasFastPackedElements(array) || i >>>>> in >>>>> array) { >>>>> On 2013/08/13 14:10:22, Michael Starzinger wrote: >>>>> >>>>>> It is _really_ surprising that the runtime call into >>>>>> Runtime_HasFastPackedElements is cheaper than the "in" keyword. This >>>>>> >>>>> suggests >>>>> >>>>>> that there is a lot of potential in actually improving "in" in >>>>>> >>>>> general. This >>>>> >>>>>> needs investigation of the generated code! >>>>>> >>>>> >>>>> Now that I think about it, I don't actually think that this is a valid >>>>> optimization either. What happens if the callback actually changes the >>>>> array in a way so that it remains in fast-packed mode, but "i" still >>>>> runs out of bounds. Imagine the following callback. >>>>> >>>>> var array = [1,2,3,4,5,6]; >>>>> Object.defineProperty(array, '1', { >>>>> get: function () { array.length = 3; }, >>>>> configurable: true >>>>> }); >>>>> array.forEach(f); >>>>> >>>>> >>>>> https://codereview.chromium.**org/22545007/<https://codereview.chromium.org/22545007/> >>>>> >>>>> -- >>>>> -- >>>>> v8-dev mailing list >>>>> v8-dev@googlegroups.com >>>>> http://groups.google.com/**group/v8-dev<http://groups.google.com/group/v8-dev> >>>>> ---You received this message because you are subscribed to the Google >>>>> Groups "v8-dev" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to >>>>> v8-dev+unsubscribe@**googlegroups.com<v8-dev%2bunsubscr...@googlegroups.com> >>>>> . >>>>> For more options, visit >>>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out> >>>>> . >>>>> >>>> >>>> >>> >> >> >> -- >> erik >> >> >> > -- erik -- -- v8-dev mailing list v8-dev@googlegroups.com http://groups.google.com/group/v8-dev --- You received this message because you are subscribed to the Google Groups "v8-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-dev+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.