Lines Matching refs:Targets
199 std::vector<IndirectCallPromotion::Callsite> &Targets, unsigned N) const { in printDecision() argument
202 for (const Callsite &S : Targets) { in printDecision()
211 OS << "BOLT-INFO: ICP decision for call site with " << Targets.size() in printDecision()
216 for (const Callsite &S : Targets) { in printDecision()
240 std::vector<Callsite> Targets; in getCallTargets() local
245 return Targets; in getCallTargets()
266 Targets.emplace_back(From, To, BI.MispredictedCount, BI.Count, in getCallTargets()
271 llvm::sort(Targets, [](const Callsite &A, const Callsite &B) { in getCallTargets()
286 auto First = Targets.begin(); in getCallTargets()
287 auto Last = Targets.end(); in getCallTargets()
300 LLVM_DEBUG(if (Targets.end() - Result > 0) { in getCallTargets()
301 dbgs() << "BOLT-INFO: ICP: " << (Targets.end() - Result) in getCallTargets()
305 Targets.erase(Result, Targets.end()); in getCallTargets()
310 return Targets; in getCallTargets()
318 Targets.emplace_back(std::move(Site)); in getCallTargets()
326 llvm::stable_sort(Targets, [](const Callsite &A, const Callsite &B) { in getCallTargets()
337 llvm::erase_if(Targets, [](const Callsite &CS) { return !CS.To.Sym; }); in getCallTargets()
342 for (const Callsite &S : Targets) { in getCallTargets()
351 dbgs() << "BOLT-INFO: ICP: jump table size = " << Targets.size() in getCallTargets()
356 for (const Callsite &S : Targets) { in getCallTargets()
365 return Targets; in getCallTargets()
524 IndirectCallPromotion::findCallTargetSymbols(std::vector<Callsite> &Targets, in findCallTargetSymbols() argument
533 assert(Targets[I].To.Sym && "All ICP targets must be to known symbols"); in findCallTargetSymbols()
534 assert(Targets[I].JTIndices.empty() && in findCallTargetSymbols()
536 SymTargets.emplace_back(Targets[I].To.Sym, 0); in findCallTargetSymbols()
546 for (size_t I = 0; I < Targets.size(); ++I) in findCallTargetSymbols()
547 if (llvm::is_contained(Targets[I].JTIndices, JTIndex)) in findCallTargetSymbols()
571 ++IndicesPerTarget[Targets[TargetIndex].To.Sym]; in findCallTargetSymbols()
591 Callsite &Target = Targets[findTargetsIndex(JTIndex)]; in findCallTargetSymbols()
608 llvm::copy(Targets, std::back_inserter(NewTargets)); in findCallTargetSymbols()
609 std::swap(NewTargets, Targets); in findCallTargetSymbols()
621 Callsite &Target = Targets[TgtIdx]; in findCallTargetSymbols()
812 const std::vector<Callsite> &Targets) const { in fixCFG()
821 for (const Callsite &Target : Targets) in fixCFG()
827 for (const Callsite &Target : Targets) { in fixCFG()
847 for (const Callsite &Target : Targets) { in fixCFG()
944 const std::vector<Callsite> &Targets, uint64_t NumCalls) { in canPromoteCallsite() argument
956 TotalNumFrequentJmps += Targets[I].Branches; in canPromoteCallsite()
958 TotalNumFrequentCalls += Targets[I].Branches; in canPromoteCallsite()
962 if (Targets.empty() || !NumCalls) { in canPromoteCallsite()
978 const size_t TrialN = TopN ? std::min(TopN, Targets.size()) : Targets.size(); in canPromoteCallsite()
994 Threshold -= (100.0 * Targets[I].Mispreds) / NumCalls; in canPromoteCallsite()
995 TotalMispredictsTopN += Targets[I].Mispreds; in canPromoteCallsite()
1027 if (100 * Targets[I].Branches < NumCalls * TotalThreshold) in canPromoteCallsite()
1029 if (100 * Targets[I].Branches < NumRemainingCalls * RemainingThreshold) in canPromoteCallsite()
1031 if (N + (Targets[I].JTIndices.empty() ? 1 : Targets[I].JTIndices.size()) > in canPromoteCallsite()
1034 TotalMispredictsTopN += Targets[I].Mispreds; in canPromoteCallsite()
1035 NumRemainingCalls -= Targets[I].Branches; in canPromoteCallsite()
1036 N += Targets[I].JTIndices.empty() ? 1 : Targets[I].JTIndices.size(); in canPromoteCallsite()
1067 const MCSymbol *TargetSym = Targets[I].To.Sym; in canPromoteCallsite()
1090 const std::vector<Callsite> &Targets, const size_t N, in printCallsiteInfo() argument
1103 const double Frequency = 100.0 * Targets[I].Branches / NumCalls; in printCallsiteInfo()
1104 const double MisFrequency = 100.0 * Targets[I].Mispreds / NumCalls; in printCallsiteInfo()
1106 if (Targets[I].To.Sym) in printCallsiteInfo()
1107 outs() << Targets[I].To.Sym->getName(); in printCallsiteInfo()
1109 outs() << Targets[I].To.Addr; in printCallsiteInfo()
1110 outs() << ", calls = " << Targets[I].Branches in printCallsiteInfo()
1111 << ", mispreds = " << Targets[I].Mispreds in printCallsiteInfo()
1115 for (uint64_t JTIndex : Targets[I].JTIndices) { in printCallsiteInfo()
1124 BC.printInstruction(dbgs(), Inst, Targets[0].From.Addr, nullptr, true); in printCallsiteInfo()
1275 std::vector<Callsite> Targets = getCallTargets(*BB, Inst); in runOnFunctions() local
1279 for (const Callsite &BInfo : Targets) in runOnFunctions()
1305 size_t N = canPromoteCallsite(*BB, Inst, Targets, NumCalls); in runOnFunctions()
1314 printCallsiteInfo(*BB, Inst, Targets, N, NumCalls); in runOnFunctions()
1319 findCallTargetSymbols(Targets, N, *BB, Inst, TargetFetchInst); in runOnFunctions()
1326 LLVM_DEBUG(printDecision(dbgs(), Targets, N)); in runOnFunctions()
1337 << Targets[LastTarget].To.Sym->getName() << "\n"; in runOnFunctions()
1374 uint64_t Offset = Targets[0].From.Addr; in runOnFunctions()
1393 fixCFG(*BB, IsTailCall, IsJumpTable, std::move(NewBBs), Targets); in runOnFunctions()