diff options
| -rw-r--r-- | llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp | 9 | ||||
| -rw-r--r-- | llvm/test/Transforms/PGOProfile/branch1.ll | 4 |
2 files changed, 11 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp b/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp index 835f75edcd2..9e13dcc5ed5 100644 --- a/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp +++ b/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp @@ -67,6 +67,7 @@ #include "llvm/IR/Module.h" #include "llvm/Pass.h" #include "llvm/ProfileData/InstrProfReader.h" +#include "llvm/ProfileData/ProfileCommon.h" #include "llvm/Support/BranchProbability.h" #include "llvm/Support/Debug.h" #include "llvm/Support/JamCRC.h" @@ -478,6 +479,9 @@ public: // Return the function hotness from the profile. FuncFreqAttr getFuncFreqAttr() const { return FreqAttr; } + // Return the profile record for this function; + InstrProfRecord &getProfileRecord() { return ProfileRecord; } + private: Function &F; Module *M; @@ -883,6 +887,7 @@ static bool annotateAllFunctions( std::vector<Function *> HotFunctions; std::vector<Function *> ColdFunctions; + InstrProfSummaryBuilder Builder(ProfileSummaryBuilder::DefaultCutoffs); for (auto &F : M) { if (F.isDeclaration()) continue; @@ -890,13 +895,15 @@ static bool annotateAllFunctions( auto *BFI = LookupBFI(F); PGOUseFunc Func(F, &M, BPI, BFI); setPGOCountOnFunc(Func, PGOReader.get()); + if (!Func.getProfileRecord().Counts.empty()) + Builder.addRecord(Func.getProfileRecord()); PGOUseFunc::FuncFreqAttr FreqAttr = Func.getFuncFreqAttr(); if (FreqAttr == PGOUseFunc::FFA_Cold) ColdFunctions.push_back(&F); else if (FreqAttr == PGOUseFunc::FFA_Hot) HotFunctions.push_back(&F); } - + M.setProfileSummary(Builder.getSummary()->getMD(M.getContext())); // Set function hotness attribute from the profile. for (auto &F : HotFunctions) { F->addFnAttr(llvm::Attribute::InlineHint); diff --git a/llvm/test/Transforms/PGOProfile/branch1.ll b/llvm/test/Transforms/PGOProfile/branch1.ll index 317fae2d88d..380a293ca0e 100644 --- a/llvm/test/Transforms/PGOProfile/branch1.ll +++ b/llvm/test/Transforms/PGOProfile/branch1.ll @@ -28,7 +28,7 @@ entry: br i1 %cmp, label %if.then, label %if.end ; USE: br i1 %cmp, label %if.then, label %if.end ; USE-SAME: !prof ![[BW_ENTRY:[0-9]+]] -; USE: ![[BW_ENTRY]] = !{!"branch_weights", i32 2, i32 1} +; USE-DAG: ![[BW_ENTRY]] = !{!"branch_weights", i32 2, i32 1} if.then: ; GEN: if.then: @@ -42,3 +42,5 @@ if.end: %retv = phi i32 [ %add, %if.then ], [ %i, %entry ] ret i32 %retv } +; USE-DAG: {{![0-9]+}} = !{i32 1, !"ProfileSummary", {{![0-9]+}}} +; USE-DAG: {{![0-9]+}} = !{!"DetailedSummary", {{![0-9]+}}} |

