Bug 209327

Summary: [JSC] DFG OSR exit cannot find StructureStubInfo for put_by_val if CodeBlock is once converved from Baseline to LLInt
Product: WebKit Reporter: Yusuke Suzuki <ysuzuki>
Component: New BugsAssignee: Yusuke Suzuki <ysuzuki>
Status: RESOLVED FIXED    
Severity: Normal CC: ews-watchlist, keith_miller, mark.lam, msaboff, saam, tzagallo, webkit-bug-importer
Priority: P2 Keywords: InRadar
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   
Attachments:
Description Flags
Patch saam: review+

Description Yusuke Suzuki 2020-03-20 00:53:30 PDT
[JSC] DFG OSR exit cannot find StructureStubInfo for put_by_val if CodeBlock is once converved from Baseline to LLInt
Comment 1 Yusuke Suzuki 2020-03-20 00:56:16 PDT
Created attachment 394071 [details]
Patch
Comment 2 Yusuke Suzuki 2020-03-20 00:56:18 PDT
<rdar://problem/60631061>
Comment 3 Saam Barati 2020-03-23 13:00:37 PDT
Comment on attachment 394071 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=394071&action=review

> Source/JavaScriptCore/ChangeLog:15
> +            3. Since (A) collects enough information for put_by_val, (B) can get StructureStubInfo from (A) and copmile it as inlined Setter call.

copmile => compile

> Source/JavaScriptCore/ChangeLog:20
> +        We should just link to doneTarget of ByValInfo when the SetterCall is generated by `op_put_by_val`. ByValInfo and its doneTarget always exists per op_put_by_val.

nice. Once we make put_by_val SSI based, this will just go away too

> Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:216
> +            StructureStubInfo* stubInfo = baselineCodeBlockForCaller->findStubInfo(CodeOrigin(callBytecodeIndex));

move this after the if?
Comment 4 Yusuke Suzuki 2020-03-23 14:06:51 PDT
Comment on attachment 394071 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=394071&action=review

>> Source/JavaScriptCore/ChangeLog:15
>> +            3. Since (A) collects enough information for put_by_val, (B) can get StructureStubInfo from (A) and copmile it as inlined Setter call.
> 
> copmile => compile

Fixed.

>> Source/JavaScriptCore/ChangeLog:20
>> +        We should just link to doneTarget of ByValInfo when the SetterCall is generated by `op_put_by_val`. ByValInfo and its doneTarget always exists per op_put_by_val.
> 
> nice. Once we make put_by_val SSI based, this will just go away too

Yeah, right.

>> Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:216
>> +            StructureStubInfo* stubInfo = baselineCodeBlockForCaller->findStubInfo(CodeOrigin(callBytecodeIndex));
> 
> move this after the if?

Nice catch. Fixed.
Comment 5 Yusuke Suzuki 2020-03-23 14:09:27 PDT
Committed r258874: <https://trac.webkit.org/changeset/258874>