From 9197bac297f73552882820ba25d245115e29e7af Mon Sep 17 00:00:00 2001 From: Artur Pilipenko Date: Tue, 8 Jun 2021 11:26:27 -0700 Subject: [PATCH] Add an option to hide "cold" blocks from CFG graph Introduce a new cl::opt to hide "cold" blocks from CFG DOT graphs. Use BFI to get block relative frequency. Hide the block if the frequency is below the threshold set by the command line option value. Reviewed By: davidxl, hoy Differential Revision: https://reviews.llvm.org/D103640 --- llvm/lib/Analysis/CFGPrinter.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/llvm/lib/Analysis/CFGPrinter.cpp b/llvm/lib/Analysis/CFGPrinter.cpp index f9fb584..76f9f77 100644 --- a/llvm/lib/Analysis/CFGPrinter.cpp +++ b/llvm/lib/Analysis/CFGPrinter.cpp @@ -42,6 +42,10 @@ static cl::opt HideUnreachablePaths("cfg-hide-unreachable-paths", static cl::opt HideDeoptimizePaths("cfg-hide-deoptimize-paths", cl::init(false)); +static cl::opt HideColdPaths( + "cfg-hide-cold-paths", cl::init(0.0), + cl::desc("Hide blocks with relative frequency below the given value")); + static cl::opt ShowHeatColors("cfg-heat-colors", cl::init(true), cl::Hidden, cl::desc("Show heat colors in CFG")); @@ -296,6 +300,14 @@ void DOTGraphTraits::computeDeoptOrUnreachablePaths( bool DOTGraphTraits::isNodeHidden(const BasicBlock *Node, const DOTFuncInfo *CFGInfo) { + if (HideColdPaths.getNumOccurrences() > 0) + if (auto *BFI = CFGInfo->getBFI()) { + uint64_t NodeFreq = BFI->getBlockFreq(Node).getFrequency(); + uint64_t EntryFreq = BFI->getEntryFreq(); + // Hide blocks with relative frequency below HideColdPaths threshold. + if ((double)NodeFreq / EntryFreq < HideColdPaths) + return true; + } if (HideUnreachablePaths || HideDeoptimizePaths) { if (isOnDeoptOrUnreachablePath.find(Node) == isOnDeoptOrUnreachablePath.end()) -- 2.7.4