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

Methods

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)

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)

Declared at: llvm/include/llvm/Analysis/OptimizationRemarkEmitter.h:51

Parameters

llvm::OptimizationRemarkEmitter&& Arg

OptimizationRemarkEmitter(
    const llvm::OptimizationRemarkEmitter&)

Declared at: llvm/include/llvm/Analysis/OptimizationRemarkEmitter.h:128

Parameters

const llvm::OptimizationRemarkEmitter&

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)

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)

Declared at: llvm/include/llvm/Analysis/OptimizationRemarkEmitter.h:104

Parameters

llvm::LLVMContext& Ctx
llvm::StringRef PassName

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)

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)

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)

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

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)

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()

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