Closed Bug 648994 Opened 9 years ago Closed 9 years ago

JM+TI: direct GNAME accesses

Categories

(Core :: JavaScript Engine, defect)

x86
macOS
defect
Not set

Tracking

()

RESOLVED FIXED

People

(Reporter: bhackett, Unassigned)

References

(Blocks 1 open bug)

Details

Using invalidation/recompilation we can statically guard against changes to global object properties (deletion, change configuration) that affect GNAME accesses in the code, removing the need for an IC (make these as fast as GLOBAL opcodes).  We can also statically guard against slot reallocation on the global object, which would make these accesses as fast as those on escaping locals/args (i.e. we can't keep them in registers and still have to load/store on every access).

These could be made even faster in loops by carrying the globals in registers, writing them out after assignments and reloading them after stub/scripted calls, a la loop invariants.  That would depend on this though and would require some FrameState changes, good followup fodder I think.
Landed on JM.

http://hg.mozilla.org/projects/jaegermonkey/rev/b442ad97a2fb

This statically guards against both slot reallocation and configuration change, which was significantly faster than only guarding against configuration and having to reload the slots pointer on each access.  The machinery for configuration guards will be reused for optimizing instance property accesses.

n = 100000000;
for (i = 0; i < n; i++) {}

js -m -n (old): 585
js -m -n (new): 223
js -j: 192
js -m: 575
d8: 1116
Status: NEW → RESOLVED
Closed: 9 years ago
Resolution: --- → FIXED
Depends on: 649339
You need to log in before you can comment on or make changes to this bug.