Changeset 277928 in webkit
- Timestamp:
- May 22, 2021 11:07:01 PM (3 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r277926 r277928 1 2021-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 1 109 2021-05-22 Ross Kirsling <ross.kirsling@sony.com> 2 110 -
trunk/Source/JavaScriptCore/assembler/LinkBuffer.cpp
r277850 r277928 42 42 43 43 size_t LinkBuffer::s_profileCummulativeLinkedSizes[LinkBuffer::numberOfProfiles]; 44 size_t LinkBuffer::s_profileCummulativeLinkedCounts[LinkBuffer::numberOfProfiles]; 44 45 45 46 bool shouldDumpDisassemblyFor(CodeBlock* codeBlock) … … 483 484 484 485 s_profileCummulativeLinkedSizes[static_cast<unsigned>(m_profile)] += m_size; 486 s_profileCummulativeLinkedCounts[static_cast<unsigned>(m_profile)]++; 485 487 MacroAssembler::cacheFlush(code(), m_size); 486 488 } … … 533 535 #endif 534 536 537 void LinkBuffer::clearProfileStatistics() 538 { 539 for (unsigned i = 0; i < numberOfProfiles; ++i) { 540 s_profileCummulativeLinkedSizes[i] = 0; 541 s_profileCummulativeLinkedCounts[i] = 0; 542 } 543 } 544 535 545 void LinkBuffer::dumpProfileStatistics(Optional<PrintStream*> outStream) 536 546 { … … 538 548 Profile profile; 539 549 size_t size; 550 size_t count; 540 551 }; 541 552 … … 552 563 #undef RETURN_LINKBUFFER_PROFILE_NAME 553 564 565 size_t totalOfAllProfilesSize = 0; 554 566 auto dumpStat = [&] (const Stat& stat) { 555 567 char formattedName[21]; … … 567 579 568 580 if (largerUnit) 569 out.print ln(" ", formattedName, ": ", stat.size, " (", sizeInLargerUnit, " ", largerUnit, ")");581 out.print(" ", formattedName, ": ", stat.size, " (", sizeInLargerUnit, " ", largerUnit, ")"); 570 582 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)); 572 589 }; 573 590 … … 575 592 sortedStats[i].profile = static_cast<Profile>(i); 576 593 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], 579 599 [] (Stat& a, Stat& b) -> bool { 580 600 return a.size > b.size; -
trunk/Source/JavaScriptCore/assembler/LinkBuffer.h
r277680 r277928 90 90 v(DFG) \ 91 91 v(FTL) \ 92 v(DFGOSREntry) \ 93 v(DFGOSRExit) \ 94 v(FTLOSRExit) \ 92 95 v(InlineCache) \ 96 v(JumpIsland) \ 93 97 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) \ 94 106 v(Wasm) \ 95 107 v(YarrJIT) \ 96 108 v(CSSJIT) \ 97 v(Uncategorized) 109 v(Uncategorized) \ 110 v(Total) \ 98 111 99 112 #define DECLARE_LINKBUFFER_PROFILE(name) name, … … 106 119 static constexpr unsigned numberOfProfiles = FOR_EACH_LINKBUFFER_PROFILE(COUNT_LINKBUFFER_PROFILE); 107 120 #undef COUNT_LINKBUFFER_PROFILE 121 static constexpr unsigned numberOfProfilesExcludingTotal = numberOfProfiles - 1; 108 122 109 123 LinkBuffer(MacroAssembler& macroAssembler, void* ownerUID, Profile profile = Profile::Uncategorized, JITCompilationEffort effort = JITCompilationMustSucceed) … … 324 338 void didAlreadyDisassemble() { m_alreadyDisassembled = true; } 325 339 340 JS_EXPORT_PRIVATE static void clearProfileStatistics(); 326 341 JS_EXPORT_PRIVATE static void dumpProfileStatistics(Optional<PrintStream*> = WTF::nullopt); 327 342 … … 407 422 408 423 static size_t s_profileCummulativeLinkedSizes[numberOfProfiles]; 424 static size_t s_profileCummulativeLinkedCounts[numberOfProfiles]; 409 425 }; 410 426 -
trunk/Source/JavaScriptCore/dfg/DFGOSRExit.cpp
r277305 r277928 204 204 OSRExit::compileExit(jit, vm, exit, operands, recovery); 205 205 206 LinkBuffer patchBuffer(jit, codeBlock, LinkBuffer::Profile:: Thunk);206 LinkBuffer patchBuffer(jit, codeBlock, LinkBuffer::Profile::DFGOSRExit); 207 207 exit.m_code = FINALIZE_CODE_IF( 208 208 shouldDumpDisassembly() || Options::verboseOSR() || Options::verboseDFGOSRExit(), -
trunk/Source/JavaScriptCore/dfg/DFGThunks.cpp
r277305 r277928 90 90 jit.farJump(MacroAssembler::AbsoluteAddress(&vm.osrExitJumpDestination), OSRExitPtrTag); 91 91 92 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);92 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::DFGThunk); 93 93 94 94 patchBuffer.link(functionCall, FunctionPtr<OperationPtrTag>(operationCompileOSRExit)); … … 135 135 jit.farJump(GPRInfo::regT1, GPRInfo::callFrameRegister); 136 136 137 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);137 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::DFGOSREntry); 138 138 return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "DFG OSR entry thunk"); 139 139 } -
trunk/Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp
r277305 r277928 507 507 adjustAndJumpToTarget(vm, jit, exit); 508 508 509 LinkBuffer patchBuffer(jit, codeBlock, LinkBuffer::Profile:: Thunk);509 LinkBuffer patchBuffer(jit, codeBlock, LinkBuffer::Profile::FTLOSRExit); 510 510 exit.m_code = FINALIZE_CODE_IF( 511 511 shouldDumpDisassembly() || Options::verboseOSR() || Options::verboseFTLOSRExit(), -
trunk/Source/JavaScriptCore/ftl/FTLThunks.cpp
r277305 r277928 125 125 jit.ret(); 126 126 127 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);127 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::FTLThunk); 128 128 patchBuffer.link(functionCall, generationFunction.retagged<OperationPtrTag>()); 129 129 return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "%s", name); … … 232 232 jit.ret(); 233 233 234 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);234 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::FTLThunk); 235 235 patchBuffer.link(call, key.callTarget()); 236 236 return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "FTL slow path call thunk for %s", toCString(key).data()); -
trunk/Source/JavaScriptCore/jit/ExecutableAllocator.cpp
r277920 r277928 645 645 MacroAssembler jit; 646 646 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); 648 648 RELEASE_ASSERT(linkBuffer.isValid()); 649 649 -
trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp
r277902 r277928 381 381 jit.ret(); 382 382 383 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);383 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk); 384 384 return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: op_ret_handler"); 385 385 } … … 642 642 jit.jumpToExceptionHandler(vm); 643 643 644 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);644 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk); 645 645 patchBuffer.link(operation, FunctionPtr<OperationPtrTag>(operationThrow)); 646 646 return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: op_throw_handler"); … … 1198 1198 jit.ret(); 1199 1199 1200 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);1200 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk); 1201 1201 patchBuffer.link(operationWriteBarrierCall, FunctionPtr<OperationPtrTag>(operationWriteBarrierSlowPath)); 1202 1202 #if ENABLE(DFG_JIT) … … 1458 1458 jit.ret(); 1459 1459 1460 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);1460 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk); 1461 1461 patchBuffer.link(operation, FunctionPtr<OperationPtrTag>(operationHandleTraps)); 1462 1462 auto handler = vm.jitStubs->existingCTIStub(popThunkStackPreservesAndHandleExceptionGenerator, NoLockingNecessary); -
trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp
r277757 r277928 162 162 jit.ret(); 163 163 164 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);164 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk); 165 165 return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: slow_op_get_by_val_prepareCall"); 166 166 } … … 268 268 jit.ret(); 269 269 270 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);270 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk); 271 271 return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: slow_op_xxx_private_name_prepareCall"); 272 272 } … … 680 680 jit.ret(); 681 681 682 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);682 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk); 683 683 return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: slow_op_put_xxx_prepareCall"); 684 684 } … … 784 784 jit.ret(); 785 785 786 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);786 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk); 787 787 return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: slow_op_put_put_private_name_prepareCall"); 788 788 } … … 940 940 jit.ret(); 941 941 942 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);942 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk); 943 943 return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: slow_op_del_by_id_prepareCall"); 944 944 } … … 1050 1050 jit.ret(); 1051 1051 1052 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);1052 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk); 1053 1053 return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: slow_op_del_by_val_prepareCall"); 1054 1054 } … … 1316 1316 jit.ret(); 1317 1317 1318 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);1318 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk); 1319 1319 return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: slow_op_get_by_id_prepareCall"); 1320 1320 } … … 1397 1397 jit.ret(); 1398 1398 1399 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);1399 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk); 1400 1400 return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: slow_op_get_by_id_with_this_prepareCall"); 1401 1401 } … … 1505 1505 jit.ret(); 1506 1506 1507 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);1507 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk); 1508 1508 return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "Baseline: slow_op_put_by_id_prepareCall"); 1509 1509 } … … 1904 1904 jit.ret(); 1905 1905 1906 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);1906 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk); 1907 1907 patchBuffer.link(operation, FunctionPtr<OperationPtrTag>(operationGetFromScope)); 1908 1908 auto handler = vm.jitStubs->existingCTIStub(popThunkStackPreservesAndHandleExceptionGenerator, NoLockingNecessary); … … 2125 2125 jit.ret(); 2126 2126 2127 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);2127 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk); 2128 2128 patchBuffer.link(operation, FunctionPtr<OperationPtrTag>(operationPutToScope)); 2129 2129 auto handler = vm.jitStubs->existingCTIStub(popThunkStackPreservesAndHandleExceptionGenerator, NoLockingNecessary); -
trunk/Source/JavaScriptCore/jit/SlowPathCall.cpp
r277648 r277928 87 87 auto handler = vm.jitStubs->existingCTIStub(popThunkStackPreservesAndHandleExceptionGenerator, NoLockingNecessary); 88 88 89 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);89 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk); 90 90 patchBuffer.link(call, FunctionPtr<OperationPtrTag>(slowPathFunction)); 91 91 patchBuffer.link(exceptionCheck, CodeLocationLabel(handler.retaggedCode<NoPtrTag>())); -
trunk/Source/JavaScriptCore/jit/SpecializedThunkJIT.h
r277305 r277928 156 156 MacroAssemblerCodeRef<JITThunkPtrTag> finalize(MacroAssemblerCodePtr<JITThunkPtrTag> fallback, const char* thunkKind) 157 157 { 158 LinkBuffer patchBuffer(*this, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);158 LinkBuffer patchBuffer(*this, GLOBAL_THUNK_ID, LinkBuffer::Profile::SpecializedThunk); 159 159 patchBuffer.link(m_failures, CodeLocationLabel<JITThunkPtrTag>(fallback)); 160 160 for (unsigned i = 0; i < m_calls.size(); i++) -
trunk/Source/JavaScriptCore/jit/ThunkGenerators.cpp
r277500 r277928 57 57 jit.jumpToExceptionHandler(vm); 58 58 59 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);59 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk); 60 60 patchBuffer.link(operation, FunctionPtr<OperationPtrTag>(operationLookupExceptionHandler)); 61 61 return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "handleException"); … … 73 73 jit.jumpToExceptionHandler(vm); 74 74 75 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);75 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk); 76 76 patchBuffer.link(operation, FunctionPtr<OperationPtrTag>(operationLookupExceptionHandlerFromCallerFrame)); 77 77 return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "handleExceptionWithCallFrameRollback"); … … 90 90 CCallHelpers::Jump continuation = jit.jump(); 91 91 92 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);92 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk); 93 93 auto handler = vm.jitStubs->existingCTIStub(handleExceptionGenerator, NoLockingNecessary); 94 94 RELEASE_ASSERT(handler); … … 132 132 #endif 133 133 134 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);134 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::ExtraCTIThunk); 135 135 patchBuffer.link(handleException, CodeLocationLabel(vm.jitStubs->existingCTIStub(handlerGenerator, NoLockingNecessary).retaggedCode<NoPtrTag>())); 136 136 return FINALIZE_CODE(patchBuffer, JITThunkPtrTag, "CheckException"); … … 334 334 slowPathFor(jit, vm, operationVirtualCall); 335 335 336 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);336 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::VirtualThunk); 337 337 return FINALIZE_CODE( 338 338 patchBuffer, JITStubRoutinePtrTag, … … 1373 1373 jit.ret(); 1374 1374 1375 LinkBuffer linkBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);1375 LinkBuffer linkBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::BoundFunctionThunk); 1376 1376 linkBuffer.link(noCode, CodeLocationLabel<JITThunkPtrTag>(vm.jitStubs->ctiNativeTailCallWithoutSavedTags(vm))); 1377 1377 return FINALIZE_CODE( -
trunk/Source/JavaScriptCore/llint/LLIntThunks.cpp
r277305 r277928 89 89 jit.farJump(scratch, OperationPtrTag); 90 90 91 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);91 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk); 92 92 return FINALIZE_CODE(patchBuffer, tag, "LLInt %s thunk", thunkKind); 93 93 } … … 116 116 jit.farJump(scratch, OperationPtrTag); 117 117 118 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);118 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk); 119 119 return FINALIZE_CODE(patchBuffer, tag, "LLInt %s jump to prologue thunk", thunkKind); 120 120 } … … 126 126 assertIsTaggedWith<OperationPtrTag>(target); 127 127 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); 129 129 return FINALIZE_CODE(patchBuffer, tag, "LLInt %s return point thunk", thunkKind); 130 130 } … … 248 248 jit.ret(); 249 249 250 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);250 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk); 251 251 codeRef.construct(FINALIZE_CODE(patchBuffer, JSEntryPtrTag, "LLInt::getHostCallReturnValue thunk")); 252 252 }); … … 358 358 jit.farJump(GPRInfo::regT3, OperationPtrTag); 359 359 360 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);360 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk); 361 361 return FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "LLInt %s call gate thunk", name); 362 362 } … … 370 370 jit.farJump(GPRInfo::wasmScratchGPR1, OperationPtrTag); 371 371 372 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);372 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk); 373 373 return FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "LLInt %s wasm call gate thunk", name); 374 374 } … … 382 382 jit.farJump(GPRInfo::regT0, tag); 383 383 384 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);384 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk); 385 385 return FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "LLInt tail call gate thunk"); 386 386 } … … 395 395 jit.farJump(GPRInfo::argumentGPR0, JSEntryPtrTag); 396 396 397 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);397 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk); 398 398 codeRef.construct(FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "loop OSR entry thunk")); 399 399 }); … … 411 411 jit.farJump(GPRInfo::argumentGPR0, JSEntryPtrTag); 412 412 413 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);413 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk); 414 414 codeRef.construct(FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "entry OSR entry thunk")); 415 415 }); … … 427 427 jit.farJump(GPRInfo::wasmScratchGPR0, WasmEntryPtrTag); 428 428 429 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);429 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk); 430 430 codeRef.construct(FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "wasm OSR entry thunk")); 431 431 }); … … 442 442 jit.farJump(GPRInfo::regT0, ExceptionHandlerPtrTag); 443 443 444 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);444 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk); 445 445 codeRef.construct(FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "exception handler thunk")); 446 446 }); … … 457 457 jit.ret(); 458 458 459 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);459 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk); 460 460 codeRef.construct(FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "returnFromLLInt thunk")); 461 461 }); … … 473 473 jit.farJump(GPRInfo::regT3, OperationPtrTag); 474 474 475 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);475 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk); 476 476 return FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "tag thunk"); 477 477 } … … 488 488 jit.farJump(GPRInfo::regT3, OperationPtrTag); 489 489 490 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);490 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::LLIntThunk); 491 491 return FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "untag thunk"); 492 492 } … … 503 503 CCallHelpers jit; 504 504 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); 506 506 codeRef.construct(FINALIZE_CODE(patchBuffer, NativeToJITGatePtrTag, "jitCagePtr thunk")); 507 507 }); -
trunk/Source/JavaScriptCore/tools/JSDollarVM.cpp
r277786 r277928 1918 1918 static JSC_DECLARE_HOST_FUNCTION(functionIndexingMode); 1919 1919 static JSC_DECLARE_HOST_FUNCTION(functionInlineCapacity); 1920 static JSC_DECLARE_HOST_FUNCTION(functionClearLinkBufferStats); 1920 1921 static JSC_DECLARE_HOST_FUNCTION(functionLinkBufferStats); 1921 1922 static JSC_DECLARE_HOST_FUNCTION(functionValue); … … 2519 2520 } 2520 2521 2522 // Clears the LinkBuffer profile statistics. 2523 // Usage: $vm.clearLinkBufferStats() 2524 JSC_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 2521 2533 // Dumps the LinkBuffer profile statistics as a string. 2522 2534 // Usage: $vm.print($vm.linkBufferStats()) … … 3637 3649 addFunction(vm, "indexingMode", functionIndexingMode, 1); 3638 3650 addFunction(vm, "inlineCapacity", functionInlineCapacity, 1); 3651 addFunction(vm, "clearLinkBufferStats", functionClearLinkBufferStats, 0); 3639 3652 addFunction(vm, "linkBufferStats", functionLinkBufferStats, 0); 3640 3653 addFunction(vm, "value", functionValue, 1); -
trunk/Source/JavaScriptCore/wasm/WasmBinding.cpp
r277305 r277928 78 78 jit.farJump(scratch, WasmEntryPtrTag); 79 79 80 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk, JITCompilationCanFail);80 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::WasmThunk, JITCompilationCanFail); 81 81 if (UNLIKELY(patchBuffer.didFailToAllocate())) 82 82 return makeUnexpected(BindingFailure::OutOfMemory); -
trunk/Source/JavaScriptCore/wasm/WasmThunks.cpp
r277909 r277928 54 54 jit.breakpoint(); // We should not reach this. 55 55 56 LinkBuffer linkBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);56 LinkBuffer linkBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::WasmThunk); 57 57 linkBuffer.link(call, FunctionPtr<OperationPtrTag>(operationWasmToJSException)); 58 58 return FINALIZE_WASM_CODE(linkBuffer, JITThunkPtrTag, "Throw exception from Wasm"); … … 68 68 jit.move(CCallHelpers::TrustedImm32(static_cast<uint32_t>(ExceptionType::StackOverflow)), GPRInfo::argumentGPR1); 69 69 auto jumpToExceptionHandler = jit.jump(); 70 LinkBuffer linkBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);70 LinkBuffer linkBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::WasmThunk); 71 71 linkBuffer.link(jumpToExceptionHandler, CodeLocationLabel<JITThunkPtrTag>(Thunks::singleton().stub(locker, throwExceptionFromWasmThunkGenerator).code())); 72 72 return FINALIZE_WASM_CODE(linkBuffer, JITThunkPtrTag, "Throw stack overflow from Wasm"); … … 94 94 jit.emitFunctionEpilogue(); 95 95 jit.ret(); 96 LinkBuffer linkBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk);96 LinkBuffer linkBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::WasmThunk); 97 97 return FINALIZE_WASM_CODE(linkBuffer, JITThunkPtrTag, "Trigger OMG entry tier up"); 98 98 } -
trunk/Source/JavaScriptCore/wasm/js/WasmToJS.cpp
r277680 r277928 417 417 } 418 418 419 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile:: Thunk, JITCompilationCanFail);419 LinkBuffer patchBuffer(jit, GLOBAL_THUNK_ID, LinkBuffer::Profile::WasmThunk, JITCompilationCanFail); 420 420 if (UNLIKELY(patchBuffer.didFailToAllocate())) 421 421 return makeUnexpected(BindingFailure::OutOfMemory);
Note: See TracChangeset
for help on using the changeset viewer.