Optimize GetName TypeOfNoProperty

NEW
Unassigned

Status

()

Core
JavaScript Engine: JIT
P3
normal
8 months ago
2 months ago

People

(Reporter: jandem, Unassigned)

Tracking

(Blocks: 1 bug, {perf})

Firefox Tracking Flags

(Not tracked)

Details

(Whiteboard: [qf:p3])

Attachments

(1 attachment)

(Reporter)

Description

8 months ago
If we have |typeof x| and x does not exist, we attach an IC stub that guards on the environment objects but it also has to guard the global's proto chain.

Unfortunately this is annoying because in the browser we have the GSP proxy on the prototype chain and we would need some way to guard it doesn't have the property.

We should probably fix this before converting this code to CacheIR (bug 1326437) as it will also affect Baseline then.
(Reporter)

Comment 1

8 months ago
Created attachment 8854456 [details]
Testcase

This prints "Fail" (I get "Pass" with Ion disabled).
(Reporter)

Comment 2

8 months ago
Boris, any thoughts on how we can deal with the GSP/WindowNamedPropertiesHandler proxy? Can we do something similar to the other DOM proxies?
Flags: needinfo?(bzbarsky)
Hmm.  So this one is different from other DOM proxies in various ways.  It has different slot layout, no expando, etc.

But I guess the real question is whether we could give it a concept of "shape" or "generation" or something like that, right?  Something that the JIT could then guard on.  It seems like we should be able to do that, generally speaking, either as an ExpandoAndGeneration pointer (with an undefined expando in all cases) or a direct counter in a PrivateValue (which would presumably need to count by 2 to make sense in that case, right?).  I assume we do want this thing somewhere where the jit can reach it via slots.

We'd also need the JIT to recognize this specific proxy handler, I guess.
Flags: needinfo?(bzbarsky)
(Reporter)

Comment 4

8 months ago
@bz: thanks. Yes we need a generation field for this I suppose... We could then also use this to optimize |window.missingProp|. It would be nice if we could share the ExpandoAndGeneration code.

Tom and I talked about this yesterday and for now it seems best to remove this (buggy) optimization as part of the CacheIR conversion in bug 1326437. That unblocks bug 1326437 and we can then use this bug to add it back with the correct guards.
Blocks: 1259927
No longer blocks: 1326437
Summary: Ion TypeOfNoProperty stub needs to guard on the global's proto chain → Optimize GetName TypeOfNoProperty
Whiteboard: [qf]
Priority: -- → P3
Whiteboard: [qf] → [qf:p3]
Keywords: perf
You need to log in before you can comment on or make changes to this bug.