WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
217373
[ESNext][JIT] Add support for UntypedUse on PutPrivateName's base operand
https://bugs.webkit.org/show_bug.cgi?id=217373
Summary
[ESNext][JIT] Add support for UntypedUse on PutPrivateName's base operand
Caio Lima
Reported
2020-10-06 03:30:57 PDT
Right now we are always speculating cell, but it is very costly when we need to throw an exception due to invalid receivers (e.g. primitives).
Attachments
Patch
(19.08 KB, patch)
2020-10-06 11:20 PDT
,
Caio Lima
no flags
Details
Formatted Diff
Diff
Patch
(21.24 KB, patch)
2020-10-16 09:06 PDT
,
Caio Lima
no flags
Details
Formatted Diff
Diff
Show Obsolete
(1)
View All
Add attachment
proposed patch, testcase, etc.
Caio Lima
Comment 1
2020-10-06 11:20:00 PDT
Created
attachment 410666
[details]
Patch
Caitlin Potter (:caitp)
Comment 2
2020-10-09 11:44:09 PDT
Comment on
attachment 410666
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=410666&action=review
looks okay here 👍
> Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:1917 > + fixEdge<UntypedUse>(node->child1());
Are we not UntypedUse by default? Are there any assertions failing in debug tests without this? (Asking because I haven't done this in the GetPrivateName patch)
> Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:3530 > + case CellUse: {
Here, the approach I went with was to let `speculate(...)` do the speculation of base, and conditionally emit a cell check and slow path in the case where we aren't fairly sure it's a cell. Would that make sense here too? (I don't have a strong opinion on this, this is fine)
> Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:3976 > + LValue base = m_node->child1().useKind() == CellUse ? lowCell(m_node->child1()) : lowJSValue(m_node->child1());
We're just calling a slow case function, so I'm not sure there's any reason to not just lowJSValue() in all cases
Yusuke Suzuki
Comment 3
2020-10-09 12:52:18 PDT
Comment on
attachment 410666
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=410666&action=review
Can you also ensure whether PutPrivateNameById's CellUse is correct? Does it work correctly even if it gets Symbol / JSString? If it is not tested, can you add tests too?
> Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:1915 > + fixEdge<CellUse>(node->child1()); > + break; > + }
Let's remove CellUse handling since it does not add optimizations.
>> Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:3530 >> + case CellUse: { > > Here, the approach I went with was to let `speculate(...)` do the speculation of base, and conditionally emit a cell check and slow path in the case where we aren't fairly sure it's a cell. Would that make sense here too? (I don't have a strong opinion on this, this is fine)
I think this style is OK since we can avoid adding a new XXXUse here without adding an implementation. For example, if we add ObjectUse here, then `speculate(...)` can work, but it is possible that following code is not assuming that it is ObjectUse speculated one. Anyway, for this path, I think we do not need to have CellUse. And I think CellUse speculation kind would be wrong since it can allow JSString / Symbol etc. Let's just have UntypedUse code.
>> Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:3976 >> + LValue base = m_node->child1().useKind() == CellUse ? lowCell(m_node->child1()) : lowJSValue(m_node->child1()); > > We're just calling a slow case function, so I'm not sure there's any reason to not just lowJSValue() in all cases
Agreed. I think for now, just speculating it with UntypedUse is OK. We are speculating CellUse, but we are not using this information. And I think CellUse speculation is not correct: it should be ObjectUse. Let's just call lowJSValue().
> Source/JavaScriptCore/jit/JITOperations.cpp:-684 > - JSObject* baseObject = asObject(baseValue);
Previously, we are using `asObject`. But speculation was CellUse. This means that cells like JSString, Symbol etc. can pass that speculation. Was that a bug? If it is, can you add a test to cover this case?
> Source/JavaScriptCore/jit/JITOperations.cpp:-703 > - JSObject* baseObject = asObject(baseValue);
Ditto. Please add a test which flows String / Symbol into this code.
> Source/JavaScriptCore/jit/JITOperations.cpp:-739 > - JSObject* baseObject = asObject(JSValue::decode(encodedBase));
Ditto.
> Source/JavaScriptCore/jit/JITOperations.cpp:-774 > - JSObject* baseObject = asObject(JSValue::decode(encodedBase));
Ditto.
> Source/JavaScriptCore/jit/JITOperations.cpp:-1158 > - auto baseObject = asObject(baseValue);
Ditto.
> Source/JavaScriptCore/jit/JITOperations.cpp:-1187 > - auto baseObject = asObject(baseValue);
Ditto.
Radar WebKit Bug Importer
Comment 4
2020-10-13 03:31:16 PDT
<
rdar://problem/70246622
>
Caio Lima
Comment 5
2020-10-16 07:57:22 PDT
Comment on
attachment 410666
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=410666&action=review
>> Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:1917 >> + fixEdge<UntypedUse>(node->child1()); > > Are we not UntypedUse by default? Are there any assertions failing in debug tests without this? (Asking because I haven't done this in the GetPrivateName patch)
IIUC, we are `UntypedUse` by default and this fixEdge would be redundant. I think we can remove it.
>> Source/JavaScriptCore/jit/JITOperations.cpp:-684 >> - JSObject* baseObject = asObject(baseValue); > > Previously, we are using `asObject`. But speculation was CellUse. This means that cells like JSString, Symbol etc. can pass that speculation. > Was that a bug? If it is, can you add a test to cover this case?
It was a bug indeed. It was also a bug into LLInt slow paths. I'll make it clearer in the ChangeLog. I added `JSTests/stress/get-private-name-with-primitive.js` to catch this issue.
>> Source/JavaScriptCore/jit/JITOperations.cpp:-703 >> - JSObject* baseObject = asObject(baseValue); > > Ditto. Please add a test which flows String / Symbol into this code.
I'll include String and Symbol on `JSTests/stress/put-private-name-untyped-use.js`.
Caio Lima
Comment 6
2020-10-16 09:06:06 PDT
Created
attachment 411583
[details]
Patch
EWS
Comment 7
2020-10-18 06:24:43 PDT
Committed
r268656
: <
https://trac.webkit.org/changeset/268656
> All reviewed patches have been landed. Closing bug and clearing flags on
attachment 411583
[details]
.
Alexey Shvayka
Comment 8
2020-10-18 15:25:27 PDT
***
Bug 217844
has been marked as a duplicate of this bug. ***
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug