You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit e8d1096
Browse filesBrowse the repository at this point in the historyBrowse files
[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
0 commit comments