diff --git a/llvm/lib/Analysis/BlockFrequencyInfo.cpp b/llvm/lib/Analysis/BlockFrequencyInfo.cpp index 2064be577f6c..07a2a9229fd5 100644 --- a/llvm/lib/Analysis/BlockFrequencyInfo.cpp +++ b/llvm/lib/Analysis/BlockFrequencyInfo.cpp @@ -55,7 +55,18 @@ cl::opt "function multiplied by this percent.")); // Command line option to turn on CFG dot dump after profile annotation. -cl::opt PGOViewCounts("pgo-view-counts", cl::init(false), cl::Hidden); +cl::opt + PGOViewCounts("pgo-view-counts", cl::init(false), cl::Hidden, + cl::desc("A boolean option to show CFG dag with " + "block profile counts and branch probabilities " + "right after PGO profile annotation step. The " + "profile counts are computed using branch " + "probabilities from the runtime profile data and " + "block frequency propagation algorithm. To view " + "the raw counts from the profile, use option " + "-pgo-view-raw-counts instead. To limit graph " + "display to only one function, use filtering option " + "-view-bfi-func-name.")); namespace llvm { diff --git a/llvm/lib/CodeGen/MachineBlockFrequencyInfo.cpp b/llvm/lib/CodeGen/MachineBlockFrequencyInfo.cpp index 856aadc5120f..c496e3226e5e 100644 --- a/llvm/lib/CodeGen/MachineBlockFrequencyInfo.cpp +++ b/llvm/lib/CodeGen/MachineBlockFrequencyInfo.cpp @@ -59,7 +59,11 @@ cl::opt ViewBlockLayoutWithBFI( "display a graph using the real " "profile count if available."))); +// Command line option to specify the name of the function for CFG dump +// Defined in Analysis/BlockFrequencyInfo.cpp: -view-bfi-func-name= extern cl::opt ViewBlockFreqFuncName; +// Command line option to specify hot frequency threshold. +// Defined in Analysis/BlockFrequencyInfo.cpp: -view-hot-freq-perc= extern cl::opt ViewHotFreqPercent; static GVDAGType getGVDT() { diff --git a/llvm/lib/CodeGen/MachineBlockPlacement.cpp b/llvm/lib/CodeGen/MachineBlockPlacement.cpp index 8128efbaf2d9..024d41fbba8b 100644 --- a/llvm/lib/CodeGen/MachineBlockPlacement.cpp +++ b/llvm/lib/CodeGen/MachineBlockPlacement.cpp @@ -160,7 +160,13 @@ static cl::opt TailDupPlacementPenalty( extern cl::opt StaticLikelyProb; extern cl::opt ProfileLikelyProb; +// Internal option used to control BFI display only after MBP pass. +// Defined in CodeGen/MachineBlockFrequencyInfo.cpp: +// -view-block-layout-with-bfi= extern cl::opt ViewBlockLayoutWithBFI; + +// Command line option to specify the name of the function for CFG dump +// Defined in Analysis/BlockFrequencyInfo.cpp: -view-bfi-func-name= extern cl::opt ViewBlockFreqFuncName; namespace { diff --git a/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp b/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp index 97fe6c89d579..a146eaf04492 100644 --- a/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp +++ b/llvm/lib/Transforms/Instrumentation/PGOInstrumentation.cpp @@ -129,39 +129,53 @@ static cl::opt DoComdatRenaming( // Command line option to enable/disable the warning about missing profile // information. -static cl::opt PGOWarnMissing("pgo-warn-missing-function", - cl::init(false), - cl::Hidden); +static cl::opt + PGOWarnMissing("pgo-warn-missing-function", cl::init(false), cl::Hidden, + cl::desc("Use this option to turn on/off " + "warnings about missing profile data for " + "functions.")); // Command line option to enable/disable the warning about a hash mismatch in // the profile data. -static cl::opt NoPGOWarnMismatch("no-pgo-warn-mismatch", cl::init(false), - cl::Hidden); +static cl::opt + NoPGOWarnMismatch("no-pgo-warn-mismatch", cl::init(false), cl::Hidden, + cl::desc("Use this option to turn off/on " + "warnings about profile cfg mismatch.")); // Command line option to enable/disable the warning about a hash mismatch in // the profile data for Comdat functions, which often turns out to be false // positive due to the pre-instrumentation inline. -static cl::opt NoPGOWarnMismatchComdat("no-pgo-warn-mismatch-comdat", - cl::init(true), cl::Hidden); +static cl::opt + NoPGOWarnMismatchComdat("no-pgo-warn-mismatch-comdat", cl::init(true), + cl::Hidden, + cl::desc("The option is used to turn on/off " + "warnings about hash mismatch for comdat " + "functions.")); // Command line option to enable/disable select instruction instrumentation. -static cl::opt PGOInstrSelect("pgo-instr-select", cl::init(true), - cl::Hidden); - -// Command line option to specify the name of the function for CFG dump -static cl::opt - PGOViewFunction("pgo-view-function", cl::Hidden, - cl::desc("The option to specify " - "the name of the function " - "whose CFG will be displayed.")); +static cl::opt + PGOInstrSelect("pgo-instr-select", cl::init(true), cl::Hidden, + cl::desc("Use this option to turn on/off SELECT " + "instruction instrumentation. ")); // Command line option to turn on CFG dot dump of raw profile counts -static cl::opt PGOViewRawCounts("pgo-view-raw-counts", cl::init(false), - cl::Hidden); +static cl::opt + PGOViewRawCounts("pgo-view-raw-counts", cl::init(false), cl::Hidden, + cl::desc("A boolean option to show CFG dag " + "with raw profile counts from " + "profile data. See also option " + "-pgo-view-counts. To limit graph " + "display to only one function, use " + "filtering option -view-bfi-func-name.")); // Command line option to turn on CFG dot dump after profile annotation. +// Defined in Analysis/BlockFrequencyInfo.cpp: -pgo-view-counts extern cl::opt PGOViewCounts; +// Command line option to specify the name of the function for CFG dump +// Defined in Analysis/BlockFrequencyInfo.cpp: -view-bfi-func-name= +extern cl::opt ViewBlockFreqFuncName; + namespace { /// The select instruction visitor plays three roles specified @@ -1223,8 +1237,8 @@ static bool annotateAllFunctions( ColdFunctions.push_back(&F); else if (FreqAttr == PGOUseFunc::FFA_Hot) HotFunctions.push_back(&F); - if (PGOViewCounts && - (PGOViewFunction.empty() || F.getName().equals(PGOViewFunction))) { + if (PGOViewCounts && (ViewBlockFreqFuncName.empty() || + F.getName().equals(ViewBlockFreqFuncName))) { LoopInfo LI{DominatorTree(F)}; std::unique_ptr NewBPI = llvm::make_unique(F, LI); @@ -1233,9 +1247,9 @@ static bool annotateAllFunctions( NewBFI->view(); } - if (PGOViewRawCounts && - (PGOViewFunction.empty() || F.getName().equals(PGOViewFunction))) { - if (PGOViewFunction.empty()) + if (PGOViewRawCounts && (ViewBlockFreqFuncName.empty() || + F.getName().equals(ViewBlockFreqFuncName))) { + if (ViewBlockFreqFuncName.empty()) WriteGraph(&Func, Twine("PGORawCounts_") + Func.getFunc().getName()); else ViewGraph(&Func, Twine("PGORawCounts_") + Func.getFunc().getName());