[webkit-changes] [WebKit/WebKit] ff53b2: [JSC] Refactor and restrict IC operations are only...

Yusuke Suzuki noreply at github.com
Thu Aug 31 14:36:38 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: ff53b2cbf74de112c510f533ab39366ca1366606
      https://github.com/WebKit/WebKit/commit/ff53b2cbf74de112c510f533ab39366ca1366606
  Author: Yusuke Suzuki <ysuzuki at apple.com>
  Date:   2023-08-31 (Thu, 31 Aug 2023)

  Changed paths:
    M Source/JavaScriptCore/bytecode/Repatch.cpp
    M Source/JavaScriptCore/bytecode/StructureStubInfo.h
    M Source/JavaScriptCore/dfg/DFGOperations.cpp
    M Source/JavaScriptCore/dfg/DFGOperations.h
    M Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
    M Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp
    M Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp
    M Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp
    M Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp
    M Source/JavaScriptCore/jit/JITInlineCacheGenerator.h
    M Source/JavaScriptCore/jit/JITOperations.cpp
    M Source/JavaScriptCore/jit/JITOperations.h

  Log Message:
  -----------
  [JSC] Refactor and restrict IC operations are only called from IC
https://bugs.webkit.org/show_bug.cgi?id=260937
rdar://114736570

Reviewed by Keith Miller and Justin Michaud.

In this patch, we refactor operations used by IC and others. The goal of this patch is that we ensure that
IC operations are called only from IC. We would like to make these operations assuming more, like, it always
has StructureStubInfo so that it does not need to set CallSiteIndex in the caller side in the future.
This is really nice since we can remove get_by_id's Slow path in Baseline JIT code for example later, and
making slow path of get_by_id one shared one, this will be set up later for handler IC. So, handler IC can
just always call this slow path handler which calls operations, and operations are aware that they are called
from IC, and CallSiteIndex etc. are appropriately set up from passed StructureStubInfo*. So we can make this
entrance similar to the fast path IC, which removes a lot of weird stub code necessary for handler IC.

We also resolve many naming inconsistencies in these operations. We have solid rule now about Optimize, Generic,
Megamorphic, MegamorphicGeneric, and GaveUp suffixes.

* Source/JavaScriptCore/bytecode/Repatch.cpp:
(JSC::appropriateGetByOptimizeFunction):
(JSC::appropriateGetByGaveUpFunction):
(JSC::tryCacheGetBy):
(JSC::repatchGetBy):
(JSC::repatchGetBySlowPathCall):
(JSC::repatchArrayGetByVal):
(JSC::appropriatePutByGaveUpFunction):
(JSC::repatchPutBySlowPathCall):
(JSC::appropriatePutByOptimizeFunction):
(JSC::tryCachePutBy):
(JSC::repatchPutBy):
(JSC::repatchArrayPutByVal):
(JSC::repatchDeleteBy):
(JSC::appropriateInByOptimizeFunction):
(JSC::appropriateInByGaveUpFunction):
(JSC::repatchInBy):
(JSC::repatchHasPrivateBrand):
(JSC::repatchCheckPrivateBrand):
(JSC::repatchSetPrivateBrand):
(JSC::repatchInstanceOf):
(JSC::resetGetBy):
(JSC::resetInBy):
(JSC::appropriateOptimizingGetByFunction): Deleted.
(JSC::appropriateGetByFunction): Deleted.
(JSC::appropriateGenericPutByFunction): Deleted.
(JSC::appropriateOptimizingPutByFunction): Deleted.
(JSC::appropriateOptimizingInByFunction): Deleted.
(JSC::appropriateGenericInByFunction): Deleted.
* Source/JavaScriptCore/bytecode/StructureStubInfo.h:
(JSC::appropriateGetByIdOptimizeFunction):
(JSC::appropriateGetByIdGenericFunction):
(JSC::appropriatePutByIdOptimizeFunction):
(JSC::appropriateOptimizingGetByIdFunction): Deleted.
(JSC::appropriateGenericGetByIdFunction): Deleted.
* Source/JavaScriptCore/dfg/DFGOperations.cpp:
(JSC::DFG::putByVal): Deleted.
(JSC::DFG::putByValInternal): Deleted.
* Source/JavaScriptCore/dfg/DFGOperations.h:
* Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::compileDeleteById):
(JSC::DFG::SpeculativeJIT::compileDeleteByVal):
(JSC::DFG::SpeculativeJIT::compilePutByVal):
(JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
* Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:
(JSC::DFG::SpeculativeJIT::cachedGetById):
(JSC::DFG::SpeculativeJIT::compileGetByVal):
(JSC::DFG::SpeculativeJIT::compileGetByValWithThis):
* Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:
(JSC::DFG::SpeculativeJIT::cachedGetById):
(JSC::DFG::SpeculativeJIT::compileGetByVal):
(JSC::DFG::SpeculativeJIT::compileGetByIdMegamorphic):
(JSC::DFG::SpeculativeJIT::compileGetByIdWithThisMegamorphic):
(JSC::DFG::SpeculativeJIT::compileGetByValMegamorphic):
(JSC::DFG::SpeculativeJIT::compileGetByValWithThisMegamorphic):
(JSC::DFG::SpeculativeJIT::compilePutByIdMegamorphic):
(JSC::DFG::SpeculativeJIT::compilePutByValMegamorphic):
* Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:
(JSC::FTL::DFG::LowerDFGToB3::compileGetById):
(JSC::FTL::DFG::LowerDFGToB3::compileGetByIdMegamorphic):
(JSC::FTL::DFG::LowerDFGToB3::compileGetByValMegamorphic):
(JSC::FTL::DFG::LowerDFGToB3::compileGetByIdWithThisMegamorphic):
(JSC::FTL::DFG::LowerDFGToB3::compileGetByValWithThisMegamorphic):
(JSC::FTL::DFG::LowerDFGToB3::compileGetPrivateName):
(JSC::FTL::DFG::LowerDFGToB3::compilePutByValMegamorphic):
(JSC::FTL::DFG::LowerDFGToB3::compilePutPrivateName):
(JSC::FTL::DFG::LowerDFGToB3::cachedPutById):
(JSC::FTL::DFG::LowerDFGToB3::compilePutByIdMegamorphic):
(JSC::FTL::DFG::LowerDFGToB3::compileGetByValImpl):
(JSC::FTL::DFG::LowerDFGToB3::compilePutByVal):
(JSC::FTL::DFG::LowerDFGToB3::compileDeleteById):
(JSC::FTL::DFG::LowerDFGToB3::compileDeleteByVal):
(JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
* Source/JavaScriptCore/jit/JITInlineCacheGenerator.cpp:
(JSC::JITPutByIdGenerator::slowPathFunction): Deleted.
* Source/JavaScriptCore/jit/JITInlineCacheGenerator.h:
* Source/JavaScriptCore/jit/JITOperations.cpp:
(JSC::JSC_DEFINE_JIT_OPERATION):
(JSC::putByVal):
* Source/JavaScriptCore/jit/JITOperations.h:

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




More information about the webkit-changes mailing list