Index: include/llvm/Analysis/ProfileSummaryInfo.h =================================================================== --- include/llvm/Analysis/ProfileSummaryInfo.h +++ include/llvm/Analysis/ProfileSummaryInfo.h @@ -55,6 +55,9 @@ ProfileSummaryInfo(ProfileSummaryInfo &&Arg) : M(Arg.M), Summary(std::move(Arg.Summary)) {} + /// \brief Returns true if profile summary is available. + bool hasProfileSummary(); + /// Handle the invalidation of this information. /// /// When used as a result of \c ProfileSummaryAnalysis this method will be Index: lib/Analysis/ProfileSummaryInfo.cpp =================================================================== --- lib/Analysis/ProfileSummaryInfo.cpp +++ lib/Analysis/ProfileSummaryInfo.cpp @@ -68,6 +68,10 @@ return true; } +bool ProfileSummaryInfo::hasProfileSummary() { + return computeSummary(); +} + Optional ProfileSummaryInfo::getProfileCount(const Instruction *Inst, BlockFrequencyInfo *BFI) { Index: unittests/Analysis/ProfileSummaryInfoTest.cpp =================================================================== --- unittests/Analysis/ProfileSummaryInfoTest.cpp +++ unittests/Analysis/ProfileSummaryInfoTest.cpp @@ -102,6 +102,7 @@ Function *F = M->getFunction("f"); ProfileSummaryInfo PSI = buildPSI(M.get()); + EXPECT_FALSE(PSI.hasProfileSummary()); // In the absence of profiles, is{Hot|Cold}X methods should always return // false. EXPECT_FALSE(PSI.isHotCount(1000)); @@ -130,6 +131,7 @@ Function *H = M->getFunction("h"); ProfileSummaryInfo PSI = buildPSI(M.get()); + EXPECT_TRUE(PSI.hasProfileSummary()); EXPECT_TRUE(PSI.isHotCount(400)); EXPECT_TRUE(PSI.isColdCount(2)); EXPECT_FALSE(PSI.isColdCount(100)); @@ -144,6 +146,7 @@ auto M = makeLLVMModule("InstrProf"); Function *F = M->getFunction("f"); ProfileSummaryInfo PSI = buildPSI(M.get()); + EXPECT_TRUE(PSI.hasProfileSummary()); BasicBlock &BB0 = F->getEntryBlock(); BasicBlock *BB1 = BB0.getTerminator()->getSuccessor(0); @@ -174,6 +177,7 @@ auto M = makeLLVMModule("SampleProfile"); Function *F = M->getFunction("f"); ProfileSummaryInfo PSI = buildPSI(M.get()); + EXPECT_TRUE(PSI.hasProfileSummary()); BasicBlock &BB0 = F->getEntryBlock(); BasicBlock *BB1 = BB0.getTerminator()->getSuccessor(0);