diff options
author | Xinliang David Li <davidxl@google.com> | 2016-08-19 05:31:33 +0000 |
---|---|---|
committer | Xinliang David Li <davidxl@google.com> | 2016-08-19 05:31:33 +0000 |
commit | 2c9336823ce238e1462f6fac04c9f202d258fb4f (patch) | |
tree | 9cf5c3db3a3ad8f610d6d1c2a0bcd857e3618c04 /llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp | |
parent | 1bdbebed1c378182be96e5a3d0f1ccb73e9286df (diff) | |
download | bcm5719-llvm-2c9336823ce238e1462f6fac04c9f202d258fb4f.tar.gz bcm5719-llvm-2c9336823ce238e1462f6fac04c9f202d258fb4f.zip |
[Profile] Simple code refactoring for reuse /NFC
llvm-svn: 279209
Diffstat (limited to 'llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp')
-rw-r--r-- | llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp b/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp index 926240828dd..0865d16756b 100644 --- a/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp +++ b/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp @@ -820,11 +820,25 @@ void PGOUseFunc::populateCounters() { DEBUG(FuncInfo.dumpInfo("after reading profile.")); } +static void setProfMetadata(Module *M, TerminatorInst *TI, + ArrayRef<unsigned> EdgeCounts, uint64_t MaxCount) { + MDBuilder MDB(M->getContext()); + assert(MaxCount > 0 && "Bad max count"); + uint64_t Scale = calculateCountScale(MaxCount); + SmallVector<unsigned, 4> Weights; + for (const auto &ECI : EdgeCounts) + Weights.push_back(scaleBranchCount(ECI, Scale)); + + DEBUG(dbgs() << "Weight is: "; + for (const auto &W : Weights) { dbgs() << W << " "; } + dbgs() << "\n";); + TI->setMetadata(llvm::LLVMContext::MD_prof, MDB.createBranchWeights(Weights)); +} + // Assign the scaled count values to the BB with multiple out edges. void PGOUseFunc::setBranchWeights() { // Generate MD_prof metadata for every branch instruction. DEBUG(dbgs() << "\nSetting branch weights.\n"); - MDBuilder MDB(M->getContext()); for (auto &BB : F) { TerminatorInst *TI = BB.getTerminator(); if (TI->getNumSuccessors() < 2) @@ -851,17 +865,7 @@ void PGOUseFunc::setBranchWeights() { MaxCount = EdgeCount; EdgeCounts[SuccNum] = EdgeCount; } - assert(MaxCount > 0 && "Bad max count"); - uint64_t Scale = calculateCountScale(MaxCount); - SmallVector<unsigned, 4> Weights; - for (const auto &ECI : EdgeCounts) - Weights.push_back(scaleBranchCount(ECI, Scale)); - - TI->setMetadata(llvm::LLVMContext::MD_prof, - MDB.createBranchWeights(Weights)); - DEBUG(dbgs() << "Weight is: "; - for (const auto &W : Weights) { dbgs() << W << " "; } - dbgs() << "\n";); + setProfMetadata(M, TI, EdgeCounts, MaxCount); } } |