#include "llvm/Analysis/CFGPrinter.h"
#include "llvm/ADT/PostOrderIterator.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/GraphWriter.h"
usingnamespacellvm;
static cl::opt<std::string>
CFGFuncName("cfg-func-name", cl::Hidden,
cl::desc("The name of a function (or its substring)"
" whose CFG is viewed/printed."));
static cl::opt<std::string> CFGDotFilenamePrefix(
"cfg-dot-filename-prefix", cl::Hidden,
cl::desc("The prefix used for the CFG dot file names."));
static cl::opt<bool> HideUnreachablePaths("cfg-hide-unreachable-paths",
cl::init(false));
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"));
static cl::opt<bool> UseRawEdgeWeight("cfg-raw-weights", cl::init(false),
cl::Hidden,
cl::desc("Use raw weights for labels. "
"Use percentages as default."));
static cl::opt<bool>
ShowEdgeWeight("cfg-weights", cl::init(false), cl::Hidden,
cl::desc("Show edges labeled with weights"));
static void writeCFGToDotFile(Function &F, BlockFrequencyInfo *BFI,
BranchProbabilityInfo *BPI, uint64_t MaxFreq,
bool CFGOnly = false) { … }
static void viewCFG(Function &F, const BlockFrequencyInfo *BFI,
const BranchProbabilityInfo *BPI, uint64_t MaxFreq,
bool CFGOnly = false) { … }
PreservedAnalyses CFGViewerPass::run(Function &F, FunctionAnalysisManager &AM) { … }
PreservedAnalyses CFGOnlyViewerPass::run(Function &F,
FunctionAnalysisManager &AM) { … }
PreservedAnalyses CFGPrinterPass::run(Function &F,
FunctionAnalysisManager &AM) { … }
PreservedAnalyses CFGOnlyPrinterPass::run(Function &F,
FunctionAnalysisManager &AM) { … }
void Function::viewCFG() const { … }
void Function::viewCFG(bool ViewCFGOnly, const BlockFrequencyInfo *BFI,
const BranchProbabilityInfo *BPI) const { … }
void Function::viewCFGOnly() const { … }
void Function::viewCFGOnly(const BlockFrequencyInfo *BFI,
const BranchProbabilityInfo *BPI) const { … }
void DOTGraphTraits<DOTFuncInfo *>::computeDeoptOrUnreachablePaths(
const Function *F) { … }
bool DOTGraphTraits<DOTFuncInfo *>::isNodeHidden(const BasicBlock *Node,
const DOTFuncInfo *CFGInfo) { … }