Thanks to visit codestin.com
Credit goes to llvm.org

LLVM 22.0.0git
llvm::detail::PassModel< IRUnitT, PassT, AnalysisManagerT, ExtraArgTs > Struct Template Reference

A template wrapper used to implement the polymorphic API. More...

#include "llvm/IR/PassManagerInternal.h"

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

Public Types

template<typename T>
using has_required_t = decltype(std::declval<T &>().isRequired())

Public Member Functions

 PassModel (PassT Pass)
 PassModel (const PassModel &Arg)
 PassModel (PassModel &&Arg)
PassModeloperator= (PassModel RHS)
PreservedAnalyses run (IRUnitT &IR, AnalysisManagerT &AM, ExtraArgTs... ExtraArgs) override
 The polymorphic API which runs the pass over a given IR entity.
void printPipeline (raw_ostream &OS, function_ref< StringRef(StringRef)> MapClassName2PassName) override
StringRef name () const override
 Polymorphic method to access the name of a pass.
bool isRequired () const override
 Polymorphic method to let a pass optionally exempted from skipping by PassInstrumentation.
Public Member Functions inherited from llvm::detail::PassConcept< IRUnitT, AnalysisManagerT, ExtraArgTs... >
virtual ~PassConcept ()=default

Static Public Member Functions

template<typename T>
static bool passIsRequiredImpl ()

Public Attributes

PassT Pass

Friends

void swap (PassModel &LHS, PassModel &RHS)

Detailed Description

template<typename IRUnitT, typename PassT, typename AnalysisManagerT, typename... ExtraArgTs>
struct llvm::detail::PassModel< IRUnitT, PassT, AnalysisManagerT, ExtraArgTs >

A template wrapper used to implement the polymorphic API.

Can be instantiated for any object which provides a run method accepting an IRUnitT& and an AnalysisManager<IRUnit>&. It requires the pass to be a copyable object.

Definition at line 72 of file PassManagerInternal.h.

Member Typedef Documentation

◆ has_required_t

template<typename IRUnitT, typename PassT, typename AnalysisManagerT, typename... ExtraArgTs>
template<typename T>
using llvm::detail::PassModel< IRUnitT, PassT, AnalysisManagerT, ExtraArgTs >::has_required_t = decltype(std::declval<T &>().isRequired())

Definition at line 103 of file PassManagerInternal.h.

Constructor & Destructor Documentation

◆ PassModel() [1/3]

template<typename IRUnitT, typename PassT, typename AnalysisManagerT, typename... ExtraArgTs>
llvm::detail::PassModel< IRUnitT, PassT, AnalysisManagerT, ExtraArgTs >::PassModel ( PassT Pass)
inlineexplicit

Definition at line 73 of file PassManagerInternal.h.

References llvm::move(), and Pass.

Referenced by operator=(), PassModel(), PassModel(), and swap.

◆ PassModel() [2/3]

template<typename IRUnitT, typename PassT, typename AnalysisManagerT, typename... ExtraArgTs>
llvm::detail::PassModel< IRUnitT, PassT, AnalysisManagerT, ExtraArgTs >::PassModel ( const PassModel< IRUnitT, PassT, AnalysisManagerT, ExtraArgTs > & Arg)
inline

Definition at line 76 of file PassManagerInternal.h.

References Pass, and PassModel().

◆ PassModel() [3/3]

template<typename IRUnitT, typename PassT, typename AnalysisManagerT, typename... ExtraArgTs>
llvm::detail::PassModel< IRUnitT, PassT, AnalysisManagerT, ExtraArgTs >::PassModel ( PassModel< IRUnitT, PassT, AnalysisManagerT, ExtraArgTs > && Arg)
inline

Definition at line 77 of file PassManagerInternal.h.

References llvm::move(), Pass, and PassModel().

Member Function Documentation

◆ isRequired()

template<typename IRUnitT, typename PassT, typename AnalysisManagerT, typename... ExtraArgTs>
bool llvm::detail::PassModel< IRUnitT, PassT, AnalysisManagerT, ExtraArgTs >::isRequired ( ) const
inlineoverridevirtual

Polymorphic method to let a pass optionally exempted from skipping by PassInstrumentation.

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

Implements llvm::detail::PassConcept< IRUnitT, AnalysisManagerT, ExtraArgTs... >.

Definition at line 111 of file PassManagerInternal.h.

References passIsRequiredImpl().

◆ name()

template<typename IRUnitT, typename PassT, typename AnalysisManagerT, typename... ExtraArgTs>
StringRef llvm::detail::PassModel< IRUnitT, PassT, AnalysisManagerT, ExtraArgTs >::name ( ) const
inlineoverridevirtual

Polymorphic method to access the name of a pass.

Implements llvm::detail::PassConcept< IRUnitT, AnalysisManagerT, ExtraArgTs... >.

Definition at line 100 of file PassManagerInternal.h.

◆ operator=()

template<typename IRUnitT, typename PassT, typename AnalysisManagerT, typename... ExtraArgTs>
PassModel & llvm::detail::PassModel< IRUnitT, PassT, AnalysisManagerT, ExtraArgTs >::operator= ( PassModel< IRUnitT, PassT, AnalysisManagerT, ExtraArgTs > RHS)
inline

Definition at line 84 of file PassManagerInternal.h.

References PassModel(), RHS, and swap.

◆ passIsRequiredImpl()

template<typename IRUnitT, typename PassT, typename AnalysisManagerT, typename... ExtraArgTs>
template<typename T>
bool llvm::detail::PassModel< IRUnitT, PassT, AnalysisManagerT, ExtraArgTs >::passIsRequiredImpl ( )
inlinestatic

Definition at line 105 of file PassManagerInternal.h.

Referenced by isRequired().

◆ printPipeline()

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

◆ run()

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

The polymorphic API which runs the pass over a given IR entity.

Note that actual pass object can omit the analysis manager argument if desired. Also that the analysis manager may be null if there is no analysis manager in the pass pipeline.

Implements llvm::detail::PassConcept< IRUnitT, AnalysisManagerT, ExtraArgTs... >.

Definition at line 89 of file PassManagerInternal.h.

References IR, and Pass.

◆ swap

template<typename IRUnitT, typename PassT, typename AnalysisManagerT, typename... ExtraArgTs>
void swap ( PassModel< IRUnitT, PassT, AnalysisManagerT, ExtraArgTs > & LHS,
PassModel< IRUnitT, PassT, AnalysisManagerT, ExtraArgTs > & RHS )
friend

Definition at line 79 of file PassManagerInternal.h.

References LHS, PassModel(), RHS, swap, and std::swap().

Referenced by operator=(), and swap.

Member Data Documentation

◆ Pass

template<typename IRUnitT, typename PassT, typename AnalysisManagerT, typename... ExtraArgTs>
PassT llvm::detail::PassModel< IRUnitT, PassT, AnalysisManagerT, ExtraArgTs >::Pass

Definition at line 113 of file PassManagerInternal.h.

Referenced by PassModel(), PassModel(), PassModel(), printPipeline(), and run().


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