Lines Matching defs:Cloner
277 getOutliningCallBBRelativeFreq(FunctionCloner &Cloner) const;
281 bool shouldPartialInline(CallBase &CB, FunctionCloner &Cloner,
288 bool tryPartialInline(FunctionCloner &Cloner);
325 // basic block Cloner.OutliningCallBB;
327 computeOutliningCosts(FunctionCloner &Cloner) const;
678 FunctionCloner &Cloner) const {
679 BasicBlock *OutliningCallBB = Cloner.OutlinedFunctions.back().second;
681 Cloner.ClonedFuncBFI->getBlockFreq(&Cloner.ClonedFunc->getEntryBlock());
683 Cloner.ClonedFuncBFI->getBlockFreq(OutliningCallBB);
693 if (hasProfileData(*Cloner.OrigFunc, *Cloner.ClonedOI))
718 CallBase &CB, FunctionCloner &Cloner, BlockFrequency WeightedOutliningRcost,
723 assert(Callee == Cloner.ClonedFunc);
740 << NV("Callee", Cloner.OrigFunc)
749 << NV("Callee", Cloner.OrigFunc) << " not partially inlined into "
759 << NV("Callee", Cloner.OrigFunc) << " not partially inlined into "
777 << NV("Callee", Cloner.OrigFunc) << " not partially inlined into "
791 << NV("Callee", Cloner.OrigFunc) << " can be partially inlined into "
864 PartialInlinerImpl::computeOutliningCosts(FunctionCloner &Cloner) const {
866 for (auto FuncBBPair : Cloner.OutlinedFunctions) {
879 assert(OutlinedFunctionCost >= Cloner.OutlinedRegionCost &&
886 2 * InlineConstants::getInstrCost() * Cloner.OutlinedFunctions.size();
890 (OutlinedFunctionCost - Cloner.OutlinedRegionCost) +
1257 FunctionCloner Cloner(&F, OMRI.get(), ORE, LookupAssumptionCache, GetTTI);
1265 bool DidOutline = Cloner.doMultiRegionFunctionOutlining();
1270 Cloner.ClonedFunc->print(dbgs());
1274 if (tryPartialInline(Cloner))
1287 FunctionCloner Cloner(&F, OI.get(), ORE, LookupAssumptionCache, GetTTI);
1288 Cloner.normalizeReturnBlock();
1290 Function *OutlinedFunction = Cloner.doSingleRegionFunctionOutlining();
1295 if (tryPartialInline(Cloner))
1301 bool PartialInlinerImpl::tryPartialInline(FunctionCloner &Cloner) {
1302 if (Cloner.OutlinedFunctions.empty())
1305 auto OutliningCosts = computeOutliningCosts(Cloner);
1316 if (Cloner.ClonedOI)
1317 RelativeToEntryFreq = getOutliningCallBBRelativeFreq(Cloner);
1333 if (!SkipCostAnalysis && Cloner.OutlinedRegionCost < SizeCost) {
1334 OptimizationRemarkEmitter OrigFuncORE(Cloner.OrigFunc);
1337 std::tie(DLoc, Block) = getOneDebugLoc(*Cloner.ClonedFunc);
1341 << ore::NV("Function", Cloner.OrigFunc)
1343 << ore::NV("OutlinedRegionOriginalSize", Cloner.OutlinedRegionCost)
1350 assert(Cloner.OrigFunc->users().empty() &&
1353 std::vector<User *> Users(Cloner.ClonedFunc->user_begin(),
1354 Cloner.ClonedFunc->user_end());
1357 auto CalleeEntryCount = Cloner.OrigFunc->getEntryCount();
1359 computeCallsiteToProfCountMap(Cloner.ClonedFunc, CallSiteToProfCountMap);
1376 if (!shouldPartialInline(*CB, Cloner, WeightedRcost, CallerORE))
1382 OR << ore::NV("Callee", Cloner.OrigFunc) << " partially inlined into "
1389 (Cloner.ClonedOI ? Cloner.OutlinedFunctions.back().first
1405 if (Cloner.ClonedOI)
1412 Cloner.IsFunctionInlined = true;
1414 Cloner.OrigFunc->setEntryCount(Function::ProfileCount(
1416 OptimizationRemarkEmitter OrigFuncORE(Cloner.OrigFunc);
1418 return OptimizationRemark(DEBUG_TYPE, "PartiallyInlined", Cloner.OrigFunc)