Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 7ab897711f80e7c2a341ec065a1ecda29bdeac3b
https://github.com/WebKit/WebKit/commit/7ab897711f80e7c2a341ec065a1ecda29bdeac3b
Author: Yusuke Suzuki <[email protected]>
Date: 2023-01-28 (Sat, 28 Jan 2023)
Changed paths:
M Source/JavaScriptCore/CMakeLists.txt
M Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
M Source/JavaScriptCore/Sources.txt
M Source/JavaScriptCore/wasm/WasmBBQPlan.cpp
M Source/JavaScriptCore/wasm/WasmCalleeGroup.cpp
M Source/JavaScriptCore/wasm/WasmCalleeGroup.h
A Source/JavaScriptCore/wasm/WasmCallsiteCollection.cpp
A Source/JavaScriptCore/wasm/WasmCallsiteCollection.h
M Source/JavaScriptCore/wasm/WasmCompilationMode.h
M Source/JavaScriptCore/wasm/WasmOMGPlan.cpp
M Source/JavaScriptCore/wasm/WasmOSREntryPlan.cpp
M Source/JavaScriptCore/wasm/WasmPlan.cpp
M Source/JavaScriptCore/wasm/WasmPlan.h
Log Message:
-----------
[JSC] Wasm repatch should be maintained by reversed data structure
https://bugs.webkit.org/show_bug.cgi?id=251316
rdar://104775515
Reviewed by Saam Barati.
When repatching wasm callsites with a newly compiled code, we are literally
iterating every callsites on the wasm module,
and updating them with a new one if it is matching against the registered one.
But this is too stupid and it becomes exponentially
slow when wasm module gets large.
We should just maintain the data structure which answers callsites calling a
function X. And when X is recompiled (e.g. -> BBQ -> OMG),
then we should query to this data structure to obtain the list of callsites
calling to X super quickly.
This patch adds Wasm::CallsiteCollection. This maintains Vector<Vector>
basically, Vector of callsites calling a function X.
This improves large wasm website performance in a dramatic way.
* Source/JavaScriptCore/CMakeLists.txt:
* Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:
* Source/JavaScriptCore/Sources.txt:
* Source/JavaScriptCore/wasm/WasmBBQPlan.cpp:
(JSC::Wasm::BBQPlan::work):
* Source/JavaScriptCore/wasm/WasmCalleeGroup.cpp:
(JSC::Wasm::CalleeGroup::CalleeGroup):
* Source/JavaScriptCore/wasm/WasmCalleeGroup.h:
* Source/JavaScriptCore/wasm/WasmCallsiteCollection.cpp: Added.
(JSC::Wasm::CallsiteCollection::addCallsites):
(JSC::Wasm::CallsiteCollection::addCalleeGroupCallsites):
(JSC::Wasm::CallsiteCollection::updateCallsitesToCallUs):
* Source/JavaScriptCore/wasm/WasmCallsiteCollection.h: Added.
(JSC::Wasm::CallsiteCollection::CallsiteCollection):
(JSC::Wasm::CallsiteCollection::calleeGroupCallsites const):
* Source/JavaScriptCore/wasm/WasmCompilationMode.h:
* Source/JavaScriptCore/wasm/WasmOMGPlan.cpp:
(JSC::Wasm::OMGPlan::work):
* Source/JavaScriptCore/wasm/WasmOSREntryPlan.cpp:
(JSC::Wasm::OSREntryPlan::work):
* Source/JavaScriptCore/wasm/WasmPlan.cpp:
(JSC::Wasm::Plan::updateCallSitesToCallUs): Deleted.
* Source/JavaScriptCore/wasm/WasmPlan.h:
Canonical link: https://commits.webkit.org/259529@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes