|
| STATISTIC (FunctionClonesAnalysis, "Number of function clones created during whole program analysis") |
|
| STATISTIC (FunctionClonesThinBackend, "Number of function clones created during ThinLTO backend") |
|
| STATISTIC (FunctionsClonedThinBackend, "Number of functions that had clones created during ThinLTO backend") |
|
| STATISTIC (AllocTypeNotCold, "Number of not cold static allocations (possibly " "cloned) during whole program analysis") |
|
| STATISTIC (AllocTypeCold, "Number of cold static allocations (possibly cloned) " "during whole program analysis") |
|
| STATISTIC (AllocTypeNotColdThinBackend, "Number of not cold static allocations (possibly cloned) during " "ThinLTO backend") |
|
| STATISTIC (AllocTypeColdThinBackend, "Number of cold static allocations " "(possibly cloned) during ThinLTO backend") |
|
| STATISTIC (OrigAllocsThinBackend, "Number of original (not cloned) allocations with memprof profiles " "during ThinLTO backend") |
|
| STATISTIC (AllocVersionsThinBackend, "Number of allocation versions (including clones) during ThinLTO backend") |
|
| STATISTIC (MaxAllocVersionsThinBackend, "Maximum number of allocation versions created for an original " "allocation during ThinLTO backend") |
|
| STATISTIC (UnclonableAllocsThinBackend, "Number of unclonable ambigous allocations during ThinLTO backend") |
|
| STATISTIC (RemovedEdgesWithMismatchedCallees, "Number of edges removed due to mismatched callees (profiled vs IR)") |
|
| STATISTIC (FoundProfiledCalleeCount, "Number of profiled callees found via tail calls") |
|
| STATISTIC (FoundProfiledCalleeDepth, "Aggregate depth of profiled callees found via tail calls") |
|
| STATISTIC (FoundProfiledCalleeMaxDepth, "Maximum depth of profiled callees found via tail calls") |
|
| STATISTIC (FoundProfiledCalleeNonUniquelyCount, "Number of profiled callees found via multiple tail call chains") |
|
| STATISTIC (DeferredBackedges, "Number of backedges with deferred cloning") |
|
| STATISTIC (NewMergedNodes, "Number of new nodes created during merging") |
|
| STATISTIC (NonNewMergedNodes, "Number of non new nodes used during merging") |
|
| STATISTIC (MissingAllocForContextId, "Number of missing alloc nodes for context ids") |
|
| STATISTIC (SkippedCallsCloning, "Number of calls skipped during cloning due to unexpected operand") |
|
| STATISTIC (MismatchedCloneAssignments, "Number of callsites assigned to call multiple non-matching clones") |
|
| STATISTIC (TotalMergeInvokes, "Number of merge invocations for nodes") |
|
| STATISTIC (TotalMergeIters, "Number of merge iterations for nodes") |
|
| STATISTIC (MaxMergeIters, "Max merge iterations for nodes") |
|
cl::opt< bool > | llvm::EnableMemProfContextDisambiguation ("enable-memprof-context-disambiguation", cl::init(false), cl::Hidden, cl::ZeroOrMore, cl::desc("Enable MemProf context disambiguation")) |
|
cl::opt< bool > | llvm::SupportsHotColdNew ("supports-hot-cold-new", cl::init(false), cl::Hidden, cl::desc("Linking with hot/cold operator new interfaces")) |
|
static std::string | getAllocTypeString (uint8_t AllocTypes) |
|
template<typename DerivedCCG , typename FuncTy , typename CallTy > |
static void | checkEdge (const std::shared_ptr< ContextEdge< DerivedCCG, FuncTy, CallTy > > &Edge) |
|
template<typename DerivedCCG , typename FuncTy , typename CallTy > |
static void | checkNode (const ContextNode< DerivedCCG, FuncTy, CallTy > *Node, bool CheckEdges=true) |
|
static std::string | getMemProfFuncName (Twine Base, unsigned CloneNo) |
|
static bool | isMemProfClone (const Function &F) |
|
static unsigned | getMemProfCloneNum (const Function &F) |
|
bool | checkColdOrNotCold (uint8_t AllocType) |
|
static void | updateSubprogramLinkageName (Function *NewFunc, StringRef Name) |
|
static SmallVector< std::unique_ptr< ValueToValueMapTy >, 4 > | createFunctionClones (Function &F, unsigned NumClones, Module &M, OptimizationRemarkEmitter &ORE, std::map< const Function *, SmallPtrSet< const GlobalAlias *, 1 > > &FuncToAliasMap) |
|
static ValueInfo | findValueInfoForFunc (const Function &F, const Module &M, const ModuleSummaryIndex *ImportSummary, const Function *CallingFunc=nullptr) |
|
static void | checkAllocContextIds (const AllocInfo &AllocNode, const MDNode *MemProfMD, const CallStack< MDNode, MDNode::op_iterator > &CallsiteContext, const ModuleSummaryIndex *ImportSummary) |
|
|
static cl::opt< std::string > | DotFilePathPrefix ("memprof-dot-file-path-prefix", cl::init(""), cl::Hidden, cl::value_desc("filename"), cl::desc("Specify the path prefix of the MemProf dot files.")) |
|
static cl::opt< bool > | ExportToDot ("memprof-export-to-dot", cl::init(false), cl::Hidden, cl::desc("Export graph to dot files.")) |
|
static cl::opt< bool > | DoMergeIteration ("memprof-merge-iteration", cl::init(true), cl::Hidden, cl::desc("Iteratively apply merging on a node to catch new callers")) |
|
static cl::opt< DotScope > | DotGraphScope ("memprof-dot-scope", cl::desc("Scope of graph to export to dot"), cl::Hidden, cl::init(DotScope::All), cl::values(clEnumValN(DotScope::All, "all", "Export full callsite graph"), clEnumValN(DotScope::Alloc, "alloc", "Export only nodes with contexts feeding given " "-memprof-dot-alloc-id"), clEnumValN(DotScope::Context, "context", "Export only nodes with given -memprof-dot-context-id"))) |
|
static cl::opt< unsigned > | AllocIdForDot ("memprof-dot-alloc-id", cl::init(0), cl::Hidden, cl::desc("Id of alloc to export if -memprof-dot-scope=alloc " "or to highlight if -memprof-dot-scope=all")) |
|
static cl::opt< unsigned > | ContextIdForDot ("memprof-dot-context-id", cl::init(0), cl::Hidden, cl::desc("Id of context to export if -memprof-dot-scope=context or to " "highlight otherwise")) |
|
static cl::opt< bool > | DumpCCG ("memprof-dump-ccg", cl::init(false), cl::Hidden, cl::desc("Dump CallingContextGraph to stdout after each stage.")) |
|
static cl::opt< bool > | VerifyCCG ("memprof-verify-ccg", cl::init(false), cl::Hidden, cl::desc("Perform verification checks on CallingContextGraph.")) |
|
static cl::opt< bool > | VerifyNodes ("memprof-verify-nodes", cl::init(false), cl::Hidden, cl::desc("Perform frequent verification checks on nodes.")) |
|
static cl::opt< std::string > | MemProfImportSummary ("memprof-import-summary", cl::desc("Import summary to use for testing the ThinLTO backend via opt"), cl::Hidden) |
|
static cl::opt< unsigned > | TailCallSearchDepth ("memprof-tail-call-search-depth", cl::init(5), cl::Hidden, cl::desc("Max depth to recursively search for missing " "frames through tail calls.")) |
|
static cl::opt< bool > | AllowRecursiveCallsites ("memprof-allow-recursive-callsites", cl::init(true), cl::Hidden, cl::desc("Allow cloning of callsites involved in recursive cycles")) |
|
static cl::opt< bool > | CloneRecursiveContexts ("memprof-clone-recursive-contexts", cl::init(true), cl::Hidden, cl::desc("Allow cloning of contexts through recursive cycles")) |
|
static cl::opt< bool > | MergeClones ("memprof-merge-clones", cl::init(true), cl::Hidden, cl::desc("Merge clones before assigning functions")) |
|
static cl::opt< bool > | AllowRecursiveContexts ("memprof-allow-recursive-contexts", cl::init(true), cl::Hidden, cl::desc("Allow cloning of contexts having recursive cycles")) |
|
static cl::opt< unsigned > | MemProfICPNoInlineThreshold ("memprof-icp-noinline-threshold", cl::init(2), cl::Hidden, cl::desc("Minimum absolute count for promoted target to be inlinable")) |
|
static cl::opt< bool > | llvm::MemProfRequireDefinitionForPromotion ("memprof-require-definition-for-promotion", cl::init(false), cl::Hidden, cl::desc("Require target function definition when promoting indirect calls")) |
|
cl::opt< bool > | MemProfReportHintedSizes |
|
cl::opt< unsigned > | MinClonedColdBytePercent |
|
static const std::string | MemProfCloneSuffix = ".memprof." |
|