[webkit-changes] [WebKit/WebKit] e8d109: [JSC][uDFG] Introduce unlinked CallLinkInfo in DFG
Yusuke Suzuki
noreply at github.com
Wed Oct 5 11:58:12 PDT 2022
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: e8d10964fe9c69be268e5160f9839933f3d01965
https://github.com/WebKit/WebKit/commit/e8d10964fe9c69be268e5160f9839933f3d01965
Author: Yusuke Suzuki <ysuzuki at apple.com>
Date: 2022-10-05 (Wed, 05 Oct 2022)
Changed paths:
M Source/JavaScriptCore/bytecode/AccessCase.cpp
M Source/JavaScriptCore/bytecode/CallLinkInfo.cpp
M Source/JavaScriptCore/bytecode/CallLinkInfo.h
M Source/JavaScriptCore/bytecode/ProxyObjectAccessCase.cpp
M Source/JavaScriptCore/dfg/DFGCommonData.h
M Source/JavaScriptCore/dfg/DFGJITCode.cpp
M Source/JavaScriptCore/dfg/DFGJITCode.h
M Source/JavaScriptCore/dfg/DFGJITCompiler.cpp
M Source/JavaScriptCore/dfg/DFGJITCompiler.h
M Source/JavaScriptCore/dfg/DFGPlan.cpp
M Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp
M Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp
M Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp
M Source/JavaScriptCore/ftl/FTLState.cpp
M Source/JavaScriptCore/ftl/FTLState.h
M Source/JavaScriptCore/jit/BaselineJITCode.h
M Source/JavaScriptCore/jit/JIT.cpp
M Source/JavaScriptCore/jit/JIT.h
M Source/JavaScriptCore/jit/JITCall.cpp
M Source/JavaScriptCore/wasm/js/WasmToJS.cpp
Log Message:
-----------
[JSC][uDFG] Introduce unlinked CallLinkInfo in DFG
https://bugs.webkit.org/show_bug.cgi?id=246056
<rdar://100788330>
Reviewed by Justin Michaud.
This patch introduces unlinked CallLinkInfo into DFG. We do the similar thing to unlinked StructureStubInfo introduction
in DFG: Adding std::variant CompileTimeCallLinkInfo to handle unlinked and linked ones easily. We unify BaselineJIT's DataIC
CallLinkInfo code generation code with this new style so that we simplify unlinked CallLinkInfo usage.
The key part is that we no longer emit a pointers to CallLinkInfo in DFG if isUnlinked() (which is tested in JSC stress tests)
is true. In that case, we keep UnlinkedCallLinkInfo information in DFG::JITCode. And when running it, we materialize DFG::JITData,
which includes linked version of CallLinkInfo created from UnlinkedCallLinkInfo, so we share the unlinked DFG code while we have
per CodeBlock's linked data in DFG::JITData, which is pinned in a certain callee-save register in DFG.
* Source/JavaScriptCore/bytecode/AccessCase.cpp:
(JSC::AccessCase::generateImpl):
* Source/JavaScriptCore/bytecode/CallLinkInfo.cpp:
(JSC::CallLinkInfo::emitFastPath):
(JSC::CallLinkInfo::emitTailCallFastPath):
(JSC::CallLinkInfo::emitSlowPath):
(JSC::OptimizingCallLinkInfo::initializeFromDFGUnlinkedCallLinkInfo):
* Source/JavaScriptCore/bytecode/CallLinkInfo.h:
(JSC::UnlinkedCallLinkInfo::setCodeLocations):
(JSC::BaselineUnlinkedCallLinkInfo::setUpCall):
(JSC::BaselineUnlinkedCallLinkInfo::setFrameShuffleData):
* Source/JavaScriptCore/bytecode/ProxyObjectAccessCase.cpp:
(JSC::ProxyObjectAccessCase::emit):
* Source/JavaScriptCore/dfg/DFGCommonData.h:
(JSC::DFG::CommonData::addCallLinkInfo): Deleted.
* Source/JavaScriptCore/dfg/DFGJITCode.cpp:
(JSC::DFG::JITData::JITData):
* Source/JavaScriptCore/dfg/DFGJITCode.h:
(JSC::DFG::UnlinkedCallLinkInfo::setUpCall):
(JSC::DFG::UnlinkedCallLinkInfo::setFrameShuffleData):
(JSC::DFG::JITData::create):
* Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:
(JSC::DFG::JITCompiler::link):
(JSC::DFG::JITCompiler::addCallLinkInfo):
* Source/JavaScriptCore/dfg/DFGJITCompiler.h:
(JSC::DFG::JITCompiler::addJSCall):
(JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord):
* Source/JavaScriptCore/dfg/DFGPlan.cpp:
(JSC::DFG::Plan::finalizeJITData):
* Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:
(JSC::DFG::SpeculativeJIT::emitCall):
* Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:
(JSC::DFG::SpeculativeJIT::emitCall):
* Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:
(JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
* Source/JavaScriptCore/ftl/FTLState.cpp:
(JSC::FTL::State::addCallLinkInfo):
* Source/JavaScriptCore/ftl/FTLState.h:
* Source/JavaScriptCore/jit/BaselineJITCode.h:
* Source/JavaScriptCore/jit/JIT.cpp:
(JSC::JIT::addUnlinkedCallLinkInfo):
(JSC::JIT::link):
* Source/JavaScriptCore/jit/JIT.h:
* Source/JavaScriptCore/jit/JITCall.cpp:
(JSC::JIT::compileCallDirectEval):
(JSC::JIT::compileTailCall):
(JSC::JIT::compileOpCall):
(JSC::JIT::compileOpCallSlowCase):
* Source/JavaScriptCore/wasm/js/WasmToJS.cpp:
(JSC::Wasm::wasmToJS):
Canonical link: https://commits.webkit.org/255183@main
More information about the webkit-changes
mailing list