Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 52bceb775cda5fbcf78c2d2853261550a31da341
      
https://github.com/WebKit/WebKit/commit/52bceb775cda5fbcf78c2d2853261550a31da341
  Author: Yusuke Suzuki <[email protected]>
  Date:   2023-11-07 (Tue, 07 Nov 2023)

  Changed paths:
    A JSTests/microbenchmarks/js-to-js-cached-call.js
    M Source/JavaScriptCore/CMakeLists.txt
    M Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
    M Source/JavaScriptCore/Sources.txt
    M Source/JavaScriptCore/bytecode/CallLinkInfo.cpp
    M Source/JavaScriptCore/bytecode/CallLinkInfo.h
    A Source/JavaScriptCore/bytecode/CallLinkInfoBase.cpp
    A Source/JavaScriptCore/bytecode/CallLinkInfoBase.h
    M Source/JavaScriptCore/bytecode/CallLinkStatus.cpp
    M Source/JavaScriptCore/bytecode/CodeBlock.cpp
    M Source/JavaScriptCore/bytecode/CodeBlock.h
    M Source/JavaScriptCore/interpreter/CachedCall.h
    M Source/JavaScriptCore/interpreter/Interpreter.cpp
    M Source/JavaScriptCore/interpreter/Interpreter.h
    M Source/JavaScriptCore/interpreter/InterpreterInlines.h
    M Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp
    M Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.h

  Log Message:
  -----------
  [JSC] Make CachedCall faster
https://bugs.webkit.org/show_bug.cgi?id=264246
rdar://117989641

Reviewed by Michael Saboff.

This patch makes CachedCall 2x faster. We integrate CallLinkInfo / 
PolymorphicCallNode's CodeBlock linking mechanism into CachedCall.

1. This patch unifies CallLinkInfo and PolymorphicCallNode's linking mechanism 
into CallLinkInfoBase. Now both class has CallLinkInfoBase
   and CodeBlock handles both via linkIncomingCall in the same way.
2. Extend this for CachedCall too.

The key is that, previously, we are repeatedly checking CodeBlock's update for 
CachedCall. But now, it is notified by the CodeBlock itself.
So we do not need to check this costly thing frequently. This is exactly the 
same mechanism to CallLinkInfo and PolymorphicCallNode.

This improves CachedCall by 2x.

    cpp-to-js-cached-call       54.9806+-0.0144     ^     21.1277+-0.0073       
 ^ definitely 2.6023x faster

* JSTests/microbenchmarks/js-to-js-cached-call.js: Added.
(test):
(cachedCallFromJS):
* Source/JavaScriptCore/CMakeLists.txt:
* Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:
* Source/JavaScriptCore/Sources.txt:
* Source/JavaScriptCore/bytecode/CallLinkInfo.cpp:
(JSC::CallLinkInfo::~CallLinkInfo):
(JSC::CallLinkInfo::unlinkImpl):
(JSC::CallLinkInfo::unlink): Deleted.
* Source/JavaScriptCore/bytecode/CallLinkInfo.h:
(JSC::CallLinkInfo::CallLinkInfo):
* Source/JavaScriptCore/bytecode/CallLinkInfoBase.cpp: Added.
(JSC::CallLinkInfoBase::unlink):
* Source/JavaScriptCore/bytecode/CallLinkInfoBase.h: Added.
(JSC::CallLinkInfoBase::CallLinkInfoBase):
(JSC::CallLinkInfoBase::~CallLinkInfoBase):
(JSC::CallLinkInfoBase::callSiteType const):
* Source/JavaScriptCore/bytecode/CallLinkStatus.cpp:
(JSC::CallLinkStatus::computeFromCallLinkInfo):
* Source/JavaScriptCore/bytecode/CodeBlock.cpp:
(JSC::CodeBlock::linkIncomingCall):
(JSC::CodeBlock::unlinkIncomingCalls):
(JSC::CodeBlock::linkIncomingPolymorphicCall): Deleted.
* Source/JavaScriptCore/bytecode/CodeBlock.h:
* Source/JavaScriptCore/interpreter/CachedCall.h:
(JSC::CachedCall::CachedCall):
(JSC::CachedCall::~CachedCall):
(JSC::CachedCall::unlinkImpl):
(JSC::CachedCall::relink):
* Source/JavaScriptCore/interpreter/Interpreter.cpp:
(JSC::Interpreter::prepareForCachedCall):
* Source/JavaScriptCore/interpreter/Interpreter.h:
* Source/JavaScriptCore/interpreter/InterpreterInlines.h:
(JSC::Interpreter::executeCachedCall):
* Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:
(JSC::PolymorphicCallNode::unlinkImpl):
(JSC::PolymorphicCallStubRoutine::PolymorphicCallStubRoutine):
(JSC::CallLinkInfoBase::unlink):
(JSC::PolymorphicCallNode::~PolymorphicCallNode): Deleted.
(JSC::PolymorphicCallNode::unlink): Deleted.
* Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.h:
(JSC::PolymorphicCallNode::PolymorphicCallNode): Deleted.
(JSC::PolymorphicCallNode::hasCallLinkInfo): Deleted.

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


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

Reply via email to