summaryrefslogtreecommitdiffstats
path: root/llvm/lib/IR/Function.cpp
diff options
context:
space:
mode:
authorDavid Callahan <dcallahan@fb.com>2016-08-05 18:38:19 +0000
committerDavid Callahan <dcallahan@fb.com>2016-08-05 18:38:19 +0000
commitc1c810de0b55a6d4786974a295d7ef665a860f93 (patch)
tree04cd7a833b18744bf0c4e259f9c2fee28d43be5c /llvm/lib/IR/Function.cpp
parentb0b4e86215fe2815ffed9e70c810b08c0ca4e47f (diff)
downloadbcm5719-llvm-c1c810de0b55a6d4786974a295d7ef665a860f93.tar.gz
bcm5719-llvm-c1c810de0b55a6d4786974a295d7ef665a860f93.zip
[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 llvm-svn: 277849
Diffstat (limited to 'llvm/lib/IR/Function.cpp')
-rw-r--r--llvm/lib/IR/Function.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/IR/Function.cpp b/llvm/lib/IR/Function.cpp
index 54638abe4c6..d7baa987b5c 100644
--- a/llvm/lib/IR/Function.cpp
+++ b/llvm/lib/IR/Function.cpp
@@ -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;
}
OpenPOWER on IntegriCloud