[webkit-changes] [WebKit/WebKit] 49a82e: [JSC] Keep used locals alive for iterator_next / i...
Yusuke Suzuki
noreply at github.com
Tue Mar 14 19:47:35 PDT 2023
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 49a82e3d03250e03f408b7a8aff80313b849932c
https://github.com/WebKit/WebKit/commit/49a82e3d03250e03f408b7a8aff80313b849932c
Author: Yusuke Suzuki <ysuzuki at apple.com>
Date: 2023-03-14 (Tue, 14 Mar 2023)
Changed paths:
A JSTests/stress/iterator-next-osr-exit-dead-1.js
A JSTests/stress/iterator-next-osr-exit-dead-2.js
M Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp
M Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
Log Message:
-----------
[JSC] Keep used locals alive for iterator_next / iterator_open
https://bugs.webkit.org/show_bug.cgi?id=253907
rdar://102754257
Reviewed by Keith Miller and Justin Michaud.
iterator_next and iterator_open can create a graph of DFG nodes. But this is problematic for OSR exit node liveness tracking.
We have phantom insertion phase to keep uses of instructions alive properly. But that analysis has an assumption that one instruction
cannot create a graph. As a result, the phase does block local analysis, and if the local is not used on that basic block,
we do not insert phantoms. Let's see
Block #0
@0 GetLocal(local0)
@1 Use(@0)
@2 Jump(#1)
Block #1
@3 ForceOSRExit
In #1, we do not know that local0 needs to be kept alive even if local0 is alive in bytecode. And phantom insertion phase cannot insert phantoms
to keep them alive since local0 operand in #1 is not filled.
This patch adds keepUsesOfCurrentInstructionAlive helper function and call it in the prologue of newly created basic block for one instruction.
This inserts all the uses of the instruction explicitly via GetLocal.
Block #0
@0 GetLocal(local0)
@1 Use(@0)
@2 Jump(#1)
Block #1
@3 GetLocal(local0)
@4 ForceOSRExit
With this function, we insert @3 for local0, and now phatom insertion phase will see operand for local0 is filled in #1,
and appropriately insert Phantom into #1 too.
* JSTests/stress/iterator-next-osr-exit-dead-1.js: Added.
* JSTests/stress/iterator-next-osr-exit-dead-2.js: Added.
(i.i.switch):
* Source/JavaScriptCore/bytecode/BytecodeUseDef.cpp:
(JSC::computeUsesForBytecodeIndexImpl):
* Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:
(JSC::DFG::ByteCodeParser::keepUsesOfCurrentInstructionAlive):
(JSC::DFG::ByteCodeParser::parseBlock):
Canonical link: https://commits.webkit.org/261668@main
More information about the webkit-changes
mailing list