class InlineAdvisor

Declaration

class InlineAdvisor { /* full declaration omitted */ };

Description

Interface for deciding whether to inline a call site or not.

Declared at: llvm/include/llvm/Analysis/InlineAdvisor.h:163

Member Variables

protected llvm::Module& M
protected llvm::FunctionAnalysisManager& FAM
protected const Optional<llvm::InlineContext> IC
protected const std::string AnnotatedInlinePassName
protected std::unique_ptr< ImportedFunctionsInliningStatistics> ImportedFunctionsStats

Method Overview

  • public InlineAdvisor(llvm::InlineAdvisor &&)
  • protected InlineAdvisor(llvm::Module & M, llvm::FunctionAnalysisManager & FAM, Optional<llvm::InlineContext> IC = NoneType::None)
  • public std::unique_ptr<InlineAdvice> getAdvice(llvm::CallBase & CB, bool MandatoryOnly = false)
  • protected virtual std::unique_ptr<InlineAdvice> getAdviceImpl(llvm::CallBase & CB)
  • public const char * getAnnotatedInlinePassName() const
  • protected llvm::OptimizationRemarkEmitter & getCallerORE(llvm::CallBase & CB)
  • protected virtual std::unique_ptr<InlineAdvice> getMandatoryAdvice(llvm::CallBase & CB, bool Advice)
  • protected static llvm::InlineAdvisor::MandatoryInliningKind getMandatoryKind(llvm::CallBase & CB, llvm::FunctionAnalysisManager & FAM, llvm::OptimizationRemarkEmitter & ORE)
  • public virtual void onPassEntry(LazyCallGraph::SCC * SCC = nullptr)
  • public virtual void onPassExit(LazyCallGraph::SCC * SCC = nullptr)
  • public virtual void print(llvm::raw_ostream & OS) const
  • public virtual ~InlineAdvisor()

Methods

InlineAdvisor(llvm::InlineAdvisor&&)

Declared at: llvm/include/llvm/Analysis/InlineAdvisor.h:165

Parameters

llvm::InlineAdvisor&&

InlineAdvisor(llvm::Module& M,
              llvm::FunctionAnalysisManager& FAM,
              Optional<llvm::InlineContext> IC =
                  NoneType::None)

Declared at: llvm/include/llvm/Analysis/InlineAdvisor.h:202

Parameters

llvm::Module& M
llvm::FunctionAnalysisManager& FAM
Optional<llvm::InlineContext> IC = NoneType::None

std::unique_ptr<InlineAdvice> getAdvice(
    llvm::CallBase& CB,
    bool MandatoryOnly = false)

Description

Get an InlineAdvice containing a recommendation on whether to inline or not. \p CB is assumed to be a direct call. \p FAM is assumed to be up-to-date wrt previous inlining decisions. \p MandatoryOnly indicates only mandatory (always-inline) call sites should be recommended - this allows the InlineAdvisor track such inlininings. Returns: - An InlineAdvice with the inlining recommendation. - Null when no recommendation is made (https://reviews.llvm.org/D110658). TODO: Consider removing the Null return scenario by incorporating the SampleProfile inliner into an InlineAdvisor

Declared at: llvm/include/llvm/Analysis/InlineAdvisor.h:178

Parameters

llvm::CallBase& CB
bool MandatoryOnly = false

virtual std::unique_ptr<InlineAdvice>
getAdviceImpl(llvm::CallBase& CB)

Declared at: llvm/include/llvm/Analysis/InlineAdvisor.h:204

Parameters

llvm::CallBase& CB

const char* getAnnotatedInlinePassName() const

Description

NOTE pass name is annotated only when inline advisor constructor provides InlineContext.

Declared at: llvm/include/llvm/Analysis/InlineAdvisor.h:197

llvm::OptimizationRemarkEmitter& getCallerORE(
    llvm::CallBase& CB)

Declared at: llvm/include/llvm/Analysis/InlineAdvisor.h:220

Parameters

llvm::CallBase& CB

virtual std::unique_ptr<InlineAdvice>
getMandatoryAdvice(llvm::CallBase& CB,
                   bool Advice)

Declared at: llvm/include/llvm/Analysis/InlineAdvisor.h:205

Parameters

llvm::CallBase& CB
bool Advice

static llvm::InlineAdvisor::MandatoryInliningKind
getMandatoryKind(
    llvm::CallBase& CB,
    llvm::FunctionAnalysisManager& FAM,
    llvm::OptimizationRemarkEmitter& ORE)

Declared at: llvm/include/llvm/Analysis/InlineAdvisor.h:216

Parameters

llvm::CallBase& CB
llvm::FunctionAnalysisManager& FAM
llvm::OptimizationRemarkEmitter& ORE

virtual void onPassEntry(
    LazyCallGraph::SCC* SCC = nullptr)

Description

This must be called when the Inliner pass is entered, to allow the InlineAdvisor update internal state, as result of function passes run between Inliner pass runs (for the same module).

Declared at: llvm/include/llvm/Analysis/InlineAdvisor.h:184

Parameters

LazyCallGraph::SCC* SCC = nullptr

virtual void onPassExit(
    LazyCallGraph::SCC* SCC = nullptr)

Description

This must be called when the Inliner pass is exited, as function passes may be run subsequently. This allows an implementation of InlineAdvisor to prepare for a partial update, based on the optional SCC.

Declared at: llvm/include/llvm/Analysis/InlineAdvisor.h:189

Parameters

LazyCallGraph::SCC* SCC = nullptr

virtual void print(llvm::raw_ostream& OS) const

Description

Support for printer pass

Declared at: llvm/include/llvm/Analysis/InlineAdvisor.h:192

Parameters

llvm::raw_ostream& OS

virtual ~InlineAdvisor()

Declared at: llvm/include/llvm/Analysis/InlineAdvisor.h:166