LLVM 23.0.0git
llvm::detail::PassConcept< IRUnitT, AnalysisManagerT, ExtraArgTs > Class Template Reference

Template for the abstract base class used to dispatch over pass objects. More...

#include "llvm/IR/PassManagerInternal.h"

Inheritance diagram for llvm::detail::PassConcept< IRUnitT, AnalysisManagerT, ExtraArgTs >:
[legend]

Public Member Functions

 ~PassConcept ()
 PassConcept (const PassConcept &)=delete
PassConceptoperator= (const PassConcept &)=delete
PreservedAnalyses run (IRUnitT &IR, AnalysisManagerT &AM, ExtraArgTs... ExtraArgs)
 Run the pass.
void printPipeline (raw_ostream &OS, function_ref< StringRef(StringRef)> MapClassName2PassName)
StringRef name () const
 Get name of a pass.
bool isRequired () const
 Indicate whether a pass can optionally be exempted from skipping by PassInstrumentation.

Protected Member Functions

 PassConcept (StringRef Name, bool IsRequired, DestructorTy Destructor, RunTy Run, PrintPipelineTy PrintPipeline)

Detailed Description

template<typename IRUnitT, typename AnalysisManagerT, typename... ExtraArgTs>
class llvm::detail::PassConcept< IRUnitT, AnalysisManagerT, ExtraArgTs >

Template for the abstract base class used to dispatch over pass objects.

This doesn't use virtual functions to avoid vtables, which cost a fair amount of storage that needs to be relocated in PIC builds and add an extra indirection on dispatch.

Definition at line 42 of file PassManagerInternal.h.

Constructor & Destructor Documentation

◆ PassConcept() [1/2]

template<typename IRUnitT, typename AnalysisManagerT, typename... ExtraArgTs>
llvm::detail::PassConcept< IRUnitT, AnalysisManagerT, ExtraArgTs >::PassConcept ( StringRef Name,
bool IsRequired,
DestructorTy Destructor,
RunTy Run,
PrintPipelineTy PrintPipeline )
inlineprotected

Definition at line 59 of file PassManagerInternal.h.

◆ ~PassConcept()

template<typename IRUnitT, typename AnalysisManagerT, typename... ExtraArgTs>
llvm::detail::PassConcept< IRUnitT, AnalysisManagerT, ExtraArgTs >::~PassConcept ( )
inline

Definition at line 66 of file PassManagerInternal.h.

◆ PassConcept() [2/2]

template<typename IRUnitT, typename AnalysisManagerT, typename... ExtraArgTs>
llvm::detail::PassConcept< IRUnitT, AnalysisManagerT, ExtraArgTs >::PassConcept ( const PassConcept< IRUnitT, AnalysisManagerT, ExtraArgTs > & )
delete

Member Function Documentation

◆ isRequired()

template<typename IRUnitT, typename AnalysisManagerT, typename... ExtraArgTs>
bool llvm::detail::PassConcept< IRUnitT, AnalysisManagerT, ExtraArgTs >::isRequired ( ) const
inline

Indicate whether a pass can optionally be exempted from skipping by PassInstrumentation.

To opt-in, pass should implement static bool isRequired(), or inherit from RequiredPassInfoMixin or OptionalPassInfoMixin. It's no-op to have isRequired always return false since that is the default.

Definition at line 92 of file PassManagerInternal.h.

◆ name()

template<typename IRUnitT, typename AnalysisManagerT, typename... ExtraArgTs>
StringRef llvm::detail::PassConcept< IRUnitT, AnalysisManagerT, ExtraArgTs >::name ( ) const
inline

Get name of a pass.

Definition at line 84 of file PassManagerInternal.h.

◆ operator=()

template<typename IRUnitT, typename AnalysisManagerT, typename... ExtraArgTs>
PassConcept & llvm::detail::PassConcept< IRUnitT, AnalysisManagerT, ExtraArgTs >::operator= ( const PassConcept< IRUnitT, AnalysisManagerT, ExtraArgTs > & )
delete

◆ printPipeline()

template<typename IRUnitT, typename AnalysisManagerT, typename... ExtraArgTs>
void llvm::detail::PassConcept< IRUnitT, AnalysisManagerT, ExtraArgTs >::printPipeline ( raw_ostream & OS,
function_ref< StringRef(StringRef)> MapClassName2PassName )
inline

Definition at line 78 of file PassManagerInternal.h.

◆ run()

template<typename IRUnitT, typename AnalysisManagerT, typename... ExtraArgTs>
PreservedAnalyses llvm::detail::PassConcept< IRUnitT, AnalysisManagerT, ExtraArgTs >::run ( IRUnitT & IR,
AnalysisManagerT & AM,
ExtraArgTs... ExtraArgs )
inline

Run the pass.

Definition at line 73 of file PassManagerInternal.h.


The documentation for this class was generated from the following file: