PrologueCallersRec* ProfData::findPrologueCallersRec(const Func* func, int nArgs) const { TransID tid = prologueTransId(func, nArgs); if (tid == InvalidID) { assert(RuntimeOption::EvalJitPGOHotOnly && !(func->attrs() & AttrHot)); return nullptr; } assert(transKind(tid) == TransProflogue); PrologueCallersRec* prologueCallers = m_transRecs[tid]->prologueCallers(); assert(prologueCallers); return prologueCallers; }
void ProfData::freeFuncData(FuncId funcId) { // Free ProfTransRecs for Profile translations. for (TransID tid : funcProfTransIDs(funcId)) { m_transRecs[tid].reset(); } // Free ProfTransRecs for Proflogue translations. const Func* func = Func::fromFuncId(funcId); for (int nArgs = 0; nArgs < func->numPrologues(); nArgs++) { TransID tid = prologueTransId(func, nArgs); if (tid != kInvalidTransID) { m_transRecs[tid].reset(); } } }
PrologueCallersRec* ProfData::prologueCallers(const Func* func, int nArgs) const { TransID id = prologueTransId(func, nArgs); return prologueCallers(id); }