[ThinLTO] Add call edges' relative block frequency to per-module summary.

Summary:
This allows relative block frequency of call edges to be passed to the
thinlink stage where it will be used to compute synthetic entry counts
of functions.

Reviewers: tejohnson, pcc

Subscribers: mehdi_amini, llvm-commits, inglorion

Differential Revision: https://reviews.llvm.org/D42212

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@323349 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Easwaran Raman
2018-01-24 17:51:23 +00:00
parent d9c395b630
commit cd25118a7f
7 changed files with 119 additions and 27 deletions
+18 -3
View File
@@ -273,9 +273,24 @@ computeFunctionSummary(ModuleSummaryIndex &Index, const Module &M,
// to record the call edge to the alias in that case. Eventually
// an alias summary will be created to associate the alias and
// aliasee.
CallGraphEdges[Index.getOrInsertValueInfo(
cast<GlobalValue>(CalledValue))]
.updateHotness(Hotness);
auto &ValueInfo = CallGraphEdges[Index.getOrInsertValueInfo(
cast<GlobalValue>(CalledValue))];
ValueInfo.updateHotness(Hotness);
// Add the relative block frequency to CalleeInfo if there is no profile
// information.
if (BFI != nullptr && Hotness == CalleeInfo::HotnessType::Unknown) {
auto BBFreq = BFI->getBlockFreq(CI->getParent()).getFrequency();
// FIXME: This might need some scaling to prevent BBFreq values from
// being rounded down to 0.
auto EntryFreq = BFI->getEntryFreq();
// Block frequencies can be directly set for a block and so we need to
// handle the case of entry frequency being 0.
if (EntryFreq)
BBFreq /= EntryFreq;
else
BBFreq = 0;
ValueInfo.updateRelBlockFreq(BBFreq);
}
} else {
// Skip inline assembly calls.
if (CI && CI->isInlineAsm())