[AutoFDO] Fix handling of empty profiles

Summary:
If a profile has no samples for a function, then the function "entry count" is set to the value 0. Several places in the code test that if the Function::getEntryCount is defined at all. Here we change to treat a 0 entry count the same as undefined.

In particular, this fixes a problem in getLayoutSuccessorProbThreshold in MachineBlockPlacement.cpp where we use a different and inferior heuristic for laying out basic blocks.

Reviewers: danielcdh, dnovillo

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@277849 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Callahan 2016-08-05 18:38:19 +00:00
parent a2ef5492ed
commit fcb7a4a31d

View File

@ -1262,7 +1262,10 @@ Optional<uint64_t> Function::getEntryCount() const {
if (MDString *MDS = dyn_cast<MDString>(MD->getOperand(0)))
if (MDS->getString().equals("function_entry_count")) {
ConstantInt *CI = mdconst::extract<ConstantInt>(MD->getOperand(1));
return CI->getValue().getZExtValue();
uint64_t Count = CI->getValue().getZExtValue();
if (Count == 0)
return None;
return Count;
}
return None;
}