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:37

Method Overview

  • public OptimizationRemarkEmitter(const llvm::Function * F, llvm::BlockFrequencyInfo * BFI)
  • public OptimizationRemarkEmitter(const llvm::Function * F)
  • public OptimizationRemarkEmitter(llvm::OptimizationRemarkEmitter && Arg)
  • public bool allowExtraAnalysis(llvm::StringRef PassName) const
  • public void emit(llvm::DiagnosticInfoOptimizationBase & OptDiag)
  • public template <typename T>void emit(T RemarkBuilder, decltype(RemarkBuilder()) * = nullptr)
  • public bool invalidate(llvm::Function & F, const llvm::PreservedAnalyses & PA, FunctionAnalysisManager::Invalidator & Inv)

Methods

OptimizationRemarkEmitter(
    const llvm::Function* F,
    llvm::BlockFrequencyInfo* BFI)

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

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:53

Parameters

const llvm::Function* F

OptimizationRemarkEmitter(
    llvm::OptimizationRemarkEmitter&& Arg)

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

Parameters

llvm::OptimizationRemarkEmitter&& Arg

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:94

Parameters

llvm::StringRef PassName

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:70

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:75

Templates

T

Parameters

T RemarkBuilder
decltype(RemarkBuilder())* = nullptr

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:65

Parameters

llvm::Function& F
const llvm::PreservedAnalyses& PA
FunctionAnalysisManager::Invalidator& Inv