mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-01 17:28:26 +00:00
NFC: add early exit in ModuleSummaryAnalysis
Summary: Changed this code because it was not very readable. The one question that I got after changing it is, should we count calls to intrinsics? We don't add them to caller summary, so maybe we shouldn't also count them? Reviewers: tejohnson, eraman, mehdi_amini Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D23949 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@280036 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9cb78e2878
commit
bad305ab07
@ -81,37 +81,40 @@ static void computeFunctionSummary(ModuleSummaryIndex &Index, const Module &M,
|
||||
SmallPtrSet<const User *, 8> Visited;
|
||||
for (const BasicBlock &BB : F)
|
||||
for (const Instruction &I : BB) {
|
||||
if (!isa<DbgInfoIntrinsic>(I))
|
||||
++NumInsts;
|
||||
|
||||
if (auto CS = ImmutableCallSite(&I)) {
|
||||
auto *CalledFunction = CS.getCalledFunction();
|
||||
// Check if this is a direct call to a known function.
|
||||
if (CalledFunction) {
|
||||
if (CalledFunction->hasName() && !CalledFunction->isIntrinsic()) {
|
||||
auto ScaledCount = BFI ? BFI->getBlockProfileCount(&BB) : None;
|
||||
auto *CalleeId =
|
||||
M.getValueSymbolTable().lookup(CalledFunction->getName());
|
||||
CallGraphEdges[CalleeId] +=
|
||||
(ScaledCount ? ScaledCount.getValue() : 0);
|
||||
}
|
||||
} else {
|
||||
// Otherwise, check for an indirect call (call to a non-const value
|
||||
// that isn't an inline assembly call).
|
||||
const CallInst *CI = dyn_cast<CallInst>(&I);
|
||||
if (CS.getCalledValue() && !isa<Constant>(CS.getCalledValue()) &&
|
||||
!(CI && CI->isInlineAsm())) {
|
||||
uint32_t NumVals, NumCandidates;
|
||||
uint64_t TotalCount;
|
||||
auto CandidateProfileData =
|
||||
ICallAnalysis.getPromotionCandidatesForInstruction(
|
||||
&I, NumVals, TotalCount, NumCandidates);
|
||||
for (auto &Candidate : CandidateProfileData)
|
||||
IndirectCallEdges[Candidate.Value] += Candidate.Count;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isa<DbgInfoIntrinsic>(I))
|
||||
continue;
|
||||
++NumInsts;
|
||||
findRefEdges(&I, RefEdges, Visited);
|
||||
auto CS = ImmutableCallSite(&I);
|
||||
if (!CS)
|
||||
continue;
|
||||
auto *CalledFunction = CS.getCalledFunction();
|
||||
// Check if this is a direct call to a known function.
|
||||
if (CalledFunction) {
|
||||
// Skip nameless and intrinsics.
|
||||
if (!CalledFunction->hasName() || CalledFunction->isIntrinsic())
|
||||
continue;
|
||||
auto ScaledCount = BFI ? BFI->getBlockProfileCount(&BB) : None;
|
||||
auto *CalleeId =
|
||||
M.getValueSymbolTable().lookup(CalledFunction->getName());
|
||||
CallGraphEdges[CalleeId] += (ScaledCount ? ScaledCount.getValue() : 0);
|
||||
} else {
|
||||
const auto *CI = dyn_cast<CallInst>(&I);
|
||||
// Skip inline assembly calls.
|
||||
if (CI && CI->isInlineAsm())
|
||||
continue;
|
||||
// Skip direct calls.
|
||||
if (!CS.getCalledValue() || isa<Constant>(CS.getCalledValue()))
|
||||
continue;
|
||||
|
||||
uint32_t NumVals, NumCandidates;
|
||||
uint64_t TotalCount;
|
||||
auto CandidateProfileData =
|
||||
ICallAnalysis.getPromotionCandidatesForInstruction(
|
||||
&I, NumVals, TotalCount, NumCandidates);
|
||||
for (auto &Candidate : CandidateProfileData)
|
||||
IndirectCallEdges[Candidate.Value] += Candidate.Count;
|
||||
}
|
||||
}
|
||||
|
||||
GlobalValueSummary::GVFlags Flags(F);
|
||||
|
Loading…
Reference in New Issue
Block a user