Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: e9ced931afc738c9413a26562ad2dd1d7fec4cd2
https://github.com/WebKit/WebKit/commit/e9ced931afc738c9413a26562ad2dd1d7fec4cd2
Author: Keith Miller <[email protected]>
Date: 2024-10-08 (Tue, 08 Oct 2024)
Changed paths:
M Source/JavaScriptCore/CMakeLists.txt
M Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
M Source/JavaScriptCore/Sources.txt
M Source/JavaScriptCore/assembler/LinkBuffer.cpp
M Source/JavaScriptCore/bytecode/SuperSampler.cpp
M Source/JavaScriptCore/heap/ConservativeRoots.cpp
M Source/JavaScriptCore/heap/ConservativeRoots.h
M Source/JavaScriptCore/heap/Heap.cpp
M Source/JavaScriptCore/heap/Heap.h
M Source/JavaScriptCore/heap/HeapUtil.h
M Source/JavaScriptCore/interpreter/CallFrame.cpp
M Source/JavaScriptCore/interpreter/CalleeBits.h
M Source/JavaScriptCore/jit/AssemblyHelpers.h
M Source/JavaScriptCore/jit/ExecutableAllocator.cpp
M Source/JavaScriptCore/jit/ExecutableAllocator.h
M Source/JavaScriptCore/llint/LLIntSlowPaths.cpp
M Source/JavaScriptCore/llint/LLIntSlowPaths.h
M Source/JavaScriptCore/llint/WebAssembly.asm
M Source/JavaScriptCore/offlineasm/parser.rb
M Source/JavaScriptCore/runtime/NativeCallee.h
M Source/JavaScriptCore/runtime/Options.cpp
M Source/JavaScriptCore/runtime/OptionsList.h
M Source/JavaScriptCore/runtime/WeakGCMapInlines.h
M Source/JavaScriptCore/tools/VMInspector.h
M Source/JavaScriptCore/wasm/WasmBBQJIT.cpp
M Source/JavaScriptCore/wasm/WasmBBQJIT.h
M Source/JavaScriptCore/wasm/WasmBBQPlan.cpp
M Source/JavaScriptCore/wasm/WasmCallee.cpp
M Source/JavaScriptCore/wasm/WasmCallee.h
M Source/JavaScriptCore/wasm/WasmCalleeGroup.cpp
M Source/JavaScriptCore/wasm/WasmCalleeGroup.h
R Source/JavaScriptCore/wasm/WasmCallsiteCollection.cpp
R Source/JavaScriptCore/wasm/WasmCallsiteCollection.h
M Source/JavaScriptCore/wasm/WasmFormat.h
M Source/JavaScriptCore/wasm/WasmFunctionCodeBlockGenerator.h
M Source/JavaScriptCore/wasm/WasmFunctionIPIntMetadataGenerator.h
M Source/JavaScriptCore/wasm/WasmIPIntGenerator.cpp
M Source/JavaScriptCore/wasm/WasmIPIntSlowPaths.cpp
M Source/JavaScriptCore/wasm/WasmIPIntTierUpCounter.h
M Source/JavaScriptCore/wasm/WasmIndexOrName.cpp
M Source/JavaScriptCore/wasm/WasmIndexOrName.h
M Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp
M Source/JavaScriptCore/wasm/WasmLLIntTierUpCounter.cpp
M Source/JavaScriptCore/wasm/WasmLLIntTierUpCounter.h
M Source/JavaScriptCore/wasm/WasmModule.h
M Source/JavaScriptCore/wasm/WasmModuleInformation.h
M Source/JavaScriptCore/wasm/WasmOMGIRGenerator.cpp
M Source/JavaScriptCore/wasm/WasmOMGPlan.cpp
M Source/JavaScriptCore/wasm/WasmOSREntryData.h
M Source/JavaScriptCore/wasm/WasmOSREntryPlan.cpp
M Source/JavaScriptCore/wasm/WasmOperations.cpp
M Source/JavaScriptCore/wasm/WasmOperations.h
M Source/JavaScriptCore/wasm/WasmSlowPaths.cpp
M Source/JavaScriptCore/wasm/WasmSlowPaths.h
M Source/JavaScriptCore/wasm/WasmThunks.cpp
M Source/JavaScriptCore/wasm/WasmTierUpCount.cpp
M Source/JavaScriptCore/wasm/WasmTierUpCount.h
M Source/JavaScriptCore/wasm/js/JSToWasm.cpp
M Source/JavaScriptCore/wasm/js/JSToWasm.h
M Source/WTF/WTF.xcodeproj/project.pbxproj
M Source/WTF/wtf/CMakeLists.txt
M Source/WTF/wtf/FixedBitVector.h
M Source/WTF/wtf/HashSet.h
M Source/WTF/wtf/HashTable.h
M Source/WTF/wtf/Lock.h
A Source/WTF/wtf/ScopedPrintStream.h
A Source/WTF/wtf/TaggedPtr.h
M Source/WTF/wtf/ThreadSafeWeakPtr.h
M Tools/Scripts/run-jsc-stress-tests
Log Message:
-----------
GC Wasm BBQ/OMG-OSR code
https://bugs.webkit.org/show_bug.cgi?id=280896
rdar://131411963
Reviewed by Yusuke Suzuki and David Degazio.
This patch enables GCing BBQ/OMG-OSR code. We don't reclaim OMG code
as it's the highest tier so there's nothing to replace it or LLInt/IPInt
because LLInt is on its way out and it's not clear how profitable it will
be to GC IPInt code.
To make this work a couple significant changes had to be made:
* NativeCallees are now ThreadSafeRefCountedAndCanMakeThreadSafeWeakPtr so
CalleeGroup can retain weak references to them.
* When doing updateCallsitesToCallUs we get the callsites from Wasm::JITCallees
directly rather than from anywhere else.
In order to quickly find the potential callees we record a FixedBitVector of
the FunctionCodeIndices that could have
a direct asm callsite to us. This also makes CallsiteCollection obsolete thus
is removed in this patch.
* CalleeGroup now holds ThreadSafeWeakOrStrongPtr to BBQCallees and a HashMap
of ThreadSafeWeakPtrs to OSREntryCallees.
When the BBQCallee is the current highest tier the BBQCallee is retained as a
strong reference. Once OMG code is compiled
that reference is made weak. This allows us to continue to update the
outgoing calls of this callee while it is still reachable.
If we didn't do this then we could fail to update the callsite and be left
with a dangling "pointer" to other code that's
already been collected.
* Once a Wasm::Callee is ready to be released we iterate all the VMs in the
process and give them a copy of the Callee. If they
don't see it on a stack scan it can be released as that VM isn't referencing
it.
* ConservativeRoots now knows that it needs to also look for boxed
Wasm::Callees on the stack. In order to avoid potentially
regressing performance when not running wasm the stack scan is now templated
on whether or not to look for boxed Wasm::Callees
on the stack.
There are a few other additions in WTF:
* `HashMap::takeIf`: Returns a Vector of the things the Invocable returns true
on.
* `TaggedPtr`: Which makes it easy to embed data into pointers. There are two
tagging modes for now:
1) `NoTaggingTraits`: Doesn't do tagging.
2) `EnumTaggingTraits`: tags with the members of a specific enum.
* `ThreadSafeWeakOrStrongPtr`: Similar to WeakOrStrongPtr but for
ThreadSafeRefCountedAndCanMakeThreadSafeWeakPtr.
* Source/JavaScriptCore/assembler/LinkBuffer.cpp:
(JSC::LinkBuffer::finalizeCodeWithDisassemblyImpl):
* Source/JavaScriptCore/bytecode/SuperSampler.cpp:
(JSC::initializeSuperSampler):
* Source/JavaScriptCore/heap/ConservativeRoots.cpp:
(JSC::ConservativeRoots::ConservativeRoots):
(JSC::ConservativeRoots::~ConservativeRoots):
(JSC::ConservativeRoots::genericAddPointer):
(JSC::ConservativeRoots::genericAddSpan):
* Source/JavaScriptCore/heap/ConservativeRoots.h:
* Source/JavaScriptCore/heap/Heap.cpp:
(JSC::Heap::addCoreConstraints):
(JSC::Heap::reportWasmCalleePendingDestruction):
(JSC::Heap::isWasmCalleePendingDestruction):
* Source/JavaScriptCore/heap/Heap.h:
* Source/JavaScriptCore/heap/HeapUtil.h:
(JSC::HeapUtil::findGCObjectPointersForMarking): Deleted.
* Source/JavaScriptCore/interpreter/CallFrame.cpp:
(JSC::CallFrame::dump const):
* Source/JavaScriptCore/interpreter/CalleeBits.h:
(JSC::CalleeBits::boxNativeCallee):
* Source/JavaScriptCore/jit/ExecutableAllocator.cpp:
(JSC::ExecutableMemoryHandle::~ExecutableMemoryHandle):
* Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:
(JSC::LLInt::logWasmPrologue): Deleted.
* Source/JavaScriptCore/llint/LLIntSlowPaths.h:
* Source/JavaScriptCore/runtime/NativeCallee.h:
* Source/JavaScriptCore/runtime/Options.cpp:
(JSC::Options::isAvailable):
* Source/JavaScriptCore/runtime/OptionsList.h:
* Source/JavaScriptCore/runtime/WeakGCMapInlines.h:
(JSC::KeyTraitsArg>::pruneStaleEntries):
* Source/JavaScriptCore/tools/VMInspector.h:
(JSC::VMInspector::WTF_REQUIRES_LOCK):
* Source/JavaScriptCore/wasm/WasmBBQJIT.cpp:
(JSC::Wasm::BBQJITImpl::BBQJIT::BBQJIT):
(JSC::Wasm::BBQJITImpl::BBQJIT::emitEntryTierUpCheck):
(JSC::Wasm::BBQJITImpl::BBQJIT::addTopLevel):
(JSC::Wasm::BBQJITImpl::BBQJIT::emitTailCall):
(JSC::Wasm::BBQJITImpl::BBQJIT::addCall):
(JSC::Wasm::BBQJITImpl::BBQJIT::takeDirectCallees):
(JSC::Wasm::parseAndCompileBBQ):
* Source/JavaScriptCore/wasm/WasmBBQJIT.h:
* Source/JavaScriptCore/wasm/WasmBBQPlan.cpp:
(JSC::Wasm::BBQPlan::work):
(JSC::Wasm::BBQPlan::compileFunction):
* Source/JavaScriptCore/wasm/WasmCallee.cpp:
(JSC::Wasm::Callee::Callee):
(JSC::Wasm::Callee::reportToVMsForDestruction):
(JSC::Wasm::JSEntrypointCallee::JSEntrypointCallee):
* Source/JavaScriptCore/wasm/WasmCallee.h:
* Source/JavaScriptCore/wasm/WasmCalleeGroup.cpp:
(JSC::Wasm::CalleeGroup::CalleeGroup):
(JSC::Wasm::CalleeGroup::tryGetBBQCalleeForLoopOSR):
(JSC::Wasm::CalleeGroup::releaseBBQCallee):
(JSC::Wasm::CalleeGroup::updateCallsitesToCallUs):
(JSC::Wasm::CalleeGroup::reportCallees):
(JSC::Wasm::CalleeGroup::calleeIsReferenced const):
* Source/JavaScriptCore/wasm/WasmCalleeGroup.h:
* Source/JavaScriptCore/wasm/WasmCallsiteCollection.cpp:
(JSC::Wasm::CallsiteCollection::addCalleeGroupCallsites):
(JSC::Wasm::CallsiteCollection::updateCallsitesToCallUs):
* Source/JavaScriptCore/wasm/WasmCallsiteCollection.h:
* Source/JavaScriptCore/wasm/WasmFormat.h:
* Source/JavaScriptCore/wasm/WasmFunctionCodeBlockGenerator.h:
(JSC::Wasm::FunctionCodeBlockGenerator::takeCallees):
* Source/JavaScriptCore/wasm/WasmFunctionIPIntMetadataGenerator.h:
(JSC::Wasm::FunctionIPIntMetadataGenerator::takeCallees):
* Source/JavaScriptCore/wasm/WasmIPIntGenerator.cpp:
(JSC::Wasm::IPIntGenerator::IPIntGenerator):
(JSC::Wasm::IPIntGenerator::addCall):
* Source/JavaScriptCore/wasm/WasmIPIntSlowPaths.cpp:
(JSC::IPInt::jitCompileAndSetHeuristics):
(JSC::IPInt::WASM_IPINT_EXTERN_CPP_DECL):
* Source/JavaScriptCore/wasm/WasmIPIntTierUpCounter.h:
(JSC::Wasm::IPIntTierUpCounter::WTF_REQUIRES_LOCK):
(JSC::Wasm::IPIntTierUpCounter::compilationStatus): Deleted.
(JSC::Wasm::IPIntTierUpCounter::setCompilationStatus): Deleted.
(JSC::Wasm::IPIntTierUpCounter::loopCompilationStatus): Deleted.
(JSC::Wasm::IPIntTierUpCounter::setLoopCompilationStatus): Deleted.
* Source/JavaScriptCore/wasm/WasmIndexOrName.cpp:
(JSC::Wasm::IndexOrName::dump const):
* Source/JavaScriptCore/wasm/WasmIndexOrName.h:
* Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:
(JSC::Wasm::LLIntGenerator::LLIntGenerator):
(JSC::Wasm::LLIntGenerator::addCall):
* Source/JavaScriptCore/wasm/WasmLLIntTierUpCounter.cpp:
(JSC::Wasm::LLIntTierUpCounter::reset):
(JSC::Wasm::LLIntTierUpCounter::addOSREntryDataForLoop): Deleted.
* Source/JavaScriptCore/wasm/WasmLLIntTierUpCounter.h:
(JSC::Wasm::LLIntTierUpCounter::WTF_REQUIRES_LOCK):
(JSC::Wasm::LLIntTierUpCounter::compilationStatus): Deleted.
(JSC::Wasm::LLIntTierUpCounter::setCompilationStatus): Deleted.
(JSC::Wasm::LLIntTierUpCounter::loopCompilationStatus): Deleted.
(JSC::Wasm::LLIntTierUpCounter::setLoopCompilationStatus): Deleted.
* Source/JavaScriptCore/wasm/WasmModule.h:
* Source/JavaScriptCore/wasm/WasmModuleInformation.h:
* Source/JavaScriptCore/wasm/WasmOMGIRGenerator.cpp:
(JSC::Wasm::OMGIRGenerator::OMGIRGenerator):
(JSC::Wasm::OMGIRGenerator::addCall):
(JSC::Wasm::parseAndCompileOMG):
* Source/JavaScriptCore/wasm/WasmOMGIRGenerator32_64.cpp:
(JSC::Wasm::parseAndCompileOMG):
* Source/JavaScriptCore/wasm/WasmOMGPlan.cpp:
(JSC::Wasm::OMGPlan::dumpDisassembly):
(JSC::Wasm::OMGPlan::work):
* Source/JavaScriptCore/wasm/WasmOSREntryData.h:
(JSC::Wasm::OSREntryData::OSREntryData):
(JSC::Wasm::OSREntryData::functionIndex const):
* Source/JavaScriptCore/wasm/WasmOSREntryPlan.cpp:
(JSC::Wasm::OSREntryPlan::dumpDisassembly):
(JSC::Wasm::OSREntryPlan::work):
* Source/JavaScriptCore/wasm/WasmOperations.cpp:
(JSC::Wasm::JSC_DEFINE_NOEXCEPT_JIT_OPERATION):
* Source/JavaScriptCore/wasm/WasmOperations.h:
* Source/JavaScriptCore/wasm/WasmSlowPaths.cpp:
(JSC::LLInt::jitCompileAndSetHeuristics):
(JSC::LLInt::WASM_SLOW_PATH_DECL):
(JSC::LLInt::logWasmPrologue):
* Source/JavaScriptCore/wasm/WasmSlowPaths.h:
* Source/JavaScriptCore/wasm/WasmThunks.cpp:
(JSC::Wasm::triggerOMGEntryTierUpThunkGeneratorImpl):
* Source/JavaScriptCore/wasm/WasmTierUpCount.cpp:
(JSC::Wasm::TierUpCount::addOSREntryData):
* Source/JavaScriptCore/wasm/WasmTierUpCount.h:
(JSC::Wasm::TierUpCount::optimizeAfterWarmUp):
(JSC::Wasm::TierUpCount::dontOptimizeAnytimeSoon):
(JSC::Wasm::TierUpCount::optimizeNextInvocation):
(JSC::Wasm::TierUpCount::optimizeSoon):
(JSC::Wasm::TierUpCount::setOptimizationThresholdBasedOnCompilationResult):
* Source/JavaScriptCore/wasm/WasmWorklist.cpp:
* Source/JavaScriptCore/wasm/js/JSToWasm.cpp:
(JSC::Wasm::FunctionSignature::jsToWasmICEntrypoint const):
* Source/JavaScriptCore/wasm/js/JSToWasm.h:
* Source/WTF/WTF.xcodeproj/project.pbxproj:
* Source/WTF/wtf/FixedBitVector.h:
(WTF::FixedBitVector::merge):
(WTF::FixedBitVector::filter):
(WTF::FixedBitVector::exclude):
* Source/WTF/wtf/HashSet.h:
* Source/WTF/wtf/HashTable.h:
(WTF::KeyTraits>::removeIf):
(WTF::KeyTraits>::takeIf):
* Source/WTF/wtf/Lock.h:
* Source/WTF/wtf/ScopedPrintStream.h: Copied from
Source/JavaScriptCore/wasm/js/JSToWasm.h.
* Source/WTF/wtf/TaggedPtr.h: Added.
(WTF::TaggedPtr::TaggedPtr):
(WTF::TaggedPtr::tag const):
(WTF::TaggedPtr::ptr const):
(WTF::TaggedPtr::ptr):
(WTF::TaggedPtr::set):
(WTF::TaggedPtr::setTag):
(WTF::TaggedPtr::operator=):
(WTF::static_cast<Enum>):
(WTF::NoTaggingTraits::encode):
(WTF::NoTaggingTraits::extractPtr):
(WTF::NoTaggingTraits::extractTag):
* Source/WTF/wtf/ThreadSafeWeakPtr.h:
(WTF::ThreadSafeWeakPtrControlBlock::refCount const):
(WTF::ThreadSafeRefCountedAndCanMakeThreadSafeWeakPtr::refCount const):
(WTF::ThreadSafeWeakOrStrongPtr::status const):
(WTF::ThreadSafeWeakOrStrongPtr::isWeak const):
(WTF::ThreadSafeWeakOrStrongPtr::isStrong const):
(WTF::ThreadSafeWeakOrStrongPtr::get const):
(WTF::ThreadSafeWeakOrStrongPtr::ptr const):
(WTF::ThreadSafeWeakOrStrongPtr::convertToWeak):
(WTF::ThreadSafeWeakOrStrongPtr::tryConvertToStrong):
(WTF::ThreadSafeWeakOrStrongPtr::operator=):
(WTF::ThreadSafeWeakOrStrongPtr::ThreadSafeWeakOrStrongPtr):
(WTF::ThreadSafeWeakOrStrongPtr::~ThreadSafeWeakOrStrongPtr):
(WTF::ThreadSafeWeakPtr::ThreadSafeWeakPtr): Deleted.
(WTF::ThreadSafeWeakPtr::operator=): Deleted.
(WTF::ThreadSafeWeakPtr::get const): Deleted.
(WTF::ThreadSafeWeakPtr::controlBlock): Deleted.
* Tools/Scripts/run-jsc-stress-tests:
Canonical link: https://commits.webkit.org/284867@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes