aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArtur Pilipenko <apilipenko@azul.com>2021-06-08 11:26:27 -0700
committerArtur Pilipenko <apilipenko@azul.com>2021-06-08 11:29:27 -0700
commit9197bac297f73552882820ba25d245115e29e7af (patch)
tree34211a576e2414567e2b126e683b1213418d8aeb
parentf673365e1ce16293075c18d03cd2f1ae6264289f (diff)
downloadllvm-9197bac297f73552882820ba25d245115e29e7af.zip
llvm-9197bac297f73552882820ba25d245115e29e7af.tar.gz
llvm-9197bac297f73552882820ba25d245115e29e7af.tar.bz2
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
-rw-r--r--llvm/lib/Analysis/CFGPrinter.cpp12
1 files changed, 12 insertions, 0 deletions
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<bool> HideUnreachablePaths("cfg-hide-unreachable-paths",
static cl::opt<bool> HideDeoptimizePaths("cfg-hide-deoptimize-paths",
cl::init(false));
+static cl::opt<double> HideColdPaths(
+ "cfg-hide-cold-paths", cl::init(0.0),
+ cl::desc("Hide blocks with relative frequency below the given value"));
+
static cl::opt<bool> ShowHeatColors("cfg-heat-colors", cl::init(true),
cl::Hidden,
cl::desc("Show heat colors in CFG"));
@@ -296,6 +300,14 @@ void DOTGraphTraits<DOTFuncInfo *>::computeDeoptOrUnreachablePaths(
bool DOTGraphTraits<DOTFuncInfo *>::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())