Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: d62f981d7a110a91b051ec431559dfc1972f7f8d
      
https://github.com/WebKit/WebKit/commit/d62f981d7a110a91b051ec431559dfc1972f7f8d
  Author: Yusuke Suzuki <[email protected]>
  Date:   2023-10-05 (Thu, 05 Oct 2023)

  Changed paths:
    M Source/JavaScriptCore/bytecode/ArrayProfile.cpp
    M Source/JavaScriptCore/bytecode/ArrayProfile.h
    M Source/JavaScriptCore/bytecode/CodeBlock.cpp
    M Source/JavaScriptCore/bytecode/CodeBlock.h
    M Source/JavaScriptCore/bytecode/LazyOperandValueProfile.cpp
    M Source/JavaScriptCore/bytecode/LazyOperandValueProfile.h
    M Source/JavaScriptCore/bytecode/MethodOfGettingAValueProfile.cpp
    M Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
    M Source/JavaScriptCore/dfg/DFGFixupPhase.cpp
    M Source/JavaScriptCore/jit/JITOperations.cpp
    M Source/JavaScriptCore/llint/LLIntSlowPaths.cpp
    M Source/JavaScriptCore/profiler/ProfilerBytecodeSequence.cpp

  Log Message:
  -----------
  [JSC] Remove locking for profile updates
https://bugs.webkit.org/show_bug.cgi?id=262689
rdar://116512260

Reviewed by Mark Lam.

1. ArrayProfile update actually does not need to have a lock. Let's just make 
it racy, and it is fine.
   Removing locking.
2. We use ConcurrentVector and storeStoreFence carefully to make 
LazyOperandValueProfile concurrently accessible.
   It is always added from the mutator, and read by the compiler threads. So we 
can ensure the accessible size
   by using storeStoreFence.

As a result, we no longer need to take a lock for profile update on 64bit (Note 
that valueProfileLock is NoLockingNecessary in 64bit).

* Source/JavaScriptCore/bytecode/ArrayProfile.cpp:
(JSC::ArrayProfile::computeUpdatedPrediction):
(JSC::ArrayProfile::briefDescription):
(JSC::ArrayProfile::briefDescriptionWithoutUpdating):
* Source/JavaScriptCore/bytecode/ArrayProfile.h:
* Source/JavaScriptCore/bytecode/CodeBlock.cpp:
(JSC::CodeBlock::updateAllLazyValueProfilePredictions):
(JSC::CodeBlock::updateAllArrayProfilePredictions):
(JSC::CodeBlock::updateAllPredictions):
(JSC::CodeBlock::shouldOptimizeNowFromBaseline):
* Source/JavaScriptCore/bytecode/CodeBlock.h:
(JSC::CodeBlock::lazyOperandValueProfiles):
* Source/JavaScriptCore/bytecode/LazyOperandValueProfile.cpp:
(JSC::CompressedLazyOperandValueProfileHolder::computeUpdatedPredictions):
(JSC::CompressedLazyOperandValueProfileHolder::add):
(JSC::LazyOperandValueProfileParser::initialize):
(JSC::LazyOperandValueProfileParser::getIfPresent const):
(JSC::LazyOperandValueProfileParser::prediction const):
* Source/JavaScriptCore/bytecode/LazyOperandValueProfile.h:
* Source/JavaScriptCore/bytecode/MethodOfGettingAValueProfile.cpp:
(JSC::MethodOfGettingAValueProfile::emitReportValue const):
* Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:
(JSC::DFG::ByteCodeParser::getArrayMode):
(JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
* Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:
(JSC::DFG::FixupPhase::attemptToMakeGetArrayLength):
* Source/JavaScriptCore/jit/JITOperations.cpp:
(JSC::JSC_DEFINE_JIT_OPERATION):
(JSC::putByValOptimize):
(JSC::directPutByValOptimize):
* Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:
(JSC::LLInt::jitCompileAndSetHeuristics):
* Source/JavaScriptCore/profiler/ProfilerBytecodeSequence.cpp:
(JSC::Profiler::BytecodeSequence::BytecodeSequence):

Canonical link: https://commits.webkit.org/268936@main


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to