Closed Bug 1388388 Opened 9 years ago Closed 9 years ago

Add a megamorphic SetElem stub

Categories

(Core :: JavaScript Engine: JIT, enhancement)

enhancement
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla57
Tracking Status
firefox57 --- fixed

People

(Reporter: jandem, Assigned: jandem)

References

Details

Attachments

(1 file)

Attached patch Patch — — Splinter Review
Megamorphic SETELEMs are pretty common on Speedometer but hard to optimize with IC stubs, especially when adding new properties. However the least we could do is attach a stub that just calls js::SetObjectElement. The attached patch does this and it improves the micro-benchmark below from 485-500 to 430-450 ms. function f() { var o = {}; var props = []; for (var i = 0; i < 50; i++) { props.push("foo" + i); } var t = new Date; for (var i = 0; i < 100000; i++) { for (var j = 0; j < 50; j++) { o[props[j]] = j; } } print(new Date - t); } f();
Attachment #8894907 - Flags: review?(evilpies)
Comment on attachment 8894907 [details] [diff] [review] Patch Review of attachment 8894907 [details] [diff] [review]: ----------------------------------------------------------------- ::: js/src/jit/VMFunctions.h @@ +892,5 @@ > bool > GetPrototypeOf(JSContext* cx, HandleObject target, MutableHandleValue rval); > > +typedef bool (*SetObjectElementFn)(JSContext*, HandleObject, HandleValue, > + HandleValue, HandleValue, bool); I should move this to VMFunctions.cpp (The reason for having this in VMFunctions.h/cpp is to avoid generating 4 copies of the same VM wrapper for this C++ function. I think at some point we should do this for more VM functions.)
Comment on attachment 8894907 [details] [diff] [review] Patch Review of attachment 8894907 [details] [diff] [review]: ----------------------------------------------------------------- ::: js/src/jit/CacheIR.cpp @@ +3588,5 @@ > + > + // The generic proxy stubs are faster. > + if (obj->is<ProxyObject>()) > + return false; > + Should we add something like writer.guardIsNotProxy here?
Attachment #8894907 - Flags: review?(evilpies) → review+
(In reply to Limited Availabilty till Oct | Tom Schuster [:evilpie] from comment #2) > Should we add something like writer.guardIsNotProxy here? Good question. I decided not to add it because if a SETELEM is megamorphic and both proxies and non-proxies show up, it's probably okay for all objects to go through SetObjectElement.
Status: ASSIGNED → RESOLVED
Closed: 9 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla57
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: