GetByIdStatus GetByIdStatus::computeFor( CodeBlock* profiledBlock, CodeBlock* dfgBlock, StubInfoMap& baselineMap, StubInfoMap& dfgMap, CodeOrigin codeOrigin, StringImpl* uid) { #if ENABLE(DFG_JIT) if (dfgBlock) { GetByIdStatus result; { ConcurrentJITLocker locker(dfgBlock->m_lock); result = computeForStubInfo(locker, dfgBlock, dfgMap.get(codeOrigin), uid); } if (result.takesSlowPath()) return result; { ConcurrentJITLocker locker(profiledBlock->m_lock); if (hasExitSite(locker, profiledBlock, codeOrigin.bytecodeIndex, ExitFromFTL)) return GetByIdStatus(TakesSlowPath, true); } if (result.isSet()) return result; } #else UNUSED_PARAM(dfgBlock); UNUSED_PARAM(dfgMap); #endif return computeFor(profiledBlock, baselineMap, codeOrigin.bytecodeIndex, uid); }
PutByIdStatus PutByIdStatus::computeFor(CodeBlock* baselineBlock, CodeBlock* dfgBlock, StubInfoMap& baselineMap, StubInfoMap& dfgMap, CodeOrigin codeOrigin, StringImpl* uid) { #if ENABLE(DFG_JIT) if (dfgBlock) { CallLinkStatus::ExitSiteData exitSiteData; { ConcurrentJITLocker locker(baselineBlock->m_lock); if (hasExitSite(locker, baselineBlock, codeOrigin.bytecodeIndex, ExitFromFTL)) return PutByIdStatus(TakesSlowPath); exitSiteData = CallLinkStatus::computeExitSiteData( locker, baselineBlock, codeOrigin.bytecodeIndex, ExitFromFTL); } PutByIdStatus result; { ConcurrentJITLocker locker(dfgBlock->m_lock); result = computeForStubInfo( locker, dfgBlock, dfgMap.get(codeOrigin), uid, exitSiteData); } // We use TakesSlowPath in some cases where the stub was unset. That's weird and // it would be better not to do that. But it means that we have to defend // ourselves here. if (result.isSimple()) return result; } #else UNUSED_PARAM(dfgBlock); UNUSED_PARAM(dfgMap); #endif return computeFor(baselineBlock, baselineMap, codeOrigin.bytecodeIndex, uid); }
PutByIdStatus PutByIdStatus::computeFor(CodeBlock* profiledBlock, StubInfoMap& map, unsigned bytecodeIndex, StringImpl* uid) { ConcurrentJITLocker locker(profiledBlock->m_lock); UNUSED_PARAM(profiledBlock); UNUSED_PARAM(bytecodeIndex); UNUSED_PARAM(uid); #if ENABLE(DFG_JIT) if (profiledBlock->likelyToTakeSlowCase(bytecodeIndex) || hasExitSite(locker, profiledBlock, bytecodeIndex)) return PutByIdStatus(TakesSlowPath); StructureStubInfo* stubInfo = map.get(CodeOrigin(bytecodeIndex)); PutByIdStatus result = computeForStubInfo( locker, profiledBlock, stubInfo, uid, CallLinkStatus::computeExitSiteData(locker, profiledBlock, bytecodeIndex)); if (!result) return computeFromLLInt(profiledBlock, bytecodeIndex, uid); return result; #else // ENABLE(JIT) UNUSED_PARAM(map); return PutByIdStatus(NoInformation); #endif // ENABLE(JIT) }
GetByIdStatus GetByIdStatus::computeFor( CodeBlock* profiledBlock, CodeBlock* dfgBlock, StubInfoMap& baselineMap, StubInfoMap& dfgMap, CodeOrigin codeOrigin, UniquedStringImpl* uid) { #if ENABLE(DFG_JIT) if (dfgBlock) { CallLinkStatus::ExitSiteData exitSiteData; { ConcurrentJITLocker locker(profiledBlock->m_lock); exitSiteData = CallLinkStatus::computeExitSiteData( locker, profiledBlock, codeOrigin.bytecodeIndex); } GetByIdStatus result; { ConcurrentJITLocker locker(dfgBlock->m_lock); result = computeForStubInfoWithoutExitSiteFeedback( locker, dfgBlock, dfgMap.get(codeOrigin), uid, exitSiteData); } if (result.takesSlowPath()) return result; { ConcurrentJITLocker locker(profiledBlock->m_lock); if (hasExitSite(locker, profiledBlock, codeOrigin.bytecodeIndex)) return GetByIdStatus(TakesSlowPath, true); } if (result.isSet()) return result; } #else UNUSED_PARAM(dfgBlock); UNUSED_PARAM(dfgMap); #endif return computeFor(profiledBlock, baselineMap, codeOrigin.bytecodeIndex, uid); }
GetByIdStatus GetByIdStatus::computeFor(CodeBlock* profiledBlock, StubInfoMap& map, unsigned bytecodeIndex, UniquedStringImpl* uid) { ConcurrentJITLocker locker(profiledBlock->m_lock); GetByIdStatus result; #if ENABLE(DFG_JIT) result = computeForStubInfoWithoutExitSiteFeedback( locker, profiledBlock, map.get(CodeOrigin(bytecodeIndex)), uid, CallLinkStatus::computeExitSiteData(locker, profiledBlock, bytecodeIndex)); if (!result.takesSlowPath() && hasExitSite(locker, profiledBlock, bytecodeIndex)) return GetByIdStatus(result.makesCalls() ? MakesCalls : TakesSlowPath, true); #else UNUSED_PARAM(map); #endif if (!result) return computeFromLLInt(profiledBlock, bytecodeIndex, uid); return result; }
GetByIdStatus GetByIdStatus::computeFor(CodeBlock* profiledBlock, StubInfoMap& map, unsigned bytecodeIndex, StringImpl* uid) { ConcurrentJITLocker locker(profiledBlock->m_lock); GetByIdStatus result; #if ENABLE(DFG_JIT) result = computeForStubInfo( locker, profiledBlock, map.get(CodeOrigin(bytecodeIndex)), uid); if (!result.takesSlowPath() && (hasExitSite(locker, profiledBlock, bytecodeIndex) || profiledBlock->likelyToTakeSlowCase(bytecodeIndex))) return GetByIdStatus(TakesSlowPath, true); #else UNUSED_PARAM(map); #endif if (!result) return computeFromLLInt(profiledBlock, bytecodeIndex, uid); return result; }