class OptimizationRemarkEmitter
Declaration
class OptimizationRemarkEmitter { /* full declaration omitted */ };
Description
The optimization diagnostic interface. It allows reporting when optimizations are performed and when they are not along with the reasons for it. Hotness information of the corresponding code region can be included in the remark if DiagnosticsHotnessRequested is enabled in the LLVM context.
Declared at: llvm/include/llvm/Analysis/OptimizationRemarkEmitter.h:33
Member Variables
- private const llvm::Function* F
- private llvm::BlockFrequencyInfo* BFI
- private std::unique_ptr<BlockFrequencyInfo> OwnedBFI
- If we generate BFI on demand, we need to free it when ORE is freed.
Method Overview
- public OptimizationRemarkEmitter(const llvm::Function * F, llvm::BlockFrequencyInfo * BFI)
- public OptimizationRemarkEmitter(const llvm::Function * F)
- public OptimizationRemarkEmitter(llvm::OptimizationRemarkEmitter && Arg)
- private OptimizationRemarkEmitter(const llvm::OptimizationRemarkEmitter &)
- public bool allowExtraAnalysis(llvm::StringRef PassName) const
- public static bool allowExtraAnalysis(const llvm::Function & F, llvm::StringRef PassName)
- public static bool allowExtraAnalysis(llvm::LLVMContext & Ctx, llvm::StringRef PassName)
- private Optional<uint64_t> computeHotness(const llvm::Value * V)
- private void computeHotness(llvm::DiagnosticInfoIROptimization & OptDiag)
- public void emit(llvm::DiagnosticInfoOptimizationBase & OptDiag)
- public template <typename T>void emit(T RemarkBuilder, decltype(RemarkBuilder()) * = nullptr)
- public bool enabled() const
- public bool invalidate(llvm::Function & F, const llvm::PreservedAnalyses & PA, FunctionAnalysisManager::Invalidator & Inv)
- private bool shouldEmitVerbose()
Methods
¶OptimizationRemarkEmitter(
const llvm::Function* F,
llvm::BlockFrequencyInfo* BFI)
OptimizationRemarkEmitter(
const llvm::Function* F,
llvm::BlockFrequencyInfo* BFI)
Declared at: llvm/include/llvm/Analysis/OptimizationRemarkEmitter.h:35
Parameters
- const llvm::Function* F
- llvm::BlockFrequencyInfo* BFI
¶OptimizationRemarkEmitter(const llvm::Function* F)
OptimizationRemarkEmitter(const llvm::Function* F)
Description
This variant can be used to generate ORE on demand (without the analysis pass). Note that this ctor has a very different cost depending on whether F->getContext().getDiagnosticsHotnessRequested() is on or not. If it's off the operation is free. Whereas if DiagnosticsHotnessRequested is on, it is fairly expensive operation since BFI and all its required analyses are computed. This is for example useful for CGSCC passes that can't use function analyses passes in the old PM.
Declared at: llvm/include/llvm/Analysis/OptimizationRemarkEmitter.h:49
Parameters
- const llvm::Function* F
¶OptimizationRemarkEmitter(
llvm::OptimizationRemarkEmitter&& Arg)
OptimizationRemarkEmitter(
llvm::OptimizationRemarkEmitter&& Arg)
Declared at: llvm/include/llvm/Analysis/OptimizationRemarkEmitter.h:51
Parameters
¶OptimizationRemarkEmitter(
const llvm::OptimizationRemarkEmitter&)
OptimizationRemarkEmitter(
const llvm::OptimizationRemarkEmitter&)
Declared at: llvm/include/llvm/Analysis/OptimizationRemarkEmitter.h:128
Parameters
¶bool allowExtraAnalysis(
llvm::StringRef PassName) const
bool allowExtraAnalysis(
llvm::StringRef PassName) const
Description
Whether we allow for extra compile-time budget to perform more analysis to produce fewer false positives. This is useful when reporting missed optimizations. In this case we can use the extra analysis (1) to filter trivial false positives or (2) to provide more context so that non-trivial false positives can be quickly detected by the user.
Declared at: llvm/include/llvm/Analysis/OptimizationRemarkEmitter.h:98
Parameters
- llvm::StringRef PassName
¶static bool allowExtraAnalysis(
const llvm::Function& F,
llvm::StringRef PassName)
static bool allowExtraAnalysis(
const llvm::Function& F,
llvm::StringRef PassName)
Declared at: llvm/include/llvm/Analysis/OptimizationRemarkEmitter.h:101
Parameters
- const llvm::Function& F
- llvm::StringRef PassName
¶static bool allowExtraAnalysis(
llvm::LLVMContext& Ctx,
llvm::StringRef PassName)
static bool allowExtraAnalysis(
llvm::LLVMContext& Ctx,
llvm::StringRef PassName)
Declared at: llvm/include/llvm/Analysis/OptimizationRemarkEmitter.h:104
Parameters
- llvm::LLVMContext& Ctx
- llvm::StringRef PassName
¶Optional<uint64_t> computeHotness(
const llvm::Value* V)
Optional<uint64_t> computeHotness(
const llvm::Value* V)
Description
Compute hotness from IR value (currently assumed to be a block) if PGO is available.
Declared at: llvm/include/llvm/Analysis/OptimizationRemarkEmitter.h:119
Parameters
- const llvm::Value* V
¶void computeHotness(
llvm::DiagnosticInfoIROptimization& OptDiag)
void computeHotness(
llvm::DiagnosticInfoIROptimization& OptDiag)
Description
Similar but use value from \p OptDiag and update hotness there.
Declared at: llvm/include/llvm/Analysis/OptimizationRemarkEmitter.h:122
Parameters
- llvm::DiagnosticInfoIROptimization& OptDiag
¶void emit(
llvm::DiagnosticInfoOptimizationBase& OptDiag)
void emit(
llvm::DiagnosticInfoOptimizationBase& OptDiag)
Description
Output the remark via the diagnostic handler and to the optimization record file.
Declared at: llvm/include/llvm/Analysis/OptimizationRemarkEmitter.h:72
Parameters
- llvm::DiagnosticInfoOptimizationBase& OptDiag
¶template <typename T>
void emit(T RemarkBuilder,
decltype(RemarkBuilder())* = nullptr)
template <typename T>
void emit(T RemarkBuilder,
decltype(RemarkBuilder())* = nullptr)
Description
Take a lambda that returns a remark which will be emitted. Second argument is only used to restrict this to functions.
Declared at: llvm/include/llvm/Analysis/OptimizationRemarkEmitter.h:77
Templates
- T
Parameters
- T RemarkBuilder
- decltype(RemarkBuilder())* = nullptr
¶bool enabled() const
bool enabled() const
Description
Return true iff at least *some* remarks are enabled.
Declared at: llvm/include/llvm/Analysis/OptimizationRemarkEmitter.h:65
¶bool invalidate(
llvm::Function& F,
const llvm::PreservedAnalyses& PA,
FunctionAnalysisManager::Invalidator& Inv)
bool invalidate(
llvm::Function& F,
const llvm::PreservedAnalyses& PA,
FunctionAnalysisManager::Invalidator& Inv)
Description
Handle invalidation events in the new pass manager.
Declared at: llvm/include/llvm/Analysis/OptimizationRemarkEmitter.h:61
Parameters
- llvm::Function& F
- const llvm::PreservedAnalyses& PA
- FunctionAnalysisManager::Invalidator& Inv
¶bool shouldEmitVerbose()
bool shouldEmitVerbose()
Description
Only allow verbose messages if we know we're filtering by hotness (BFI is only set in this case).
Declared at: llvm/include/llvm/Analysis/OptimizationRemarkEmitter.h:126