Changeset 244764 in webkit
- Timestamp:
- Apr 29, 2019, 8:27:39 PM (7 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 47 edited
-
ChangeLog (modified) (1 diff)
-
bytecode/CallLinkStatus.cpp (modified) (1 diff)
-
bytecode/CodeBlock.cpp (modified) (18 diffs)
-
bytecode/CodeBlock.h (modified) (4 diffs)
-
bytecode/CodeBlockWithJITType.h (modified) (2 diffs)
-
bytecode/DeferredSourceDump.cpp (modified) (1 diff)
-
bytecode/DeferredSourceDump.h (modified) (2 diffs)
-
bytecode/ExitingJITType.h (modified) (1 diff)
-
bytecode/InlineCallFrame.h (modified) (1 diff)
-
dfg/DFGByteCodeParser.cpp (modified) (2 diffs)
-
dfg/DFGDisassembler.cpp (modified) (1 diff)
-
dfg/DFGDriver.cpp (modified) (1 diff)
-
dfg/DFGGraph.cpp (modified) (1 diff)
-
dfg/DFGJITCode.cpp (modified) (8 diffs)
-
dfg/DFGJITFinalizer.cpp (modified) (2 diffs)
-
dfg/DFGOSREntry.cpp (modified) (3 diffs)
-
dfg/DFGOSRExit.cpp (modified) (5 diffs)
-
dfg/DFGOSRExitCompilerCommon.cpp (modified) (3 diffs)
-
dfg/DFGOSRExitCompilerCommon.h (modified) (1 diff)
-
dfg/DFGOperations.cpp (modified) (3 diffs)
-
dfg/DFGThunks.cpp (modified) (1 diff)
-
dfg/DFGVariableEventStream.cpp (modified) (1 diff)
-
ftl/FTLCompile.cpp (modified) (2 diffs)
-
ftl/FTLJITCode.cpp (modified) (1 diff)
-
ftl/FTLJITFinalizer.cpp (modified) (1 diff)
-
ftl/FTLLink.cpp (modified) (1 diff)
-
ftl/FTLOSRExitCompiler.cpp (modified) (1 diff)
-
ftl/FTLThunks.cpp (modified) (1 diff)
-
interpreter/CallFrame.cpp (modified) (2 diffs)
-
interpreter/StackVisitor.cpp (modified) (1 diff)
-
jit/AssemblyHelpers.h (modified) (1 diff)
-
jit/JIT.cpp (modified) (2 diffs)
-
jit/JITCode.cpp (modified) (2 diffs)
-
jit/JITCode.h (modified) (9 diffs)
-
jit/JITDisassembler.cpp (modified) (1 diff)
-
jit/JITOperations.cpp (modified) (3 diffs)
-
jit/JITThunks.cpp (modified) (1 diff)
-
jit/JITToDFGDeferredCompilationCallback.cpp (modified) (2 diffs)
-
jit/JITWorklist.cpp (modified) (3 diffs)
-
jit/Repatch.cpp (modified) (2 diffs)
-
llint/LLIntEntrypoint.cpp (modified) (10 diffs)
-
llint/LLIntSlowPaths.cpp (modified) (3 diffs)
-
runtime/SamplingProfiler.cpp (modified) (1 diff)
-
runtime/SamplingProfiler.h (modified) (1 diff)
-
runtime/VM.cpp (modified) (2 diffs)
-
tools/CodeProfile.cpp (modified) (1 diff)
-
tools/JSDollarVM.cpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r244763 r244764 1 2019-04-29 Saam Barati <sbarati@apple.com> 2 3 Make JITType an enum class 4 https://bugs.webkit.org/show_bug.cgi?id=197394 5 6 Reviewed by Yusuke Suzuki. 7 8 This makes the code more easily searchable. 9 10 * bytecode/CallLinkStatus.cpp: 11 (JSC::CallLinkStatus::computeFor): 12 * bytecode/CodeBlock.cpp: 13 (JSC::CodeBlock::dumpAssumingJITType const): 14 (JSC::CodeBlock::specialOSREntryBlockOrNull): 15 (JSC::timeToLive): 16 (JSC::CodeBlock::propagateTransitions): 17 (JSC::CodeBlock::baselineAlternative): 18 (JSC::CodeBlock::baselineVersion): 19 (JSC::CodeBlock::hasOptimizedReplacement): 20 (JSC::CodeBlock::noticeIncomingCall): 21 (JSC::CodeBlock::setOptimizationThresholdBasedOnCompilationResult): 22 (JSC::CodeBlock::tallyFrequentExitSites): 23 (JSC::CodeBlock::frameRegisterCount): 24 (JSC::CodeBlock::bytecodeOffsetFromCallSiteIndex): 25 * bytecode/CodeBlock.h: 26 (JSC::CodeBlock::jitType const): 27 (JSC::CodeBlock::hasBaselineJITProfiling const): 28 * bytecode/CodeBlockWithJITType.h: 29 (JSC::CodeBlockWithJITType::CodeBlockWithJITType): 30 * bytecode/DeferredSourceDump.cpp: 31 (JSC::DeferredSourceDump::DeferredSourceDump): 32 * bytecode/DeferredSourceDump.h: 33 * bytecode/ExitingJITType.h: 34 (JSC::exitingJITTypeFor): 35 * bytecode/InlineCallFrame.h: 36 (JSC::baselineCodeBlockForOriginAndBaselineCodeBlock): 37 * dfg/DFGByteCodeParser.cpp: 38 (JSC::DFG::ByteCodeParser::parseCodeBlock): 39 * dfg/DFGDisassembler.cpp: 40 (JSC::DFG::Disassembler::dumpHeader): 41 * dfg/DFGDriver.cpp: 42 (JSC::DFG::compileImpl): 43 * dfg/DFGGraph.cpp: 44 (JSC::DFG::Graph::dump): 45 * dfg/DFGJITCode.cpp: 46 (JSC::DFG::JITCode::JITCode): 47 (JSC::DFG::JITCode::checkIfOptimizationThresholdReached): 48 (JSC::DFG::JITCode::optimizeNextInvocation): 49 (JSC::DFG::JITCode::dontOptimizeAnytimeSoon): 50 (JSC::DFG::JITCode::optimizeAfterWarmUp): 51 (JSC::DFG::JITCode::optimizeSoon): 52 (JSC::DFG::JITCode::forceOptimizationSlowPathConcurrently): 53 (JSC::DFG::JITCode::setOptimizationThresholdBasedOnCompilationResult): 54 * dfg/DFGJITFinalizer.cpp: 55 (JSC::DFG::JITFinalizer::finalize): 56 (JSC::DFG::JITFinalizer::finalizeFunction): 57 * dfg/DFGOSREntry.cpp: 58 (JSC::DFG::prepareOSREntry): 59 (JSC::DFG::prepareCatchOSREntry): 60 * dfg/DFGOSRExit.cpp: 61 (JSC::DFG::OSRExit::executeOSRExit): 62 (JSC::DFG::reifyInlinedCallFrames): 63 (JSC::DFG::OSRExit::compileOSRExit): 64 * dfg/DFGOSRExitCompilerCommon.cpp: 65 (JSC::DFG::handleExitCounts): 66 (JSC::DFG::reifyInlinedCallFrames): 67 (JSC::DFG::adjustAndJumpToTarget): 68 * dfg/DFGOSRExitCompilerCommon.h: 69 (JSC::DFG::adjustFrameAndStackInOSRExitCompilerThunk): 70 * dfg/DFGOperations.cpp: 71 * dfg/DFGThunks.cpp: 72 (JSC::DFG::osrExitGenerationThunkGenerator): 73 * dfg/DFGVariableEventStream.cpp: 74 (JSC::DFG::VariableEventStream::reconstruct const): 75 * ftl/FTLCompile.cpp: 76 (JSC::FTL::compile): 77 * ftl/FTLJITCode.cpp: 78 (JSC::FTL::JITCode::JITCode): 79 * ftl/FTLJITFinalizer.cpp: 80 (JSC::FTL::JITFinalizer::finalizeCommon): 81 * ftl/FTLLink.cpp: 82 (JSC::FTL::link): 83 * ftl/FTLOSRExitCompiler.cpp: 84 (JSC::FTL::compileFTLOSRExit): 85 * ftl/FTLThunks.cpp: 86 (JSC::FTL::genericGenerationThunkGenerator): 87 * interpreter/CallFrame.cpp: 88 (JSC::CallFrame::callSiteBitsAreBytecodeOffset const): 89 (JSC::CallFrame::callSiteBitsAreCodeOriginIndex const): 90 * interpreter/StackVisitor.cpp: 91 (JSC::StackVisitor::Frame::dump const): 92 * jit/AssemblyHelpers.h: 93 (JSC::AssemblyHelpers::AssemblyHelpers): 94 * jit/JIT.cpp: 95 (JSC::JIT::link): 96 * jit/JITCode.cpp: 97 (JSC::JITCode::typeName): 98 (WTF::printInternal): 99 * jit/JITCode.h: 100 (JSC::JITCode::bottomTierJIT): 101 (JSC::JITCode::topTierJIT): 102 (JSC::JITCode::nextTierJIT): 103 (JSC::JITCode::isExecutableScript): 104 (JSC::JITCode::couldBeInterpreted): 105 (JSC::JITCode::isJIT): 106 (JSC::JITCode::isOptimizingJIT): 107 (JSC::JITCode::isBaselineCode): 108 (JSC::JITCode::jitTypeFor): 109 * jit/JITDisassembler.cpp: 110 (JSC::JITDisassembler::dumpHeader): 111 * jit/JITOperations.cpp: 112 * jit/JITThunks.cpp: 113 (JSC::JITThunks::hostFunctionStub): 114 * jit/JITToDFGDeferredCompilationCallback.cpp: 115 (JSC::JITToDFGDeferredCompilationCallback::compilationDidBecomeReadyAsynchronously): 116 (JSC::JITToDFGDeferredCompilationCallback::compilationDidComplete): 117 * jit/JITWorklist.cpp: 118 (JSC::JITWorklist::compileLater): 119 (JSC::JITWorklist::compileNow): 120 * jit/Repatch.cpp: 121 (JSC::readPutICCallTarget): 122 (JSC::ftlThunkAwareRepatchCall): 123 * llint/LLIntEntrypoint.cpp: 124 (JSC::LLInt::setFunctionEntrypoint): 125 (JSC::LLInt::setEvalEntrypoint): 126 (JSC::LLInt::setProgramEntrypoint): 127 (JSC::LLInt::setModuleProgramEntrypoint): 128 * llint/LLIntSlowPaths.cpp: 129 (JSC::LLInt::jitCompileAndSetHeuristics): 130 (JSC::LLInt::LLINT_SLOW_PATH_DECL): 131 * runtime/SamplingProfiler.cpp: 132 (JSC::SamplingProfiler::processUnverifiedStackTraces): 133 * runtime/SamplingProfiler.h: 134 * runtime/VM.cpp: 135 (JSC::jitCodeForCallTrampoline): 136 (JSC::jitCodeForConstructTrampoline): 137 * tools/CodeProfile.cpp: 138 (JSC::CodeProfile::sample): 139 * tools/JSDollarVM.cpp: 140 (JSC::CallerFrameJITTypeFunctor::CallerFrameJITTypeFunctor): 141 (JSC::CallerFrameJITTypeFunctor::jitType): 142 (JSC::functionLLintTrue): 143 (JSC::functionJITTrue): 144 1 145 2019-04-29 Yusuke Suzuki <ysuzuki@apple.com> 2 146 -
trunk/Source/JavaScriptCore/bytecode/CallLinkStatus.cpp
r243467 r244764 343 343 // path or it's a full IC. So, for them, if there is an IC status then it means case (1). 344 344 345 bool checkStatusFirst = context->optimizedCodeBlock->jitType() == JIT Code::FTLJIT;345 bool checkStatusFirst = context->optimizedCodeBlock->jitType() == JITType::FTLJIT; 346 346 347 347 auto bless = [&] (CallLinkStatus& result) { -
trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp
r244088 r244764 181 181 } 182 182 183 void CodeBlock::dumpAssumingJITType(PrintStream& out, JIT Code::JITType jitType) const183 void CodeBlock::dumpAssumingJITType(PrintStream& out, JITType jitType) const 184 184 { 185 185 out.print(inferredName(), "#", hashAsStringIfPossible()); … … 192 192 out.print(specializationKind()); 193 193 out.print(", ", instructionCount()); 194 if (this->jitType() == JIT Code::BaselineJIT && m_shouldAlwaysBeInlined)194 if (this->jitType() == JITType::BaselineJIT && m_shouldAlwaysBeInlined) 195 195 out.print(" (ShouldAlwaysBeInlined)"); 196 196 if (ownerExecutable()->neverInline()) … … 206 206 if (m_didFailJITCompilation) 207 207 out.print(" (JITFail)"); 208 if (this->jitType() == JIT Code::BaselineJIT && m_didFailFTLCompilation)208 if (this->jitType() == JITType::BaselineJIT && m_didFailFTLCompilation) 209 209 out.print(" (FTLFail)"); 210 if (this->jitType() == JIT Code::BaselineJIT && m_hasBeenCompiledWithFTL)210 if (this->jitType() == JITType::BaselineJIT && m_hasBeenCompiledWithFTL) 211 211 out.print(" (HadFTLReplacement)"); 212 212 out.print("]"); … … 930 930 { 931 931 #if ENABLE(FTL_JIT) 932 if (jitType() != JIT Code::DFGJIT)932 if (jitType() != JITType::DFGJIT) 933 933 return 0; 934 934 DFG::JITCode* jitCode = m_jitCode->dfg(); … … 1003 1003 } 1004 1004 1005 static Seconds timeToLive(JIT Code::JITType jitType)1005 static Seconds timeToLive(JITType jitType) 1006 1006 { 1007 1007 if (UNLIKELY(Options::useEagerCodeBlockJettisonTiming())) { 1008 1008 switch (jitType) { 1009 case JIT Code::InterpreterThunk:1009 case JITType::InterpreterThunk: 1010 1010 return 10_ms; 1011 case JIT Code::BaselineJIT:1011 case JITType::BaselineJIT: 1012 1012 return 30_ms; 1013 case JIT Code::DFGJIT:1013 case JITType::DFGJIT: 1014 1014 return 40_ms; 1015 case JIT Code::FTLJIT:1015 case JITType::FTLJIT: 1016 1016 return 120_ms; 1017 1017 default: … … 1021 1021 1022 1022 switch (jitType) { 1023 case JIT Code::InterpreterThunk:1023 case JITType::InterpreterThunk: 1024 1024 return 5_s; 1025 case JIT Code::BaselineJIT:1025 case JITType::BaselineJIT: 1026 1026 // Effectively 10 additional seconds, since BaselineJIT and 1027 1027 // InterpreterThunk share a CodeBlock. 1028 1028 return 15_s; 1029 case JIT Code::DFGJIT:1029 case JITType::DFGJIT: 1030 1030 return 20_s; 1031 case JIT Code::FTLJIT:1031 case JITType::FTLJIT: 1032 1032 return 60_s; 1033 1033 default: … … 1069 1069 VM& vm = *m_vm; 1070 1070 1071 if (jitType() == JIT Code::InterpreterThunk) {1071 if (jitType() == JITType::InterpreterThunk) { 1072 1072 const Vector<InstructionStream::Offset>& propertyAccessInstructions = m_unlinkedCode->propertyAccessInstructions(); 1073 1073 const InstructionStream& instructionStream = instructions(); … … 1631 1631 result = result->alternative(); 1632 1632 RELEASE_ASSERT(result); 1633 RELEASE_ASSERT(JITCode::isBaselineCode(result->jitType()) || result->jitType() == JIT Code::None);1633 RELEASE_ASSERT(JITCode::isBaselineCode(result->jitType()) || result->jitType() == JITType::None); 1634 1634 return result; 1635 1635 #else … … 1641 1641 { 1642 1642 #if ENABLE(JIT) 1643 JIT Code::JITType selfJITType = jitType();1643 JITType selfJITType = jitType(); 1644 1644 if (JITCode::isBaselineCode(selfJITType)) 1645 1645 return this; … … 1655 1655 // This can happen if we're creating the original CodeBlock for an executable. 1656 1656 // Assume that we're the baseline CodeBlock. 1657 RELEASE_ASSERT(selfJITType == JIT Code::None);1657 RELEASE_ASSERT(selfJITType == JITType::None); 1658 1658 return this; 1659 1659 } … … 1668 1668 1669 1669 #if ENABLE(JIT) 1670 bool CodeBlock::hasOptimizedReplacement(JIT Code::JITType typeToReplace)1670 bool CodeBlock::hasOptimizedReplacement(JITType typeToReplace) 1671 1671 { 1672 1672 CodeBlock* replacement = this->replacement(); … … 2148 2148 } 2149 2149 2150 if (callerCodeBlock->jitType() == JIT Code::InterpreterThunk) {2150 if (callerCodeBlock->jitType() == JITType::InterpreterThunk) { 2151 2151 // If the caller is still in the interpreter, then we can't expect inlining to 2152 2152 // happen anytime soon. Assume it's profitable to optimize it separately. This … … 2490 2490 void CodeBlock::setOptimizationThresholdBasedOnCompilationResult(CompilationResult result) 2491 2491 { 2492 JIT Code::JITType type = jitType();2493 if (type != JIT Code::BaselineJIT) {2492 JITType type = jitType(); 2493 if (type != JITType::BaselineJIT) { 2494 2494 dataLog(*this, ": expected to have baseline code but have ", type, "\n"); 2495 CRASH_WITH_INFO(bitwise_cast<uintptr_t>(jitCode().get()), type);2495 CRASH_WITH_INFO(bitwise_cast<uintptr_t>(jitCode().get()), static_cast<uint8_t>(type)); 2496 2496 } 2497 2497 … … 2724 2724 { 2725 2725 ASSERT(JITCode::isOptimizingJIT(jitType())); 2726 ASSERT(alternative()->jitType() == JIT Code::BaselineJIT);2726 ASSERT(alternative()->jitType() == JITType::BaselineJIT); 2727 2727 2728 2728 CodeBlock* profiledBlock = alternative(); 2729 2729 2730 2730 switch (jitType()) { 2731 case JIT Code::DFGJIT: {2731 case JITType::DFGJIT: { 2732 2732 DFG::JITCode* jitCode = m_jitCode->dfg(); 2733 2733 for (auto& exit : jitCode->osrExit) … … 2737 2737 2738 2738 #if ENABLE(FTL_JIT) 2739 case JIT Code::FTLJIT: {2739 case JITType::FTLJIT: { 2740 2740 // There is no easy way to avoid duplicating this code since the FTL::JITCode::osrExit 2741 2741 // vector contains a totally different type, that just so happens to behave like … … 2825 2825 { 2826 2826 switch (jitType()) { 2827 case JIT Code::InterpreterThunk:2827 case JITType::InterpreterThunk: 2828 2828 return LLInt::frameRegisterCountFor(this); 2829 2829 2830 2830 #if ENABLE(JIT) 2831 case JIT Code::BaselineJIT:2831 case JITType::BaselineJIT: 2832 2832 return JIT::frameRegisterCountFor(this); 2833 2833 #endif // ENABLE(JIT) 2834 2834 2835 2835 #if ENABLE(DFG_JIT) 2836 case JIT Code::DFGJIT:2837 case JIT Code::FTLJIT:2836 case JITType::DFGJIT: 2837 case JITType::FTLJIT: 2838 2838 return jitCode()->dfgCommon()->frameRegisterCount; 2839 2839 #endif // ENABLE(DFG_JIT) … … 3176 3176 { 3177 3177 Optional<unsigned> bytecodeOffset; 3178 JIT Code::JITType jitType = this->jitType();3179 if (jitType == JIT Code::InterpreterThunk || jitType == JITCode::BaselineJIT) {3178 JITType jitType = this->jitType(); 3179 if (jitType == JITType::InterpreterThunk || jitType == JITType::BaselineJIT) { 3180 3180 #if USE(JSVALUE64) 3181 3181 bytecodeOffset = callSiteIndex.bits(); … … 3184 3184 bytecodeOffset = this->bytecodeOffset(instruction); 3185 3185 #endif 3186 } else if (jitType == JIT Code::DFGJIT || jitType == JITCode::FTLJIT) {3186 } else if (jitType == JITType::DFGJIT || jitType == JITType::FTLJIT) { 3187 3187 #if ENABLE(DFG_JIT) 3188 3188 RELEASE_ASSERT(canGetCodeOrigin(callSiteIndex)); -
trunk/Source/JavaScriptCore/bytecode/CodeBlock.h
r243467 r244764 143 143 CString sourceCodeForTools() const; // Not quite the actual source we parsed; this will do things like prefix the source for a function with a reified signature. 144 144 CString sourceCodeOnOneLine() const; // As sourceCodeForTools(), but replaces all whitespace runs with a single space. 145 void dumpAssumingJITType(PrintStream&, JIT Code::JITType) const;145 void dumpAssumingJITType(PrintStream&, JITType) const; 146 146 JS_EXPORT_PRIVATE void dump(PrintStream&) const; 147 147 … … 403 403 RefPtr<JITCode> jitCode() { return m_jitCode; } 404 404 static ptrdiff_t jitCodeOffset() { return OBJECT_OFFSETOF(CodeBlock, m_jitCode); } 405 JIT Code::JITType jitType() const405 JITType jitType() const 406 406 { 407 407 JITCode* jitCode = m_jitCode.get(); 408 408 WTF::loadLoadFence(); 409 JIT Code::JITType result = JITCode::jitTypeFor(jitCode);409 JITType result = JITCode::jitTypeFor(jitCode); 410 410 WTF::loadLoadFence(); // This probably isn't needed. Oh well, paranoia is good. 411 411 return result; … … 414 414 bool hasBaselineJITProfiling() const 415 415 { 416 return jitType() == JIT Code::BaselineJIT;416 return jitType() == JITType::BaselineJIT; 417 417 } 418 418 … … 424 424 DFG::CapabilityLevel capabilityLevelState() { return static_cast<DFG::CapabilityLevel>(m_capabilityLevelState); } 425 425 426 bool hasOptimizedReplacement(JIT Code::JITType typeToReplace);426 bool hasOptimizedReplacement(JITType typeToReplace); 427 427 bool hasOptimizedReplacement(); // the typeToReplace is my JITType 428 428 #endif -
trunk/Source/JavaScriptCore/bytecode/CodeBlockWithJITType.h
r206525 r244764 35 35 class CodeBlockWithJITType { 36 36 public: 37 CodeBlockWithJITType(CodeBlock* codeBlock, JIT Code::JITType jitType)37 CodeBlockWithJITType(CodeBlock* codeBlock, JITType jitType) 38 38 : m_codeBlock(codeBlock) 39 39 , m_jitType(jitType) … … 47 47 private: 48 48 CodeBlock* m_codeBlock; 49 JIT Code::JITType m_jitType;49 JITType m_jitType; 50 50 }; 51 51 -
trunk/Source/JavaScriptCore/bytecode/DeferredSourceDump.cpp
r235684 r244764 35 35 DeferredSourceDump::DeferredSourceDump(CodeBlock* codeBlock) 36 36 : m_codeBlock(*codeBlock->vm(), codeBlock) 37 , m_rootJITType(JIT Code::None)37 , m_rootJITType(JITType::None) 38 38 { 39 39 } 40 40 41 DeferredSourceDump::DeferredSourceDump(CodeBlock* codeBlock, CodeBlock* rootCodeBlock, JIT Code::JITType rootJITType, unsigned callerBytecodeIndex)41 DeferredSourceDump::DeferredSourceDump(CodeBlock* codeBlock, CodeBlock* rootCodeBlock, JITType rootJITType, unsigned callerBytecodeIndex) 42 42 : m_codeBlock(*codeBlock->vm(), codeBlock) 43 43 , m_rootCodeBlock(*codeBlock->vm(), rootCodeBlock) -
trunk/Source/JavaScriptCore/bytecode/DeferredSourceDump.h
r243232 r244764 36 36 public: 37 37 DeferredSourceDump(CodeBlock*); 38 DeferredSourceDump(CodeBlock*, CodeBlock* rootCodeBlock, JIT Code::JITType rootJITType, unsigned callerBytecodeIndex);38 DeferredSourceDump(CodeBlock*, CodeBlock* rootCodeBlock, JITType rootJITType, unsigned callerBytecodeIndex); 39 39 40 40 void dump(); … … 43 43 Strong<CodeBlock> m_codeBlock; 44 44 Strong<CodeBlock> m_rootCodeBlock; 45 JIT Code::JITType m_rootJITType;45 JITType m_rootJITType; 46 46 unsigned m_callerBytecodeIndex { UINT_MAX }; 47 47 }; -
trunk/Source/JavaScriptCore/bytecode/ExitingJITType.h
r206525 r244764 36 36 }; 37 37 38 inline ExitingJITType exitingJITTypeFor(JIT Code::JITType type)38 inline ExitingJITType exitingJITTypeFor(JITType type) 39 39 { 40 40 switch (type) { 41 case JIT Code::DFGJIT:41 case JITType::DFGJIT: 42 42 return ExitFromDFG; 43 case JIT Code::FTLJIT:43 case JITType::FTLJIT: 44 44 return ExitFromFTL; 45 45 default: -
trunk/Source/JavaScriptCore/bytecode/InlineCallFrame.h
r243232 r244764 241 241 inline CodeBlock* baselineCodeBlockForOriginAndBaselineCodeBlock(const CodeOrigin& codeOrigin, CodeBlock* baselineCodeBlock) 242 242 { 243 ASSERT(baselineCodeBlock->jitType() == JIT Code::BaselineJIT);243 ASSERT(baselineCodeBlock->jitType() == JITType::BaselineJIT); 244 244 auto* inlineCallFrame = codeOrigin.inlineCallFrame(); 245 245 if (inlineCallFrame) -
trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
r244324 r244764 7095 7095 Vector<DeferredSourceDump>& deferredSourceDump = m_graph.m_plan.callback()->ensureDeferredSourceDump(); 7096 7096 if (inlineCallFrame()) { 7097 DeferredSourceDump dump(codeBlock->baselineVersion(), m_codeBlock, JIT Code::DFGJIT, inlineCallFrame()->directCaller.bytecodeIndex());7097 DeferredSourceDump dump(codeBlock->baselineVersion(), m_codeBlock, JITType::DFGJIT, inlineCallFrame()->directCaller.bytecodeIndex()); 7098 7098 deferredSourceDump.append(dump); 7099 7099 } else … … 7105 7105 if (inlineCallFrame()) { 7106 7106 dataLog( 7107 " for inlining at ", CodeBlockWithJITType(m_codeBlock, JIT Code::DFGJIT),7107 " for inlining at ", CodeBlockWithJITType(m_codeBlock, JITType::DFGJIT), 7108 7108 " ", inlineCallFrame()->directCaller); 7109 7109 } -
trunk/Source/JavaScriptCore/dfg/DFGDisassembler.cpp
r230748 r244764 75 75 void Disassembler::dumpHeader(PrintStream& out, LinkBuffer& linkBuffer) 76 76 { 77 out.print("Generated DFG JIT code for ", CodeBlockWithJITType(m_graph.m_codeBlock, JIT Code::DFGJIT), ", instruction count = ", m_graph.m_codeBlock->instructionCount(), ":\n");77 out.print("Generated DFG JIT code for ", CodeBlockWithJITType(m_graph.m_codeBlock, JITType::DFGJIT), ", instruction count = ", m_graph.m_codeBlock->instructionCount(), ":\n"); 78 78 out.print(" Optimized with execution counter = ", m_graph.m_profiledBlock->jitExecuteCounter(), "\n"); 79 79 out.print(" Code at [", RawPointer(linkBuffer.debugAddress()), ", ", RawPointer(static_cast<char*>(linkBuffer.debugAddress()) + linkBuffer.size()), "):\n"); -
trunk/Source/JavaScriptCore/dfg/DFGDriver.cpp
r242192 r244764 82 82 ASSERT(codeBlock); 83 83 ASSERT(codeBlock->alternative()); 84 ASSERT(codeBlock->alternative()->jitType() == JIT Code::BaselineJIT);85 ASSERT(!profiledDFGCodeBlock || profiledDFGCodeBlock->jitType() == JIT Code::DFGJIT);84 ASSERT(codeBlock->alternative()->jitType() == JITType::BaselineJIT); 85 ASSERT(!profiledDFGCodeBlock || profiledDFGCodeBlock->jitType() == JITType::DFGJIT); 86 86 87 87 if (logCompilationChanges(mode)) -
trunk/Source/JavaScriptCore/dfg/DFGGraph.cpp
r244193 r244764 526 526 527 527 out.print("\n"); 528 out.print("DFG for ", CodeBlockWithJITType(m_codeBlock, JIT Code::DFGJIT), ":\n");528 out.print("DFG for ", CodeBlockWithJITType(m_codeBlock, JITType::DFGJIT), ":\n"); 529 529 out.print(" Fixpoint state: ", m_fixpointState, "; Form: ", m_form, "; Unification state: ", m_unificationState, "; Ref count state: ", m_refCountState, "\n"); 530 530 if (m_form == SSA) { -
trunk/Source/JavaScriptCore/dfg/DFGJITCode.cpp
r242192 r244764 37 37 38 38 JITCode::JITCode() 39 : DirectJITCode( DFGJIT)39 : DirectJITCode(JITType::DFGJIT) 40 40 #if ENABLE(FTL_JIT) 41 41 , osrEntryRetry(0) … … 124 124 bool JITCode::checkIfOptimizationThresholdReached(CodeBlock* codeBlock) 125 125 { 126 ASSERT(codeBlock->jitType() == JIT Code::DFGJIT);126 ASSERT(codeBlock->jitType() == JITType::DFGJIT); 127 127 return tierUpCounter.checkIfThresholdCrossedAndSet(codeBlock); 128 128 } … … 130 130 void JITCode::optimizeNextInvocation(CodeBlock* codeBlock) 131 131 { 132 ASSERT(codeBlock->jitType() == JIT Code::DFGJIT);132 ASSERT(codeBlock->jitType() == JITType::DFGJIT); 133 133 if (Options::verboseOSR()) 134 134 dataLog(*codeBlock, ": FTL-optimizing next invocation.\n"); … … 138 138 void JITCode::dontOptimizeAnytimeSoon(CodeBlock* codeBlock) 139 139 { 140 ASSERT(codeBlock->jitType() == JIT Code::DFGJIT);140 ASSERT(codeBlock->jitType() == JITType::DFGJIT); 141 141 if (Options::verboseOSR()) 142 142 dataLog(*codeBlock, ": Not FTL-optimizing anytime soon.\n"); … … 146 146 void JITCode::optimizeAfterWarmUp(CodeBlock* codeBlock) 147 147 { 148 ASSERT(codeBlock->jitType() == JIT Code::DFGJIT);148 ASSERT(codeBlock->jitType() == JITType::DFGJIT); 149 149 if (Options::verboseOSR()) 150 150 dataLog(*codeBlock, ": FTL-optimizing after warm-up.\n"); … … 157 157 void JITCode::optimizeSoon(CodeBlock* codeBlock) 158 158 { 159 ASSERT(codeBlock->jitType() == JIT Code::DFGJIT);159 ASSERT(codeBlock->jitType() == JITType::DFGJIT); 160 160 if (Options::verboseOSR()) 161 161 dataLog(*codeBlock, ": FTL-optimizing soon.\n"); … … 168 168 void JITCode::forceOptimizationSlowPathConcurrently(CodeBlock* codeBlock) 169 169 { 170 ASSERT(codeBlock->jitType() == JIT Code::DFGJIT);170 ASSERT(codeBlock->jitType() == JITType::DFGJIT); 171 171 if (Options::verboseOSR()) 172 172 dataLog(*codeBlock, ": Forcing slow path concurrently for FTL entry.\n"); … … 177 177 CodeBlock* codeBlock, CompilationResult result) 178 178 { 179 ASSERT(codeBlock->jitType() == JIT Code::DFGJIT);179 ASSERT(codeBlock->jitType() == JITType::DFGJIT); 180 180 switch (result) { 181 181 case CompilationSuccessful: -
trunk/Source/JavaScriptCore/dfg/DFGJITFinalizer.cpp
r241560 r244764 57 57 bool JITFinalizer::finalize() 58 58 { 59 MacroAssemblerCodeRef<JSEntryPtrTag> codeRef = FINALIZE_DFG_CODE(*m_linkBuffer, JSEntryPtrTag, "DFG JIT code for %s", toCString(CodeBlockWithJITType(m_plan.codeBlock(), JIT Code::DFGJIT)).data());59 MacroAssemblerCodeRef<JSEntryPtrTag> codeRef = FINALIZE_DFG_CODE(*m_linkBuffer, JSEntryPtrTag, "DFG JIT code for %s", toCString(CodeBlockWithJITType(m_plan.codeBlock(), JITType::DFGJIT)).data()); 60 60 m_jitCode->initializeCodeRefForDFG(codeRef, codeRef.code()); 61 61 … … 71 71 RELEASE_ASSERT(!m_withArityCheck.isEmptyValue()); 72 72 m_jitCode->initializeCodeRefForDFG( 73 FINALIZE_DFG_CODE(*m_linkBuffer, JSEntryPtrTag, "DFG JIT code for %s", toCString(CodeBlockWithJITType(m_plan.codeBlock(), JIT Code::DFGJIT)).data()),73 FINALIZE_DFG_CODE(*m_linkBuffer, JSEntryPtrTag, "DFG JIT code for %s", toCString(CodeBlockWithJITType(m_plan.codeBlock(), JITType::DFGJIT)).data()), 74 74 m_withArityCheck); 75 75 m_plan.codeBlock()->setJITCode(m_jitCode.copyRef()); -
trunk/Source/JavaScriptCore/dfg/DFGOSREntry.cpp
r243596 r244764 97 97 ASSERT(JITCode::isOptimizingJIT(codeBlock->jitType())); 98 98 ASSERT(codeBlock->alternative()); 99 ASSERT(codeBlock->alternative()->jitType() == JIT Code::BaselineJIT);99 ASSERT(codeBlock->alternative()->jitType() == JITType::BaselineJIT); 100 100 ASSERT(!codeBlock->jitCodeMap()); 101 101 … … 116 116 codeBlock->ownerExecutable()->setDidTryToEnterInLoop(true); 117 117 118 if (codeBlock->jitType() != JIT Code::DFGJIT) {119 RELEASE_ASSERT(codeBlock->jitType() == JIT Code::FTLJIT);118 if (codeBlock->jitType() != JITType::DFGJIT) { 119 RELEASE_ASSERT(codeBlock->jitType() == JITType::FTLJIT); 120 120 121 121 // When will this happen? We could have: … … 342 342 MacroAssemblerCodePtr<ExceptionHandlerPtrTag> prepareCatchOSREntry(ExecState* exec, CodeBlock* codeBlock, unsigned bytecodeIndex) 343 343 { 344 ASSERT(codeBlock->jitType() == JIT Code::DFGJIT || codeBlock->jitType() == JITCode::FTLJIT);345 346 if (!Options::useOSREntryToDFG() && codeBlock->jitCode()->jitType() == JIT Code::DFGJIT)347 return nullptr; 348 if (!Options::useOSREntryToFTL() && codeBlock->jitCode()->jitType() == JIT Code::FTLJIT)344 ASSERT(codeBlock->jitType() == JITType::DFGJIT || codeBlock->jitType() == JITType::FTLJIT); 345 346 if (!Options::useOSREntryToDFG() && codeBlock->jitCode()->jitType() == JITType::DFGJIT) 347 return nullptr; 348 if (!Options::useOSREntryToFTL() && codeBlock->jitCode()->jitType() == JITType::FTLJIT) 349 349 return nullptr; 350 350 -
trunk/Source/JavaScriptCore/dfg/DFGOSRExit.cpp
r243959 r244764 352 352 CodeBlock* codeBlock = exec->codeBlock(); 353 353 ASSERT(codeBlock); 354 ASSERT(codeBlock->jitType() == JIT Code::DFGJIT);354 ASSERT(codeBlock->jitType() == JITType::DFGJIT); 355 355 356 356 // It's sort of preferable that we don't GC while in here. Anyways, doing so wouldn't … … 376 376 377 377 CodeBlock* baselineCodeBlock = codeBlock->baselineAlternative(); 378 ASSERT(baselineCodeBlock->jitType() == JIT Code::BaselineJIT);378 ASSERT(baselineCodeBlock->jitType() == JITType::BaselineJIT); 379 379 380 380 SpeculationRecovery* recovery = nullptr; … … 446 446 OSRExitState& exitState = *exit.exitState.get(); 447 447 CodeBlock* baselineCodeBlock = exitState.baselineCodeBlock; 448 ASSERT(baselineCodeBlock->jitType() == JIT Code::BaselineJIT);448 ASSERT(baselineCodeBlock->jitType() == JITType::BaselineJIT); 449 449 450 450 Operands<ValueRecovery>& operands = exitState.operands; … … 753 753 // in presence of inlined tail calls. 754 754 // https://bugs.webkit.org/show_bug.cgi?id=147511 755 ASSERT(outermostBaselineCodeBlock->jitType() == JIT Code::BaselineJIT);755 ASSERT(outermostBaselineCodeBlock->jitType() == JITType::BaselineJIT); 756 756 frame.setOperand<CodeBlock*>(CallFrameSlot::codeBlock, outermostBaselineCodeBlock); 757 757 … … 1036 1036 CodeBlock* codeBlock = exec->codeBlock(); 1037 1037 ASSERT(codeBlock); 1038 ASSERT(codeBlock->jitType() == JIT Code::DFGJIT);1038 ASSERT(codeBlock->jitType() == JITType::DFGJIT); 1039 1039 1040 1040 // It's sort of preferable that we don't GC while in here. Anyways, doing so wouldn't -
trunk/Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp
r243286 r244764 117 117 int32_t clippedValue; 118 118 switch (jit.codeBlock()->jitType()) { 119 case JIT Code::DFGJIT:119 case JITType::DFGJIT: 120 120 clippedValue = BaselineExecutionCounter::clippedThreshold(jit.codeBlock()->globalObject(), targetValue); 121 121 break; 122 case JIT Code::FTLJIT:122 case JITType::FTLJIT: 123 123 clippedValue = UpperTierExecutionCounter::clippedThreshold(jit.codeBlock()->globalObject(), targetValue); 124 124 break; … … 142 142 // in presence of inlined tail calls. 143 143 // https://bugs.webkit.org/show_bug.cgi?id=147511 144 ASSERT(jit.baselineCodeBlock()->jitType() == JIT Code::BaselineJIT);144 ASSERT(jit.baselineCodeBlock()->jitType() == JITType::BaselineJIT); 145 145 jit.storePtr(AssemblyHelpers::TrustedImmPtr(jit.baselineCodeBlock()), AssemblyHelpers::addressFor((VirtualRegister)CallFrameSlot::codeBlock)); 146 146 … … 311 311 CodeBlock* codeBlockForExit = jit.baselineCodeBlockFor(exit.m_codeOrigin); 312 312 ASSERT(codeBlockForExit == codeBlockForExit->baselineVersion()); 313 ASSERT(codeBlockForExit->jitType() == JIT Code::BaselineJIT);313 ASSERT(codeBlockForExit->jitType() == JITType::BaselineJIT); 314 314 CodeLocationLabel<JSEntryPtrTag> codeLocation = codeBlockForExit->jitCodeMap().find(exit.m_codeOrigin.bytecodeIndex()); 315 315 ASSERT(codeLocation); -
trunk/Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.h
r242100 r244764 42 42 43 43 template <typename JITCodeType> 44 void adjustFrameAndStackInOSRExitCompilerThunk(MacroAssembler& jit, VM* vm, JIT Code::JITType jitType)44 void adjustFrameAndStackInOSRExitCompilerThunk(MacroAssembler& jit, VM* vm, JITType jitType) 45 45 { 46 ASSERT(jitType == JIT Code::DFGJIT || jitType == JITCode::FTLJIT);46 ASSERT(jitType == JITType::DFGJIT || jitType == JITType::FTLJIT); 47 47 48 bool isFTLOSRExit = jitType == JIT Code::FTLJIT;48 bool isFTLOSRExit = jitType == JITType::FTLJIT; 49 49 RegisterSet registersToPreserve; 50 50 registersToPreserve.set(GPRInfo::regT0); -
trunk/Source/JavaScriptCore/dfg/DFGOperations.cpp
r244067 r244764 3168 3168 sanitizeStackForVM(vm); 3169 3169 3170 if (codeBlock->jitType() != JIT Code::DFGJIT) {3170 if (codeBlock->jitType() != JITType::DFGJIT) { 3171 3171 dataLog("Unexpected code block in DFG->FTL tier-up: ", *codeBlock, "\n"); 3172 3172 RELEASE_ASSERT_NOT_REACHED(); … … 3434 3434 sanitizeStackForVM(vm); 3435 3435 3436 if (codeBlock->jitType() != JIT Code::DFGJIT) {3436 if (codeBlock->jitType() != JITType::DFGJIT) { 3437 3437 dataLog("Unexpected code block in DFG->FTL trigger tier up now in loop: ", *codeBlock, "\n"); 3438 3438 RELEASE_ASSERT_NOT_REACHED(); … … 3468 3468 sanitizeStackForVM(vm); 3469 3469 3470 if (codeBlock->jitType() != JIT Code::DFGJIT) {3470 if (codeBlock->jitType() != JITType::DFGJIT) { 3471 3471 dataLog("Unexpected code block in DFG->FTL tier-up: ", *codeBlock, "\n"); 3472 3472 RELEASE_ASSERT_NOT_REACHED(); -
trunk/Source/JavaScriptCore/dfg/DFGThunks.cpp
r230748 r244764 54 54 55 55 // This needs to happen before we use the scratch buffer because this function also uses the scratch buffer. 56 adjustFrameAndStackInOSRExitCompilerThunk<DFG::JITCode>(jit, vm, JIT Code::DFGJIT);56 adjustFrameAndStackInOSRExitCompilerThunk<DFG::JITCode>(jit, vm, JITType::DFGJIT); 57 57 58 58 size_t scratchSize = sizeof(EncodedJSValue) * (GPRInfo::numberOfRegisters + FPRInfo::numberOfRegisters); -
trunk/Source/JavaScriptCore/dfg/DFGVariableEventStream.cpp
r243232 r244764 120 120 unsigned index, Operands<ValueRecovery>& valueRecoveries, Vector<UndefinedOperandSpan>* undefinedOperandSpans) const 121 121 { 122 ASSERT(codeBlock->jitType() == JIT Code::DFGJIT);122 ASSERT(codeBlock->jitType() == JITType::DFGJIT); 123 123 CodeBlock* baselineCodeBlock = codeBlock->baselineVersion(); 124 124 -
trunk/Source/JavaScriptCore/ftl/FTLCompile.cpp
r234178 r244764 80 80 std::make_unique<RegisterAtOffsetList>(state.proc->calleeSaveRegisterAtOffsetList()); 81 81 if (shouldDumpDisassembly()) 82 dataLog("Unwind info for ", CodeBlockWithJITType(codeBlock, JIT Code::FTLJIT), ": ", *registerOffsets, "\n");82 dataLog("Unwind info for ", CodeBlockWithJITType(codeBlock, JITType::FTLJIT), ": ", *registerOffsets, "\n"); 83 83 codeBlock->setCalleeSaveRegisters(WTFMove(registerOffsets)); 84 84 ASSERT(!(state.proc->frameSize() % sizeof(EncodedJSValue))); … … 169 169 PrintStream& out = WTF::dataFile(); 170 170 171 out.print("Generated ", state.graph.m_plan.mode(), " code for ", CodeBlockWithJITType(state.graph.m_codeBlock, JIT Code::FTLJIT), ", instruction count = ", state.graph.m_codeBlock->instructionCount(), ":\n");171 out.print("Generated ", state.graph.m_plan.mode(), " code for ", CodeBlockWithJITType(state.graph.m_codeBlock, JITType::FTLJIT), ", instruction count = ", state.graph.m_codeBlock->instructionCount(), ":\n"); 172 172 173 173 LinkBuffer& linkBuffer = *state.finalizer->b3CodeLinkBuffer; -
trunk/Source/JavaScriptCore/ftl/FTLJITCode.cpp
r239427 r244764 37 37 38 38 JITCode::JITCode() 39 : JSC::JITCode( FTLJIT)39 : JSC::JITCode(JITType::FTLJIT) 40 40 { 41 41 } -
trunk/Source/JavaScriptCore/ftl/FTLJITFinalizer.cpp
r234178 r244764 76 76 MacroAssemblerCodeRef<JSEntryPtrTag> b3CodeRef = 77 77 FINALIZE_CODE_IF(dumpDisassembly, *b3CodeLinkBuffer, JSEntryPtrTag, 78 "FTL B3 code for %s", toCString(CodeBlockWithJITType(m_plan.codeBlock(), JIT Code::FTLJIT)).data());78 "FTL B3 code for %s", toCString(CodeBlockWithJITType(m_plan.codeBlock(), JITType::FTLJIT)).data()); 79 79 80 80 MacroAssemblerCodeRef<JSEntryPtrTag> arityCheckCodeRef = entrypointLinkBuffer 81 81 ? FINALIZE_CODE_IF(dumpDisassembly, *entrypointLinkBuffer, JSEntryPtrTag, 82 "FTL entrypoint thunk for %s with B3 generated code at %p", toCString(CodeBlockWithJITType(m_plan.codeBlock(), JIT Code::FTLJIT)).data(), function)82 "FTL entrypoint thunk for %s with B3 generated code at %p", toCString(CodeBlockWithJITType(m_plan.codeBlock(), JITType::FTLJIT)).data(), function) 83 83 : MacroAssemblerCodeRef<JSEntryPtrTag>::createSelfManagedCodeRef(b3CodeRef.code()); 84 84 -
trunk/Source/JavaScriptCore/ftl/FTLLink.cpp
r241222 r244764 72 72 compilation->addDescription( 73 73 Profiler::OriginStack(), 74 toCString("Generated FTL JIT code for ", CodeBlockWithJITType(codeBlock, JIT Code::FTLJIT), ", instruction count = ", graph.m_codeBlock->instructionCount(), ":\n"));74 toCString("Generated FTL JIT code for ", CodeBlockWithJITType(codeBlock, JITType::FTLJIT), ", instruction count = ", graph.m_codeBlock->instructionCount(), ":\n")); 75 75 76 76 graph.ensureSSADominators(); -
trunk/Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp
r243959 r244764 507 507 508 508 ASSERT(codeBlock); 509 ASSERT(codeBlock->jitType() == JIT Code::FTLJIT);509 ASSERT(codeBlock->jitType() == JITType::FTLJIT); 510 510 511 511 // It's sort of preferable that we don't GC while in here. Anyways, doing so wouldn't -
trunk/Source/JavaScriptCore/ftl/FTLThunks.cpp
r243254 r244764 54 54 if (frameAndStackAdjustmentRequirement == FrameAndStackAdjustmentRequirement::Needed) { 55 55 // This needs to happen before we use the scratch buffer because this function also uses the scratch buffer. 56 adjustFrameAndStackInOSRExitCompilerThunk<FTL::JITCode>(jit, vm, JIT Code::FTLJIT);56 adjustFrameAndStackInOSRExitCompilerThunk<FTL::JITCode>(jit, vm, JITType::FTLJIT); 57 57 } 58 58 -
trunk/Source/JavaScriptCore/interpreter/CallFrame.cpp
r243232 r244764 53 53 ASSERT(codeBlock()); 54 54 switch (codeBlock()->jitType()) { 55 case JIT Code::InterpreterThunk:56 case JIT Code::BaselineJIT:55 case JITType::InterpreterThunk: 56 case JITType::BaselineJIT: 57 57 return true; 58 case JIT Code::None:59 case JIT Code::HostCallThunk:58 case JITType::None: 59 case JITType::HostCallThunk: 60 60 RELEASE_ASSERT_NOT_REACHED(); 61 61 return false; … … 72 72 ASSERT(codeBlock()); 73 73 switch (codeBlock()->jitType()) { 74 case JIT Code::DFGJIT:75 case JIT Code::FTLJIT:74 case JITType::DFGJIT: 75 case JITType::FTLJIT: 76 76 return true; 77 case JIT Code::None:78 case JIT Code::HostCallThunk:77 case JITType::None: 78 case JITType::HostCallThunk: 79 79 RELEASE_ASSERT_NOT_REACHED(); 80 80 return false; -
trunk/Source/JavaScriptCore/interpreter/StackVisitor.cpp
r244088 r244764 493 493 out.print(indent, "callSiteIndex: ", callSiteIndex.bits(), " of ", codeBlock->codeOrigins().size(), "\n"); 494 494 495 JIT Code::JITType jitType = codeBlock->jitType();496 if (jitType != JIT Code::FTLJIT) {495 JITType jitType = codeBlock->jitType(); 496 if (jitType != JITType::FTLJIT) { 497 497 JITCode* jitCode = codeBlock->jitCode().get(); 498 498 out.print(indent, "jitCode: ", RawPointer(jitCode), -
trunk/Source/JavaScriptCore/jit/AssemblyHelpers.h
r244433 r244764 58 58 ASSERT(m_baselineCodeBlock); 59 59 ASSERT(!m_baselineCodeBlock->alternative()); 60 ASSERT(m_baselineCodeBlock->jitType() == JIT Code::None || JITCode::isBaselineCode(m_baselineCodeBlock->jitType()));60 ASSERT(m_baselineCodeBlock->jitType() == JITType::None || JITCode::isBaselineCode(m_baselineCodeBlock->jitType())); 61 61 } 62 62 } -
trunk/Source/JavaScriptCore/jit/JIT.cpp
r241222 r244764 904 904 CodeRef<JSEntryPtrTag> result = FINALIZE_CODE( 905 905 patchBuffer, JSEntryPtrTag, 906 "Baseline JIT code for %s", toCString(CodeBlockWithJITType(m_codeBlock, JIT Code::BaselineJIT)).data());906 "Baseline JIT code for %s", toCString(CodeBlockWithJITType(m_codeBlock, JITType::BaselineJIT)).data()); 907 907 908 908 m_vm->machineCodeBytesPerBytecodeWordForBaselineJIT->add( … … 912 912 m_codeBlock->shrinkToFit(CodeBlock::LateShrink); 913 913 m_codeBlock->setJITCode( 914 adoptRef(*new DirectJITCode(result, withArityCheck, JIT Code::BaselineJIT)));914 adoptRef(*new DirectJITCode(result, withArityCheck, JITType::BaselineJIT))); 915 915 916 916 if (JITInternal::verbose) -
trunk/Source/JavaScriptCore/jit/JITCode.cpp
r242928 r244764 46 46 { 47 47 switch (jitType) { 48 case None:48 case JITType::None: 49 49 return "None"; 50 case HostCallThunk:50 case JITType::HostCallThunk: 51 51 return "Host"; 52 case InterpreterThunk:52 case JITType::InterpreterThunk: 53 53 return "LLInt"; 54 case BaselineJIT:54 case JITType::BaselineJIT: 55 55 return "Baseline"; 56 case DFGJIT:56 case JITType::DFGJIT: 57 57 return "DFG"; 58 case FTLJIT:58 case JITType::FTLJIT: 59 59 return "FTL"; 60 60 default: … … 242 242 namespace WTF { 243 243 244 void printInternal(PrintStream& out, JSC::JIT Code::JITType type)244 void printInternal(PrintStream& out, JSC::JITType type) 245 245 { 246 246 out.print(JSC::JITCode::typeName(type)); -
trunk/Source/JavaScriptCore/jit/JITCode.h
r242928 r244764 52 52 class VM; 53 53 54 enum class JITType : uint8_t { 55 None, 56 HostCallThunk, 57 InterpreterThunk, 58 BaselineJIT, 59 DFGJIT, 60 FTLJIT 61 }; 62 54 63 class JITCode : public ThreadSafeRefCounted<JITCode> { 55 64 public: … … 57 66 template<PtrTag tag> using CodeRef = MacroAssemblerCodeRef<tag>; 58 67 59 enum JITType : uint8_t {60 None,61 HostCallThunk,62 InterpreterThunk,63 BaselineJIT,64 DFGJIT,65 FTLJIT66 };67 68 68 static const char* typeName(JITType); 69 69 70 70 static JITType bottomTierJIT() 71 71 { 72 return BaselineJIT;72 return JITType::BaselineJIT; 73 73 } 74 74 75 75 static JITType topTierJIT() 76 76 { 77 return FTLJIT;77 return JITType::FTLJIT; 78 78 } 79 79 … … 81 81 { 82 82 switch (jitType) { 83 case BaselineJIT:84 return DFGJIT;85 case DFGJIT:86 return FTLJIT;83 case JITType::BaselineJIT: 84 return JITType::DFGJIT; 85 case JITType::DFGJIT: 86 return JITType::FTLJIT; 87 87 default: 88 88 RELEASE_ASSERT_NOT_REACHED(); 89 return None;89 return JITType::None; 90 90 } 91 91 } … … 94 94 { 95 95 switch (jitType) { 96 case None:97 case HostCallThunk:96 case JITType::None: 97 case JITType::HostCallThunk: 98 98 return false; 99 99 default: … … 105 105 { 106 106 switch (jitType) { 107 case InterpreterThunk:108 case BaselineJIT:107 case JITType::InterpreterThunk: 108 case JITType::BaselineJIT: 109 109 return true; 110 110 default: … … 116 116 { 117 117 switch (jitType) { 118 case BaselineJIT:119 case DFGJIT:120 case FTLJIT:118 case JITType::BaselineJIT: 119 case JITType::DFGJIT: 120 case JITType::FTLJIT: 121 121 return true; 122 122 default: … … 149 149 static bool isOptimizingJIT(JITType jitType) 150 150 { 151 return jitType == DFGJIT || jitType ==FTLJIT;151 return jitType == JITType::DFGJIT || jitType == JITType::FTLJIT; 152 152 } 153 153 154 154 static bool isBaselineCode(JITType jitType) 155 155 { 156 return jitType == InterpreterThunk || jitType ==BaselineJIT;156 return jitType == JITType::InterpreterThunk || jitType == JITType::BaselineJIT; 157 157 } 158 158 … … 179 179 { 180 180 if (!jitCode) 181 return None;181 return JITType::None; 182 182 return jitCode->jitType(); 183 183 } … … 279 279 280 280 class PrintStream; 281 void printInternal(PrintStream&, JSC::JIT Code::JITType);281 void printInternal(PrintStream&, JSC::JITType); 282 282 283 283 } // namespace WTF -
trunk/Source/JavaScriptCore/jit/JITDisassembler.cpp
r237547 r244764 90 90 void JITDisassembler::dumpHeader(PrintStream& out, LinkBuffer& linkBuffer) 91 91 { 92 out.print("Generated Baseline JIT code for ", CodeBlockWithJITType(m_codeBlock, JIT Code::BaselineJIT), ", instruction count = ", m_codeBlock->instructionCount(), "\n");92 out.print("Generated Baseline JIT code for ", CodeBlockWithJITType(m_codeBlock, JITType::BaselineJIT), ", instruction count = ", m_codeBlock->instructionCount(), "\n"); 93 93 out.print(" Source: ", m_codeBlock->sourceCodeOnOneLine(), "\n"); 94 94 out.print(" Code at [", RawPointer(linkBuffer.debugAddress()), ", ", RawPointer(static_cast<char*>(linkBuffer.debugAddress()) + linkBuffer.size()), "):\n"); -
trunk/Source/JavaScriptCore/jit/JITOperations.cpp
r244211 r244764 1428 1428 1429 1429 CodeBlock* codeBlock = exec->codeBlock(); 1430 if (UNLIKELY(codeBlock->jitType() != JIT Code::BaselineJIT)) {1430 if (UNLIKELY(codeBlock->jitType() != JITType::BaselineJIT)) { 1431 1431 dataLog("Unexpected code block in Baseline->DFG tier-up: ", *codeBlock, "\n"); 1432 1432 RELEASE_ASSERT_NOT_REACHED(); … … 1661 1661 1662 1662 switch (optimizedReplacement->jitType()) { 1663 case JIT Code::DFGJIT:1664 case JIT Code::FTLJIT: {1663 case JITType::DFGJIT: 1664 case JITType::FTLJIT: { 1665 1665 MacroAssemblerCodePtr<ExceptionHandlerPtrTag> entry = DFG::prepareCatchOSREntry(exec, optimizedReplacement, bytecodeIndex); 1666 1666 return entry.executableAddress<char*>(); … … 1683 1683 1684 1684 switch (optimizedReplacement->jitType()) { 1685 case JIT Code::DFGJIT:1686 case JIT Code::FTLJIT: {1685 case JITType::DFGJIT: 1686 case JITType::FTLJIT: { 1687 1687 MacroAssemblerCodePtr<ExceptionHandlerPtrTag> entry = DFG::prepareCatchOSREntry(exec, optimizedReplacement, bytecodeIndex); 1688 1688 return entry.executableAddress<char*>(); -
trunk/Source/JavaScriptCore/jit/JITThunks.cpp
r241037 r244764 125 125 if (generator) { 126 126 MacroAssemblerCodeRef<JSEntryPtrTag> entry = generator(vm).retagged<JSEntryPtrTag>(); 127 forCall = adoptRef(new DirectJITCode(entry, entry.code(), JIT Code::HostCallThunk, intrinsic));127 forCall = adoptRef(new DirectJITCode(entry, entry.code(), JITType::HostCallThunk, intrinsic)); 128 128 } else if (signature) 129 forCall = adoptRef(new NativeDOMJITCode(MacroAssemblerCodeRef<JSEntryPtrTag>::createSelfManagedCodeRef(ctiNativeCall(vm).retagged<JSEntryPtrTag>()), JIT Code::HostCallThunk, intrinsic, signature));129 forCall = adoptRef(new NativeDOMJITCode(MacroAssemblerCodeRef<JSEntryPtrTag>::createSelfManagedCodeRef(ctiNativeCall(vm).retagged<JSEntryPtrTag>()), JITType::HostCallThunk, intrinsic, signature)); 130 130 else 131 forCall = adoptRef(new NativeJITCode(MacroAssemblerCodeRef<JSEntryPtrTag>::createSelfManagedCodeRef(ctiNativeCall(vm).retagged<JSEntryPtrTag>()), JIT Code::HostCallThunk, intrinsic));131 forCall = adoptRef(new NativeJITCode(MacroAssemblerCodeRef<JSEntryPtrTag>::createSelfManagedCodeRef(ctiNativeCall(vm).retagged<JSEntryPtrTag>()), JITType::HostCallThunk, intrinsic)); 132 132 133 Ref<JITCode> forConstruct = adoptRef(*new NativeJITCode(MacroAssemblerCodeRef<JSEntryPtrTag>::createSelfManagedCodeRef(ctiNativeConstruct(vm).retagged<JSEntryPtrTag>()), JIT Code::HostCallThunk, NoIntrinsic));133 Ref<JITCode> forConstruct = adoptRef(*new NativeJITCode(MacroAssemblerCodeRef<JSEntryPtrTag>::createSelfManagedCodeRef(ctiNativeConstruct(vm).retagged<JSEntryPtrTag>()), JITType::HostCallThunk, NoIntrinsic)); 134 134 135 135 NativeExecutable* nativeExecutable = NativeExecutable::create(*vm, forCall.releaseNonNull(), function, WTFMove(forConstruct), constructor, name); -
trunk/Source/JavaScriptCore/jit/JITToDFGDeferredCompilationCallback.cpp
r241222 r244764 46 46 { 47 47 ASSERT_UNUSED(profiledDFGCodeBlock, !profiledDFGCodeBlock); 48 ASSERT(codeBlock->alternative()->jitType() == JIT Code::BaselineJIT);48 ASSERT(codeBlock->alternative()->jitType() == JITType::BaselineJIT); 49 49 50 50 if (Options::verboseOSR()) … … 58 58 { 59 59 ASSERT(!profiledDFGCodeBlock); 60 ASSERT(codeBlock->alternative()->jitType() == JIT Code::BaselineJIT);60 ASSERT(codeBlock->alternative()->jitType() == JITType::BaselineJIT); 61 61 62 62 if (Options::verboseOSR()) -
trunk/Source/JavaScriptCore/jit/JITWorklist.cpp
r241582 r244764 232 232 { 233 233 DeferGC deferGC(codeBlock->vm()->heap); 234 RELEASE_ASSERT(codeBlock->jitType() == JIT Code::InterpreterThunk);234 RELEASE_ASSERT(codeBlock->jitType() == JITType::InterpreterThunk); 235 235 236 236 if (codeBlock->m_didFailJITCompilation) { … … 285 285 VM* vm = codeBlock->vm(); 286 286 DeferGC deferGC(vm->heap); 287 if (codeBlock->jitType() != JIT Code::InterpreterThunk)287 if (codeBlock->jitType() != JITType::InterpreterThunk) 288 288 return; 289 289 … … 301 301 302 302 // Now it might be compiled! 303 if (codeBlock->jitType() != JIT Code::InterpreterThunk)303 if (codeBlock->jitType() != JITType::InterpreterThunk) 304 304 return; 305 305 -
trunk/Source/JavaScriptCore/jit/Repatch.cpp
r244711 r244764 73 73 FunctionPtr<OperationPtrTag> target = MacroAssembler::readCallTarget<OperationPtrTag>(call); 74 74 #if ENABLE(FTL_JIT) 75 if (codeBlock->jitType() == JIT Code::FTLJIT) {75 if (codeBlock->jitType() == JITType::FTLJIT) { 76 76 MacroAssemblerCodePtr<JITThunkPtrTag> thunk = MacroAssemblerCodePtr<OperationPtrTag>::createFromExecutableAddress(target.executableAddress()).retagged<JITThunkPtrTag>(); 77 77 return codeBlock->vm()->ftlThunks->keyForSlowPathCallThunk(thunk).callTarget().retagged<CFunctionPtrTag>(); … … 86 86 { 87 87 #if ENABLE(FTL_JIT) 88 if (codeBlock->jitType() == JIT Code::FTLJIT) {88 if (codeBlock->jitType() == JITType::FTLJIT) { 89 89 VM& vm = *codeBlock->vm(); 90 90 FTL::Thunks& thunks = *vm.ftlThunks; -
trunk/Source/JavaScriptCore/llint/LLIntEntrypoint.cpp
r244088 r244764 52 52 auto callRef = functionForCallEntryThunk().retagged<JSEntryPtrTag>(); 53 53 auto callArityCheckRef = functionForCallArityCheckThunk().retaggedCode<JSEntryPtrTag>(); 54 jitCode = new DirectJITCode(callRef, callArityCheckRef, JIT Code::InterpreterThunk, JITCode::ShareAttribute::Shared);54 jitCode = new DirectJITCode(callRef, callArityCheckRef, JITType::InterpreterThunk, JITCode::ShareAttribute::Shared); 55 55 }); 56 56 … … 65 65 auto constructRef = functionForConstructEntryThunk().retagged<JSEntryPtrTag>(); 66 66 auto constructArityCheckRef = functionForConstructArityCheckThunk().retaggedCode<JSEntryPtrTag>(); 67 jitCode = new DirectJITCode(constructRef, constructArityCheckRef, JIT Code::InterpreterThunk, JITCode::ShareAttribute::Shared);67 jitCode = new DirectJITCode(constructRef, constructArityCheckRef, JITType::InterpreterThunk, JITCode::ShareAttribute::Shared); 68 68 }); 69 69 … … 77 77 static std::once_flag onceKey; 78 78 std::call_once(onceKey, [&] { 79 jitCode = new DirectJITCode(getCodeRef<JSEntryPtrTag>(llint_function_for_call_prologue), getCodePtr<JSEntryPtrTag>(llint_function_for_call_arity_check), JIT Code::InterpreterThunk, JITCode::ShareAttribute::Shared);79 jitCode = new DirectJITCode(getCodeRef<JSEntryPtrTag>(llint_function_for_call_prologue), getCodePtr<JSEntryPtrTag>(llint_function_for_call_arity_check), JITType::InterpreterThunk, JITCode::ShareAttribute::Shared); 80 80 }); 81 81 codeBlock->setJITCode(makeRef(*jitCode)); … … 84 84 static std::once_flag onceKey; 85 85 std::call_once(onceKey, [&] { 86 jitCode = new DirectJITCode(getCodeRef<JSEntryPtrTag>(llint_function_for_construct_prologue), getCodePtr<JSEntryPtrTag>(llint_function_for_construct_arity_check), JIT Code::InterpreterThunk, JITCode::ShareAttribute::Shared);86 jitCode = new DirectJITCode(getCodeRef<JSEntryPtrTag>(llint_function_for_construct_prologue), getCodePtr<JSEntryPtrTag>(llint_function_for_construct_arity_check), JITType::InterpreterThunk, JITCode::ShareAttribute::Shared); 87 87 }); 88 88 codeBlock->setJITCode(makeRef(*jitCode)); … … 98 98 std::call_once(onceKey, [&] { 99 99 MacroAssemblerCodeRef<JSEntryPtrTag> codeRef = evalEntryThunk().retagged<JSEntryPtrTag>(); 100 jitCode = new NativeJITCode(codeRef, JIT Code::InterpreterThunk, Intrinsic::NoIntrinsic, JITCode::ShareAttribute::Shared);100 jitCode = new NativeJITCode(codeRef, JITType::InterpreterThunk, Intrinsic::NoIntrinsic, JITCode::ShareAttribute::Shared); 101 101 }); 102 102 codeBlock->setJITCode(makeRef(*jitCode)); … … 108 108 static std::once_flag onceKey; 109 109 std::call_once(onceKey, [&] { 110 jitCode = new NativeJITCode(getCodeRef<JSEntryPtrTag>(llint_eval_prologue), JIT Code::InterpreterThunk, Intrinsic::NoIntrinsic, JITCode::ShareAttribute::Shared);110 jitCode = new NativeJITCode(getCodeRef<JSEntryPtrTag>(llint_eval_prologue), JITType::InterpreterThunk, Intrinsic::NoIntrinsic, JITCode::ShareAttribute::Shared); 111 111 }); 112 112 codeBlock->setJITCode(makeRef(*jitCode)); … … 121 121 std::call_once(onceKey, [&] { 122 122 MacroAssemblerCodeRef<JSEntryPtrTag> codeRef = programEntryThunk().retagged<JSEntryPtrTag>(); 123 jitCode = new NativeJITCode(codeRef, JIT Code::InterpreterThunk, Intrinsic::NoIntrinsic, JITCode::ShareAttribute::Shared);123 jitCode = new NativeJITCode(codeRef, JITType::InterpreterThunk, Intrinsic::NoIntrinsic, JITCode::ShareAttribute::Shared); 124 124 }); 125 125 codeBlock->setJITCode(makeRef(*jitCode)); … … 131 131 static std::once_flag onceKey; 132 132 std::call_once(onceKey, [&] { 133 jitCode = new NativeJITCode(getCodeRef<JSEntryPtrTag>(llint_program_prologue), JIT Code::InterpreterThunk, Intrinsic::NoIntrinsic, JITCode::ShareAttribute::Shared);133 jitCode = new NativeJITCode(getCodeRef<JSEntryPtrTag>(llint_program_prologue), JITType::InterpreterThunk, Intrinsic::NoIntrinsic, JITCode::ShareAttribute::Shared); 134 134 }); 135 135 codeBlock->setJITCode(makeRef(*jitCode)); … … 144 144 std::call_once(onceKey, [&] { 145 145 MacroAssemblerCodeRef<JSEntryPtrTag> codeRef = moduleProgramEntryThunk().retagged<JSEntryPtrTag>(); 146 jitCode = new NativeJITCode(codeRef, JIT Code::InterpreterThunk, Intrinsic::NoIntrinsic, JITCode::ShareAttribute::Shared);146 jitCode = new NativeJITCode(codeRef, JITType::InterpreterThunk, Intrinsic::NoIntrinsic, JITCode::ShareAttribute::Shared); 147 147 }); 148 148 codeBlock->setJITCode(makeRef(*jitCode)); … … 154 154 static std::once_flag onceKey; 155 155 std::call_once(onceKey, [&] { 156 jitCode = new NativeJITCode(getCodeRef<JSEntryPtrTag>(llint_module_program_prologue), JIT Code::InterpreterThunk, Intrinsic::NoIntrinsic, JITCode::ShareAttribute::Shared);156 jitCode = new NativeJITCode(getCodeRef<JSEntryPtrTag>(llint_module_program_prologue), JITType::InterpreterThunk, Intrinsic::NoIntrinsic, JITCode::ShareAttribute::Shared); 157 157 }); 158 158 codeBlock->setJITCode(makeRef(*jitCode)); -
trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp
r243560 r244764 384 384 385 385 switch (codeBlock->jitType()) { 386 case JIT Code::BaselineJIT: {386 case JITType::BaselineJIT: { 387 387 if (Options::verboseOSR()) 388 388 dataLogF(" Code was already compiled.\n"); … … 390 390 return true; 391 391 } 392 case JIT Code::InterpreterThunk: {392 case JITType::InterpreterThunk: { 393 393 JITWorklist::ensureGlobalWorklist().compileLater(codeBlock, loopOSREntryBytecodeOffset); 394 return codeBlock->jitType() == JIT Code::BaselineJIT;394 return codeBlock->jitType() == JITType::BaselineJIT; 395 395 } 396 396 default: … … 481 481 CODEBLOCK_LOG_EVENT(codeBlock, "osrEntry", ("at bc#", loopOSREntryBytecodeOffset)); 482 482 483 ASSERT(codeBlock->jitType() == JIT Code::BaselineJIT);483 ASSERT(codeBlock->jitType() == JITType::BaselineJIT); 484 484 485 485 const JITCodeMap& codeMap = codeBlock->jitCodeMap(); -
trunk/Source/JavaScriptCore/runtime/SamplingProfiler.cpp
r243232 r244764 591 591 // by ignoring it. 592 592 unsigned bytecodeIndex = 0; 593 if (topCodeBlock->jitType() == JIT Code::InterpreterThunk || topCodeBlock->jitType() == JITCode::BaselineJIT) {593 if (topCodeBlock->jitType() == JITType::InterpreterThunk || topCodeBlock->jitType() == JITType::BaselineJIT) { 594 594 bool isValidPC; 595 595 unsigned bits; -
trunk/Source/JavaScriptCore/runtime/SamplingProfiler.h
r242812 r244764 109 109 unsigned bytecodeIndex { std::numeric_limits<unsigned>::max() }; 110 110 CodeBlockHash codeBlockHash; 111 JIT Code::JITType jitType { JITCode::None };111 JITType jitType { JITType::None }; 112 112 }; 113 113 -
trunk/Source/JavaScriptCore/runtime/VM.cpp
r244505 r244764 690 690 static std::once_flag onceKey; 691 691 std::call_once(onceKey, [&] { 692 result = new NativeJITCode(LLInt::getCodeRef<JSEntryPtrTag>(llint_native_call_trampoline), JIT Code::HostCallThunk, NoIntrinsic);692 result = new NativeJITCode(LLInt::getCodeRef<JSEntryPtrTag>(llint_native_call_trampoline), JITType::HostCallThunk, NoIntrinsic); 693 693 }); 694 694 return makeRef(*result); … … 700 700 static std::once_flag onceKey; 701 701 std::call_once(onceKey, [&] { 702 result = new NativeJITCode(LLInt::getCodeRef<JSEntryPtrTag>(llint_native_construct_trampoline), JIT Code::HostCallThunk, NoIntrinsic);702 result = new NativeJITCode(LLInt::getCodeRef<JSEntryPtrTag>(llint_native_construct_trampoline), JITType::HostCallThunk, NoIntrinsic); 703 703 }); 704 704 return makeRef(*result); -
trunk/Source/JavaScriptCore/tools/CodeProfile.cpp
r240718 r244764 83 83 else { 84 84 CodeBlock* codeBlock = static_cast<CodeBlock*>(ownerUID); 85 if (codeBlock->jitType() == JIT Code::DFGJIT)85 if (codeBlock->jitType() == JITType::DFGJIT) 86 86 type = DFGJIT; 87 87 else if (!canCompile(codeBlock->capabilityLevelState())) -
trunk/Source/JavaScriptCore/tools/JSDollarVM.cpp
r242999 r244764 1301 1301 CallerFrameJITTypeFunctor() 1302 1302 : m_currentFrame(0) 1303 , m_jitType(JIT Code::None)1303 , m_jitType(JITType::None) 1304 1304 { 1305 1305 } … … 1314 1314 } 1315 1315 1316 JIT Code::JITType jitType() { return m_jitType; }1316 JITType jitType() { return m_jitType; } 1317 1317 1318 1318 private: 1319 1319 mutable unsigned m_currentFrame; 1320 mutable JIT Code::JITType m_jitType;1320 mutable JITType m_jitType; 1321 1321 }; 1322 1322 … … 1345 1345 CallerFrameJITTypeFunctor functor; 1346 1346 exec->iterate(functor); 1347 return JSValue::encode(jsBoolean(functor.jitType() == JIT Code::InterpreterThunk));1347 return JSValue::encode(jsBoolean(functor.jitType() == JITType::InterpreterThunk)); 1348 1348 } 1349 1349 … … 1356 1356 CallerFrameJITTypeFunctor functor; 1357 1357 exec->iterate(functor); 1358 return JSValue::encode(jsBoolean(functor.jitType() == JIT Code::BaselineJIT));1358 return JSValue::encode(jsBoolean(functor.jitType() == JITType::BaselineJIT)); 1359 1359 } 1360 1360
Note:
See TracChangeset
for help on using the changeset viewer.