[webkit-changes] [WebKit/WebKit] 52bceb: [JSC] Make CachedCall faster

Yusuke Suzuki noreply at github.com
Tue Nov 7 13:37:35 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 52bceb775cda5fbcf78c2d2853261550a31da341
      https://github.com/WebKit/WebKit/commit/52bceb775cda5fbcf78c2d2853261550a31da341
  Author: Yusuke Suzuki <ysuzuki at apple.com>
  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




More information about the webkit-changes mailing list