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

It was reverted after buildbot regressions.

Original commit message:

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.

llvm-svn: 323460
This commit is contained in:
Easwaran Raman
2018-01-25 19:27:17 +00:00
parent 7e9453d583
commit c73cec84c9
7 changed files with 93 additions and 31 deletions

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(&BB).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())