diff --git a/llvm/include/llvm/IR/Function.h b/llvm/include/llvm/IR/Function.h index 43bf36d6f1eec..e7afcbd31420c 100644 --- a/llvm/include/llvm/IR/Function.h +++ b/llvm/include/llvm/IR/Function.h @@ -942,9 +942,14 @@ class LLVM_ABI Function : public GlobalObject, public ilist_node { /// void viewCFG() const; + /// viewCFG - This function is meant for use from the debugger. It works just + /// like viewCFG(), but generates the dot file with the given file name. + void viewCFG(const char *OutputFileName) const; + /// Extended form to print edge weights. void viewCFG(bool ViewCFGOnly, const BlockFrequencyInfo *BFI, - const BranchProbabilityInfo *BPI) const; + const BranchProbabilityInfo *BPI, + const char *OutputFileName = nullptr) const; /// viewCFGOnly - This function is meant for use from the debugger. It works /// just like viewCFG, but it does not include the contents of basic blocks @@ -953,6 +958,10 @@ class LLVM_ABI Function : public GlobalObject, public ilist_node { /// void viewCFGOnly() const; + /// viewCFG - This function is meant for use from the debugger. It works just + /// like viewCFGOnly(), but generates the dot file with the given file name. + void viewCFGOnly(const char *OutputFileName) const; + /// Extended form to print edge weights. void viewCFGOnly(const BlockFrequencyInfo *BFI, const BranchProbabilityInfo *BPI) const; diff --git a/llvm/lib/Analysis/CFGPrinter.cpp b/llvm/lib/Analysis/CFGPrinter.cpp index 67a15197058b7..af18fb6626e3b 100644 --- a/llvm/lib/Analysis/CFGPrinter.cpp +++ b/llvm/lib/Analysis/CFGPrinter.cpp @@ -136,12 +136,18 @@ PreservedAnalyses CFGOnlyPrinterPass::run(Function &F, /// void Function::viewCFG() const { viewCFG(false, nullptr, nullptr); } +void Function::viewCFG(const char *OutputFileName) const { + viewCFG(false, nullptr, nullptr, OutputFileName); +} + void Function::viewCFG(bool ViewCFGOnly, const BlockFrequencyInfo *BFI, - const BranchProbabilityInfo *BPI) const { + const BranchProbabilityInfo *BPI, + const char *OutputFileName) const { if (!CFGFuncName.empty() && !getName().contains(CFGFuncName)) return; DOTFuncInfo CFGInfo(this, BFI, BPI, BFI ? getMaxFreq(*this, BFI) : 0); - ViewGraph(&CFGInfo, "cfg" + getName(), ViewCFGOnly); + ViewGraph(&CFGInfo, OutputFileName ? OutputFileName : "cfg" + getName(), + ViewCFGOnly); } /// viewCFGOnly - This function is meant for use from the debugger. It works @@ -151,6 +157,10 @@ void Function::viewCFG(bool ViewCFGOnly, const BlockFrequencyInfo *BFI, /// void Function::viewCFGOnly() const { viewCFGOnly(nullptr, nullptr); } +void Function::viewCFGOnly(const char *OutputFileName) const { + viewCFG(true, nullptr, nullptr, OutputFileName); +} + void Function::viewCFGOnly(const BlockFrequencyInfo *BFI, const BranchProbabilityInfo *BPI) const { viewCFG(true, BFI, BPI);