================ @@ -572,6 +575,89 @@ CallBase &llvm::promoteCallWithIfThenElse(CallBase &CB, Function *Callee, return promoteCall(NewInst, Callee); } +CallBase *llvm::promoteCallWithIfThenElse(CallBase &CB, Function &Callee, + PGOContextualProfile &CtxProf) { + assert(CB.isIndirectCall()); + if (!CtxProf.isFunctionKnown(Callee)) + return nullptr; + auto &Caller = *CB.getParent()->getParent(); + auto *CSInstr = CtxProfAnalysis::getCallsiteInstrumentation(CB); + if (!CSInstr) + return nullptr; + const auto CSIndex = CSInstr->getIndex()->getZExtValue(); + + CallBase &DirectCall = promoteCall( + versionCallSite(CB, &Callee, /*BranchWeights=*/nullptr), &Callee); + CSInstr->moveBefore(&CB); + const auto NewCSID = CtxProf.allocateNextCallsiteIndex(Caller); + auto *NewCSInstr = cast<InstrProfCallsite>(CSInstr->clone()); + NewCSInstr->setIndex(NewCSID); + NewCSInstr->setCallee(&Callee); + NewCSInstr->insertBefore(&DirectCall); + auto &DirectBB = *DirectCall.getParent(); + auto &IndirectBB = *CB.getParent(); + + assert((CtxProfAnalysis::getBBInstrumentation(IndirectBB) == nullptr) && + "The ICP direct BB is new, it shouldn't have instrumentation"); + assert((CtxProfAnalysis::getBBInstrumentation(DirectBB) == nullptr) && + "The ICP indirect BB is new, it shouldn't have instrumentation"); + + // Make the 2 new BBs have counters. ---------------- snehasish wrote:
nit: `Allocate counters for the new basic blocks` https://github.com/llvm/llvm-project/pull/105469 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits