summaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp')
-rw-r--r--llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp b/llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp
index 0db6dd04a7e88..e4fda2472b3ac 100644
--- a/llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp
+++ b/llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp
@@ -40,6 +40,12 @@ using namespace llvm::bfi_detail;
#define DEBUG_TYPE "block-freq"
+cl::opt<bool> CheckBFIUnknownBlockQueries(
+ "check-bfi-unknown-block-queries",
+ cl::init(false), cl::Hidden,
+ cl::desc("Check if block frequency is queried for an unknown block "
+ "for debugging missed BFI updates"));
+
ScaledNumber<uint64_t> BlockMass::toScaled() const {
if (isFull())
return ScaledNumber<uint64_t>(1, 0);
@@ -550,8 +556,17 @@ void BlockFrequencyInfoImplBase::finalizeMetrics() {
BlockFrequency
BlockFrequencyInfoImplBase::getBlockFreq(const BlockNode &Node) const {
- if (!Node.isValid())
+ if (!Node.isValid()) {
+#ifndef NDEBUG
+ if (CheckBFIUnknownBlockQueries) {
+ SmallString<256> Msg;
+ raw_svector_ostream OS(Msg);
+ OS << "*** Detected BFI query for unknown block " << getBlockName(Node);
+ report_fatal_error(OS.str());
+ }
+#endif
return 0;
+ }
return Freqs[Node.Index].Integer;
}