Changeset 277928 in webkit


Ignore:
Timestamp:
May 22, 2021 11:07:01 PM (3 years ago)
Author:
mark.lam@apple.com
Message:

Enhance Link Buffer stats to have more fine grain profiles, and to collect count information.
https://bugs.webkit.org/show_bug.cgi?id=226151
rdar://problem/78359436

Reviewed by Yusuke Suzuki.

And also add a total of the sizes.
Also added $vm.clearLinkBufferStats() which resets all the stats to 0.

Here's an example of that the new stats look like:

Cummulative LinkBuffer profile sizes:

BaselineJIT: 61092032 (58.261902 MB) count 11621 avg size 5257

DFG: 35387904 (33.748535 MB) count 11143 avg size 3175

InlineCache: 19639155 (18.729358 MB) count 283890 avg size 69

VirtualThunk: 14256800 (13.596344 MB) count 43900 avg size 324

DFGOSRExit: 7636736 (7.282959 MB) count 5235 avg size 1458

FTL: 4927616 (4.699341 MB) count 5269 avg size 935

Wasm: 2134688 (2.035797 MB) count 847 avg size 2520

YarrJIT: 1320928 (1.259735 MB) count 2075 avg size 636

FTLOSRExit: 1084096 (1.033875 MB) count 417 avg size 2599

WasmThunk: 41408 (40.437500 KB) count 252 avg size 164

FTLThunk: 25088 (24.500000 KB) count 426 avg size 58

ExtraCTIThunk: 5984 (5.843750 KB) count 95 avg size 62

SpecializedThunk: 3456 (3.375000 KB) count 19 avg size 181

Thunk: 1760 (1.718750 KB) count 10 avg size 176

BoundFunctionThunk: 864 count 3 avg size 288

LLIntThunk: 608 count 18 avg size 33

DFGThunk: 608 count 1 avg size 608

DFGOSREntry: 160 count 1 avg size 160

JumpIsland: 0

CSSJIT: 0

Uncategorized: 0

Total: 147559891 (140.724078 MB)

  • assembler/LinkBuffer.cpp:

(JSC::LinkBuffer::performFinalization):
(JSC::LinkBuffer::clearProfileStatistics):
(JSC::LinkBuffer::dumpProfileStatistics):

  • assembler/LinkBuffer.h:
  • dfg/DFGOSRExit.cpp:

(JSC::DFG::JSC_DEFINE_JIT_OPERATION):

  • dfg/DFGThunks.cpp:

(JSC::DFG::osrExitGenerationThunkGenerator):
(JSC::DFG::osrEntryThunkGenerator):

  • ftl/FTLOSRExitCompiler.cpp:

(JSC::FTL::compileStub):

  • ftl/FTLThunks.cpp:

(JSC::FTL::genericGenerationThunkGenerator):
(JSC::FTL::slowPathCallThunkGenerator):

  • jit/ExecutableAllocator.cpp:
  • jit/JITOpcodes.cpp:

(JSC::JIT::op_ret_handlerGenerator):
(JSC::JIT::op_throw_handlerGenerator):
(JSC::JIT::op_enter_handlerGenerator):
(JSC::JIT::op_check_traps_handlerGenerator):

  • jit/JITPropertyAccess.cpp:

(JSC::JIT::slow_op_get_by_val_prepareCallGenerator):
(JSC::JIT::slow_op_get_private_name_prepareCallGenerator):
(JSC::JIT::slow_op_put_by_val_prepareCallGenerator):
(JSC::JIT::slow_op_put_private_name_prepareCallGenerator):
(JSC::JIT::slow_op_del_by_id_prepareCallGenerator):
(JSC::JIT::slow_op_del_by_val_prepareCallGenerator):
(JSC::JIT::slow_op_get_by_id_prepareCallGenerator):
(JSC::JIT::slow_op_get_by_id_with_this_prepareCallGenerator):
(JSC::JIT::slow_op_put_by_id_prepareCallGenerator):
(JSC::JIT::slow_op_get_from_scopeGenerator):
(JSC::JIT::slow_op_put_to_scopeGenerator):

  • jit/SlowPathCall.cpp:

(JSC::JITSlowPathCall::generateThunk):

  • jit/SpecializedThunkJIT.h:

(JSC::SpecializedThunkJIT::finalize):

  • jit/ThunkGenerators.cpp:

(JSC::handleExceptionGenerator):
(JSC::handleExceptionWithCallFrameRollbackGenerator):
(JSC::popThunkStackPreservesAndHandleExceptionGenerator):
(JSC::checkExceptionGenerator):
(JSC::virtualThunkFor):
(JSC::boundFunctionCallGenerator):

  • llint/LLIntThunks.cpp:

(JSC::LLInt::generateThunkWithJumpTo):
(JSC::LLInt::generateThunkWithJumpToPrologue):
(JSC::LLInt::generateThunkWithJumpToLLIntReturnPoint):
(JSC::LLInt::getHostCallReturnValueThunk):
(JSC::LLInt::createJSGateThunk):
(JSC::LLInt::createWasmGateThunk):
(JSC::LLInt::createTailCallGate):
(JSC::LLInt::loopOSREntryGateThunk):
(JSC::LLInt::entryOSREntryGateThunk):
(JSC::LLInt::wasmOSREntryGateThunk):
(JSC::LLInt::exceptionHandlerGateThunk):
(JSC::LLInt::returnFromLLIntGateThunk):
(JSC::LLInt::tagGateThunk):
(JSC::LLInt::untagGateThunk):
(JSC::LLInt::jitCagePtrThunk):

  • tools/JSDollarVM.cpp:

(JSC::JSDollarVM::finishCreation):

  • wasm/WasmBinding.cpp:

(JSC::Wasm::wasmToWasm):

  • wasm/WasmThunks.cpp:

(JSC::Wasm::throwExceptionFromWasmThunkGenerator):
(JSC::Wasm::throwStackOverflowFromWasmThunkGenerator):
(JSC::Wasm::triggerOMGEntryTierUpThunkGenerator):

  • wasm/js/WasmToJS.cpp:

(JSC::Wasm::wasmToJS):

Location:
trunk/Source/JavaScriptCore
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r277926 r277928  
     12021-05-22  Mark Lam  <mark.lam@apple.com>
     2
     3        Enhance Link Buffer stats to have more fine grain profiles, and to collect count information.
     4        https://bugs.webkit.org/show_bug.cgi?id=226151
     5        rdar://problem/78359436
     6
     7        Reviewed by Yusuke Suzuki.
     8
     9        And also add a total of the sizes.
     10        Also added $vm.clearLinkBufferStats() which resets all the stats to 0.
     11
     12        Here's an example of that the new stats look like:
     13
     14            Cummulative LinkBuffer profile sizes:
     15                       BaselineJIT: 61092032 (58.261902 MB) count 11621 avg size 5257
     16                               DFG: 35387904 (33.748535 MB) count 11143 avg size 3175
     17                       InlineCache: 19639155 (18.729358 MB) count 283890 avg size 69
     18                      VirtualThunk: 14256800 (13.596344 MB) count 43900 avg size 324
     19                        DFGOSRExit: 7636736 (7.282959 MB) count 5235 avg size 1458
     20                               FTL: 4927616 (4.699341 MB) count 5269 avg size 935
     21                              Wasm: 2134688 (2.035797 MB) count 847 avg size 2520
     22                           YarrJIT: 1320928 (1.259735 MB) count 2075 avg size 636
     23                        FTLOSRExit: 1084096 (1.033875 MB) count 417 avg size 2599
     24                         WasmThunk: 41408 (40.437500 KB) count 252 avg size 164
     25                          FTLThunk: 25088 (24.500000 KB) count 426 avg size 58
     26                     ExtraCTIThunk: 5984 (5.843750 KB) count 95 avg size 62
     27                  SpecializedThunk: 3456 (3.375000 KB) count 19 avg size 181
     28                             Thunk: 1760 (1.718750 KB) count 10 avg size 176
     29                BoundFunctionThunk: 864 count 3 avg size 288
     30                        LLIntThunk: 608 count 18 avg size 33
     31                          DFGThunk: 608 count 1 avg size 608
     32                       DFGOSREntry: 160 count 1 avg size 160
     33                        JumpIsland: 0
     34                            CSSJIT: 0
     35                     Uncategorized: 0
     36                             Total: 147559891 (140.724078 MB)
     37
     38        * assembler/LinkBuffer.cpp:
     39        (JSC::LinkBuffer::performFinalization):
     40        (JSC::LinkBuffer::clearProfileStatistics):
     41        (JSC::LinkBuffer::dumpProfileStatistics):
     42        * assembler/LinkBuffer.h:
     43        * dfg/DFGOSRExit.cpp:
     44        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
     45        * dfg/DFGThunks.cpp:
     46        (JSC::DFG::osrExitGenerationThunkGenerator):
     47        (JSC::DFG::osrEntryThunkGenerator):
     48        * ftl/FTLOSRExitCompiler.cpp:
     49        (JSC::FTL::compileStub):
     50        * ftl/FTLThunks.cpp:
     51        (JSC::FTL::genericGenerationThunkGenerator):
     52        (JSC::FTL::slowPathCallThunkGenerator):
     53        * jit/ExecutableAllocator.cpp:
     54        * jit/JITOpcodes.cpp:
     55        (JSC::JIT::op_ret_handlerGenerator):
     56        (JSC::JIT::op_throw_handlerGenerator):
     57        (JSC::JIT::op_enter_handlerGenerator):
     58        (JSC::JIT::op_check_traps_handlerGenerator):
     59        * jit/JITPropertyAccess.cpp:
     60        (JSC::JIT::slow_op_get_by_val_prepareCallGenerator):
     61        (JSC::JIT::slow_op_get_private_name_prepareCallGenerator):
     62        (JSC::JIT::slow_op_put_by_val_prepareCallGenerator):
     63        (JSC::JIT::slow_op_put_private_name_prepareCallGenerator):
     64        (JSC::JIT::slow_op_del_by_id_prepareCallGenerator):
     65        (JSC::JIT::slow_op_del_by_val_prepareCallGenerator):
     66        (JSC::JIT::slow_op_get_by_id_prepareCallGenerator):
     67        (JSC::JIT::slow_op_get_by_id_with_this_prepareCallGenerator):
     68        (JSC::JIT::slow_op_put_by_id_prepareCallGenerator):
     69        (JSC::JIT::slow_op_get_from_scopeGenerator):
     70        (JSC::JIT::slow_op_put_to_scopeGenerator):
     71        * jit/SlowPathCall.cpp:
     72        (JSC::JITSlowPathCall::generateThunk):
     73        * jit/SpecializedThunkJIT.h:
     74        (JSC::SpecializedThunkJIT::finalize):
     75        * jit/ThunkGenerators.cpp:
     76        (JSC::handleExceptionGenerator):
     77        (JSC::handleExceptionWithCallFrameRollbackGenerator):
     78        (JSC::popThunkStackPreservesAndHandleExceptionGenerator):
     79        (JSC::checkExceptionGenerator):
     80        (JSC::virtualThunkFor):
     81        (JSC::boundFunctionCallGenerator):
     82        * llint/LLIntThunks.cpp:
     83        (JSC::LLInt::generateThunkWithJumpTo):
     84        (JSC::LLInt::generateThunkWithJumpToPrologue):
     85        (JSC::LLInt::generateThunkWithJumpToLLIntReturnPoint):
     86        (JSC::LLInt::getHostCallReturnValueThunk):
     87        (JSC::LLInt::createJSGateThunk):
     88        (JSC::LLInt::createWasmGateThunk):
     89        (JSC::LLInt::createTailCallGate):
     90        (JSC::LLInt::loopOSREntryGateThunk):
     91        (JSC::LLInt::entryOSREntryGateThunk):
     92        (JSC::LLInt::wasmOSREntryGateThunk):
     93        (JSC::LLInt::exceptionHandlerGateThunk):
     94        (JSC::LLInt::returnFromLLIntGateThunk):
     95        (JSC::LLInt::tagGateThunk):
     96        (JSC::LLInt::untagGateThunk):
     97        (JSC::LLInt::jitCagePtrThunk):
     98        * tools/JSDollarVM.cpp:
     99        (JSC::JSDollarVM::finishCreation):
     100        * wasm/WasmBinding.cpp:
     101        (JSC::Wasm::wasmToWasm):
     102        * wasm/WasmThunks.cpp:
     103        (JSC::Wasm::throwExceptionFromWasmThunkGenerator):
     104        (JSC::Wasm::throwStackOverflowFromWasmThunkGenerator):
     105        (JSC::Wasm::triggerOMGEntryTierUpThunkGenerator):
     106        * wasm/js/WasmToJS.cpp:
     107        (JSC::Wasm::wasmToJS):
     108
    11092021-05-22  Ross Kirsling  <ross.kirsling@sony.com>
    2110
  • trunk/Source/JavaScriptCore/assembler/LinkBuffer.cpp

    r277850 r277928  
    4242
    4343size_t LinkBuffer::s_profileCummulativeLinkedSizes[LinkBuffer::numberOfProfiles];
     44size_t LinkBuffer::s_profileCummulativeLinkedCounts[LinkBuffer::numberOfProfiles];
    4445
    4546bool shouldDumpDisassemblyFor(CodeBlock* codeBlock)
     
    483484   
    484485    s_profileCummulativeLinkedSizes[static_cast<unsigned>(m_profile)] += m_size;
     486    s_profileCummulativeLinkedCounts[static_cast<unsigned>(m_profile)]++;
    485487    MacroAssembler::cacheFlush(code(), m_size);
    486488}
     
    533535#endif
    534536
     537void LinkBuffer::clearProfileStatistics()
     538{
     539    for (unsigned i = 0; i < numberOfProfiles; ++i) {
     540        s_profileCummulativeLinkedSizes[i] = 0;
     541        s_profileCummulativeLinkedCounts[i] = 0;
     542    }
     543}
     544
    535545void LinkBuffer::dumpProfileStatistics(Optional<PrintStream*> outStream)
    536546{
     
    538548        Profile profile;
    539549        size_t size;
     550        size_t count;
    540551    };
    541552
     
    552563#undef RETURN_LINKBUFFER_PROFILE_NAME
    553564
     565    size_t totalOfAllProfilesSize = 0;
    554566    auto dumpStat = [&] (const Stat& stat) {
    555567        char formattedName[21];
     
    567579
    568580        if (largerUnit)
    569             out.println("  ", formattedName, ": ", stat.size, " (", sizeInLargerUnit, " ", largerUnit, ")");
     581            out.print("  ", formattedName, ": ", stat.size, " (", sizeInLargerUnit, " ", largerUnit, ")");
    570582        else
    571             out.println("  ", formattedName, ": ", stat.size);
     583            out.print("  ", formattedName, ": ", stat.size);
     584
     585        if (!stat.count)
     586            out.println();
     587        else
     588            out.println(" count ", stat.count, " avg size ", (stat.size / stat.count));
    572589    };
    573590
     
    575592        sortedStats[i].profile = static_cast<Profile>(i);
    576593        sortedStats[i].size = s_profileCummulativeLinkedSizes[i];
    577     }
    578     std::sort(&sortedStats[0], &sortedStats[numberOfProfiles],
     594        sortedStats[i].count = s_profileCummulativeLinkedCounts[i];
     595        totalOfAllProfilesSize += s_profileCummulativeLinkedSizes[i];
     596    }
     597    sortedStats[static_cast<unsigned>(Profile::Total)].size = totalOfAllProfilesSize;
     598    std::sort(&sortedStats[0], &sortedStats[numberOfProfilesExcludingTotal],
    579599        [] (Stat& a, Stat& b) -> bool {
    580600            return a.size > b.size;
  • trunk/Source/JavaScriptCore/assembler/LinkBuffer.h

    r277680 r277928  
    9090    v(DFG) \
    9191    v(FTL) \
     92    v(DFGOSREntry) \
     93    v(DFGOSRExit) \
     94    v(FTLOSRExit) \
    9295    v(InlineCache) \
     96    v(JumpIsland) \
    9397    v(Thunk) \
     98    v(LLIntThunk) \
     99    v(DFGThunk) \
     100    v(FTLThunk) \
     101    v(BoundFunctionThunk) \
     102    v(SpecializedThunk) \
     103    v(VirtualThunk) \
     104    v(WasmThunk) \
     105    v(ExtraCTIThunk) \
    94106    v(Wasm) \
    95107    v(YarrJIT) \
    96108    v(CSSJIT) \
    97     v(Uncategorized)
     109    v(Uncategorized) \
     110    v(Total) \
    98111
    99112#define DECLARE_LINKBUFFER_PROFILE(name) name,
     
    106119    static constexpr unsigned numberOfProfiles = FOR_EACH_LINKBUFFER_PROFILE(COUNT_LINKBUFFER_PROFILE);
    107120#undef COUNT_LINKBUFFER_PROFILE
     121    static constexpr unsigned numberOfProfilesExcludingTotal = numberOfProfiles - 1;
    108122
    109123    LinkBuffer(MacroAssembler& macroAssembler, void* ownerUID, Profile profile = Profile::Uncategorized, JITCompilationEffort effort = JITCompilationMustSucceed)
     
    324338    void didAlreadyDisassemble() { m_alreadyDisassembled = true; }
    325339
     340    JS_EXPORT_PRIVATE static void clearProfileStatistics();
    326341    JS_EXPORT_PRIVATE static void dumpProfileStatistics(Optional<PrintStream*> = WTF::nullopt);
    327342
     
    407422
    408423    static size_t s_profileCummulativeLinkedSizes[numberOfProfiles];
     424    static size_t s_profileCummulativeLinkedCounts[numberOfProfiles];
    409425};
    410426
  • trunk/Source/JavaScriptCore/dfg/DFGOSRExit.cpp

    r277305 r277928  
    204204        OSRExit::compileExit(jit, vm, exit, operands, recovery);
    205205
    206         LinkBuffer patchBuffer(jit, codeBlock, LinkBuffer::Profile::Thunk);
     206        LinkBuffer patchBuffer(jit, codeBlock, LinkBuffer::Profile::DFGOSRExit);
    207207        exit.m_code = FINALIZE_CODE_IF(
    208208            shouldDumpDisassembly() || Options::verboseOSR() || Options::verboseDFGOSRExit(),
  • trunk/Source/JavaScriptCore/dfg/DFGThunks.cpp

    r277305 r277928  
    9090    jit.farJump(MacroAssembler::AbsoluteAddress(&vm.osrExitJumpDestination), OSRExitPtrTag);
    9191
    92     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     92    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::DFGThunk);
    9393   
    9494    patchBuffer.link(functionCall, FunctionPtr<OperationPtrTag>(operationCompileOSRExit));
     
    135135    jit.farJump(GPRInfo::regT1, GPRInfo::callFrameRegister);
    136136
    137     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     137    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::DFGOSREntry);
    138138    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "DFG OSR entry thunk");
    139139}
  • trunk/Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp

    r277305 r277928  
    507507    adjustAndJumpToTarget(vm, jit, exit);
    508508   
    509     LinkBuffer patchBuffer(jit, codeBlock, LinkBuffer::Profile::Thunk);
     509    LinkBuffer patchBuffer(jit, codeBlock, LinkBuffer::Profile::FTLOSRExit);
    510510    exit.m_code = FINALIZE_CODE_IF(
    511511        shouldDumpDisassembly() || Options::verboseOSR() || Options::verboseFTLOSRExit(),
  • trunk/Source/JavaScriptCore/ftl/FTLThunks.cpp

    r277305 r277928  
    125125    jit.ret();
    126126   
    127     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     127    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::FTLThunk);
    128128    patchBuffer.link(functionCall, generationFunction.retagged<OperationPtrTag>());
    129129    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "%s", name);
     
    232232    jit.ret();
    233233
    234     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     234    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::FTLThunk);
    235235    patchBuffer.link(call, key.callTarget());
    236236    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "FTL slow path call thunk for %s", toCString(key).data());
  • trunk/Source/JavaScriptCore/jit/ExecutableAllocator.cpp

    r277920 r277928  
    645645                MacroAssembler jit;
    646646                auto jump = jit.jump();
    647                 LinkBuffer linkBuffer(jit, MacroAssemblerCodePtr<NoPtrTag>(currentIsland), islandSizeInBytes, LinkBuffer::Profile::Thunk, JITCompilationMustSucceed, false);
     647                LinkBuffer linkBuffer(jit, MacroAssemblerCodePtr<NoPtrTag>(currentIsland), islandSizeInBytes, LinkBuffer::Profile::JumpIsland, JITCompilationMustSucceed, false);
    648648                RELEASE_ASSERT(linkBuffer.isValid());
    649649
  • trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp

    r277902 r277928  
    381381    jit.ret();
    382382
    383     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     383    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk);
    384384    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: op_ret_handler");
    385385}
     
    642642    jit.jumpToExceptionHandler(vm);
    643643
    644     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     644    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk);
    645645    patchBuffer.link(operation, FunctionPtr<OperationPtrTag>(operationThrow));
    646646    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: op_throw_handler");
     
    11981198    jit.ret();
    11991199
    1200     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     1200    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk);
    12011201    patchBuffer.link(operationWriteBarrierCall, FunctionPtr<OperationPtrTag>(operationWriteBarrierSlowPath));
    12021202#if ENABLE(DFG_JIT)
     
    14581458    jit.ret();
    14591459
    1460     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     1460    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk);
    14611461    patchBuffer.link(operation, FunctionPtr<OperationPtrTag>(operationHandleTraps));
    14621462    auto handler = vm.jitStubs->existingCTIStub(popThunkStackPreservesAndHandleExceptionGenerator, NoLockingNecessary);
  • trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp

    r277757 r277928  
    162162    jit.ret();
    163163
    164     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     164    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk);
    165165    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: slow_op_get_by_val_prepareCall");
    166166}
     
    268268    jit.ret();
    269269
    270     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     270    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk);
    271271    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: slow_op_xxx_private_name_prepareCall");
    272272}
     
    680680    jit.ret();
    681681
    682     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     682    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk);
    683683    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: slow_op_put_xxx_prepareCall");
    684684}
     
    784784    jit.ret();
    785785
    786     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     786    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk);
    787787    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: slow_op_put_put_private_name_prepareCall");
    788788}
     
    940940    jit.ret();
    941941
    942     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     942    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk);
    943943    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: slow_op_del_by_id_prepareCall");
    944944}
     
    10501050    jit.ret();
    10511051
    1052     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     1052    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk);
    10531053    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: slow_op_del_by_val_prepareCall");
    10541054}
     
    13161316    jit.ret();
    13171317
    1318     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     1318    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk);
    13191319    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: slow_op_get_by_id_prepareCall");
    13201320}
     
    13971397    jit.ret();
    13981398
    1399     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     1399    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk);
    14001400    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: slow_op_get_by_id_with_this_prepareCall");
    14011401}
     
    15051505    jit.ret();
    15061506
    1507     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     1507    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk);
    15081508    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: slow_op_put_by_id_prepareCall");
    15091509}
     
    19041904    jit.ret();
    19051905
    1906     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     1906    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk);
    19071907    patchBuffer.link(operation, FunctionPtr<OperationPtrTag>(operationGetFromScope));
    19081908    auto handler = vm.jitStubs->existingCTIStub(popThunkStackPreservesAndHandleExceptionGenerator, NoLockingNecessary);
     
    21252125    jit.ret();
    21262126
    2127     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     2127    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk);
    21282128    patchBuffer.link(operation, FunctionPtr<OperationPtrTag>(operationPutToScope));
    21292129    auto handler = vm.jitStubs->existingCTIStub(popThunkStackPreservesAndHandleExceptionGenerator, NoLockingNecessary);
  • trunk/Source/JavaScriptCore/jit/SlowPathCall.cpp

    r277648 r277928  
    8787    auto handler = vm.jitStubs->existingCTIStub(popThunkStackPreservesAndHandleExceptionGenerator, NoLockingNecessary);
    8888
    89     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     89    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk);
    9090    patchBuffer.link(call, FunctionPtr<OperationPtrTag>(slowPathFunction));
    9191    patchBuffer.link(exceptionCheck, CodeLocationLabel(handler.retaggedCode<NoPtrTag>()));
  • trunk/Source/JavaScriptCore/jit/SpecializedThunkJIT.h

    r277305 r277928  
    156156        MacroAssemblerCodeRef<JITThunkPtrTag> finalize(MacroAssemblerCodePtr<JITThunkPtrTag> fallback, const char* thunkKind)
    157157        {
    158             LinkBuffer patchBuffer(*this, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     158            LinkBuffer patchBuffer(*this, GLOBAL_THUNK_ID, LinkBuffer::Profile::SpecializedThunk);
    159159            patchBuffer.link(m_failures, CodeLocationLabel<JITThunkPtrTag>(fallback));
    160160            for (unsigned i = 0; i < m_calls.size(); i++)
  • trunk/Source/JavaScriptCore/jit/ThunkGenerators.cpp

    r277500 r277928  
    5757    jit.jumpToExceptionHandler(vm);
    5858
    59     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     59    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk);
    6060    patchBuffer.link(operation, FunctionPtr<OperationPtrTag>(operationLookupExceptionHandler));
    6161    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "handleException");
     
    7373    jit.jumpToExceptionHandler(vm);
    7474
    75     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     75    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk);
    7676    patchBuffer.link(operation, FunctionPtr<OperationPtrTag>(operationLookupExceptionHandlerFromCallerFrame));
    7777    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "handleExceptionWithCallFrameRollback");
     
    9090    CCallHelpers::Jump continuation = jit.jump();
    9191
    92     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     92    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk);
    9393    auto handler = vm.jitStubs->existingCTIStub(handleExceptionGenerator, NoLockingNecessary);
    9494    RELEASE_ASSERT(handler);
     
    132132#endif
    133133
    134     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     134    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk);
    135135    patchBuffer.link(handleException, CodeLocationLabel(vm.jitStubs->existingCTIStub(handlerGenerator, NoLockingNecessary).retaggedCode<NoPtrTag>()));
    136136    return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "CheckException");
     
    334334    slowPathFor(jit, vm, operationVirtualCall);
    335335
    336     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     336    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::VirtualThunk);
    337337    return FINALIZE_CODE(
    338338        patchBuffer, JITStubRoutinePtrTag,
     
    13731373    jit.ret();
    13741374   
    1375     LinkBuffer linkBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     1375    LinkBuffer linkBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::BoundFunctionThunk);
    13761376    linkBuffer.link(noCode, CodeLocationLabel<JITThunkPtrTag>(vm.jitStubs->ctiNativeTailCallWithoutSavedTags(vm)));
    13771377    return FINALIZE_CODE(
  • trunk/Source/JavaScriptCore/llint/LLIntThunks.cpp

    r277305 r277928  
    8989    jit.farJump(scratch, OperationPtrTag);
    9090
    91     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     91    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk);
    9292    return FINALIZE_CODE(patchBuffer, tag, "LLInt %s thunk", thunkKind);
    9393}
     
    116116    jit.farJump(scratch, OperationPtrTag);
    117117
    118     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     118    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk);
    119119    return FINALIZE_CODE(patchBuffer, tag, "LLInt %s jump to prologue thunk", thunkKind);
    120120}
     
    126126    assertIsTaggedWith<OperationPtrTag>(target);
    127127    jit.farJump(CCallHelpers::TrustedImmPtr(target), OperationPtrTag);
    128     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     128    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk);
    129129    return FINALIZE_CODE(patchBuffer, tag, "LLInt %s return point thunk", thunkKind);
    130130}
     
    248248        jit.ret();
    249249
    250         LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     250        LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk);
    251251        codeRef.construct(FINALIZE_CODE(patchBuffer, JSEntryPtrTag, "LLInt::getHostCallReturnValue thunk"));
    252252    });
     
    358358    jit.farJump(GPRInfo::regT3, OperationPtrTag);
    359359
    360     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     360    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk);
    361361    return FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "LLInt %s call gate thunk", name);
    362362}
     
    370370    jit.farJump(GPRInfo::wasmScratchGPR1, OperationPtrTag);
    371371
    372     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     372    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk);
    373373    return FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "LLInt %s wasm call gate thunk", name);
    374374}
     
    382382    jit.farJump(GPRInfo::regT0, tag);
    383383
    384     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     384    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk);
    385385    return FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "LLInt tail call gate thunk");
    386386}
     
    395395        jit.farJump(GPRInfo::argumentGPR0, JSEntryPtrTag);
    396396
    397         LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     397        LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk);
    398398        codeRef.construct(FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "loop OSR entry thunk"));
    399399    });
     
    411411        jit.farJump(GPRInfo::argumentGPR0, JSEntryPtrTag);
    412412
    413         LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     413        LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk);
    414414        codeRef.construct(FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "entry OSR entry thunk"));
    415415    });
     
    427427        jit.farJump(GPRInfo::wasmScratchGPR0, WasmEntryPtrTag);
    428428
    429         LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     429        LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk);
    430430        codeRef.construct(FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "wasm OSR entry thunk"));
    431431    });
     
    442442        jit.farJump(GPRInfo::regT0, ExceptionHandlerPtrTag);
    443443
    444         LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     444        LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk);
    445445        codeRef.construct(FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "exception handler thunk"));
    446446    });
     
    457457        jit.ret();
    458458
    459         LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     459        LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk);
    460460        codeRef.construct(FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "returnFromLLInt thunk"));
    461461    });
     
    473473    jit.farJump(GPRInfo::regT3, OperationPtrTag);
    474474
    475     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     475    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk);
    476476    return FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "tag thunk");
    477477}
     
    488488    jit.farJump(GPRInfo::regT3, OperationPtrTag);
    489489
    490     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     490    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk);
    491491    return FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "untag thunk");
    492492}
     
    503503        CCallHelpers jit;
    504504        JSC_JIT_CAGE_COMPILE_IMPL(jit);
    505         LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     505        LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk);
    506506        codeRef.construct(FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "jitCagePtr thunk"));
    507507    });
  • trunk/Source/JavaScriptCore/tools/JSDollarVM.cpp

    r277786 r277928  
    19181918static JSC_DECLARE_HOST_FUNCTION(functionIndexingMode);
    19191919static JSC_DECLARE_HOST_FUNCTION(functionInlineCapacity);
     1920static JSC_DECLARE_HOST_FUNCTION(functionClearLinkBufferStats);
    19201921static JSC_DECLARE_HOST_FUNCTION(functionLinkBufferStats);
    19211922static JSC_DECLARE_HOST_FUNCTION(functionValue);
     
    25192520}
    25202521
     2522// Clears the LinkBuffer profile statistics.
     2523// Usage: $vm.clearLinkBufferStats()
     2524JSC_DEFINE_HOST_FUNCTION(functionClearLinkBufferStats, (JSGlobalObject*, CallFrame*))
     2525{
     2526    DollarVMAssertScope assertScope;
     2527#if ENABLE(ASSEMBLER)
     2528    LinkBuffer::clearProfileStatistics();
     2529#endif
     2530    return JSValue::encode(jsUndefined());
     2531}
     2532
    25212533// Dumps the LinkBuffer profile statistics as a string.
    25222534// Usage: $vm.print($vm.linkBufferStats())
     
    36373649    addFunction(vm, "indexingMode", functionIndexingMode, 1);
    36383650    addFunction(vm, "inlineCapacity", functionInlineCapacity, 1);
     3651    addFunction(vm, "clearLinkBufferStats", functionClearLinkBufferStats, 0);
    36393652    addFunction(vm, "linkBufferStats", functionLinkBufferStats, 0);
    36403653    addFunction(vm, "value", functionValue, 1);
  • trunk/Source/JavaScriptCore/wasm/WasmBinding.cpp

    r277305 r277928  
    7878    jit.farJump(scratch, WasmEntryPtrTag);
    7979
    80     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk, JITCompilationCanFail);
     80    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::WasmThunk, JITCompilationCanFail);
    8181    if (UNLIKELY(patchBuffer.didFailToAllocate()))
    8282        return makeUnexpected(BindingFailure::OutOfMemory);
  • trunk/Source/JavaScriptCore/wasm/WasmThunks.cpp

    r277909 r277928  
    5454    jit.breakpoint(); // We should not reach this.
    5555
    56     LinkBuffer linkBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     56    LinkBuffer linkBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::WasmThunk);
    5757    linkBuffer.link(call, FunctionPtr<OperationPtrTag>(operationWasmToJSException));
    5858    return FINALIZE_WASM_CODE(linkBuffer, JITThunkPtrTag, "Throw exception from Wasm");
     
    6868    jit.move(CCallHelpers::TrustedImm32(static_cast<uint32_t>(ExceptionType::StackOverflow)), GPRInfo::argumentGPR1);
    6969    auto jumpToExceptionHandler = jit.jump();
    70     LinkBuffer linkBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     70    LinkBuffer linkBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::WasmThunk);
    7171    linkBuffer.link(jumpToExceptionHandler, CodeLocationLabel<JITThunkPtrTag>(Thunks::singleton().stub(locker, throwExceptionFromWasmThunkGenerator).code()));
    7272    return FINALIZE_WASM_CODE(linkBuffer, JITThunkPtrTag, "Throw stack overflow from Wasm");
     
    9494    jit.emitFunctionEpilogue();
    9595    jit.ret();
    96     LinkBuffer linkBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk);
     96    LinkBuffer linkBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::WasmThunk);
    9797    return FINALIZE_WASM_CODE(linkBuffer, JITThunkPtrTag, "Trigger OMG entry tier up");
    9898}
  • trunk/Source/JavaScriptCore/wasm/js/WasmToJS.cpp

    r277680 r277928  
    417417    }
    418418
    419     LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::Thunk, JITCompilationCanFail);
     419    LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::WasmThunk, JITCompilationCanFail);
    420420    if (UNLIKELY(patchBuffer.didFailToAllocate()))
    421421        return makeUnexpected(BindingFailure::OutOfMemory);
Note: See TracChangeset for help on using the changeset viewer.