LLVM  8.0.1
Classes | Public Member Functions | List of all members
llvm::InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT, ExtraArgTs > Class Template Reference

An analysis over an "outer" IR unit that provides access to an analysis manager over an "inner" IR unit. More...

#include "llvm/IR/PassManager.h"

Inheritance diagram for llvm::InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT, ExtraArgTs >:
Inheritance graph
[legend]
Collaboration diagram for llvm::InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT, ExtraArgTs >:
Collaboration graph
[legend]

Classes

class  Result
 

Public Member Functions

 InnerAnalysisManagerProxy (AnalysisManagerT &InnerAM)
 
Result run (IRUnitT &IR, AnalysisManager< IRUnitT, ExtraArgTs... > &AM, ExtraArgTs...)
 Run the analysis pass and create our proxy result object. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from llvm::AnalysisInfoMixin< InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT > >
static AnalysisKeyID ()
 Returns an opaque, unique ID for this analysis type. More...
 
- Static Public Member Functions inherited from llvm::PassInfoMixin< InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT > >
static StringRef name ()
 Gets the name of the pass we are mixed into. More...
 

Detailed Description

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

An analysis over an "outer" IR unit that provides access to an analysis manager over an "inner" IR unit.

The inner unit must be contained in the outer unit.

For example, InnerAnalysisManagerProxy<FunctionAnalysisManager, Module> is an analysis over Modules (the "outer" unit) that provides access to a Function analysis manager. The FunctionAnalysisManager is the "inner" manager being proxied, and Functions are the "inner" unit. The inner/outer relationship is valid because each Function is contained in one Module.

If you're (transitively) within a pass manager for an IR unit U that contains IR unit V, you should never use an analysis manager over V, except via one of these proxies.

Note that the proxy's result is a move-only RAII object. The validity of the analyses in the inner analysis manager is tied to its lifetime.

Definition at line 1038 of file PassManager.h.

Constructor & Destructor Documentation

◆ InnerAnalysisManagerProxy()

template<typename AnalysisManagerT , typename IRUnitT , typename... ExtraArgTs>
llvm::InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT, ExtraArgTs >::InnerAnalysisManagerProxy ( AnalysisManagerT &  InnerAM)
inlineexplicit

Definition at line 1093 of file PassManager.h.

Member Function Documentation

◆ run()

template<typename AnalysisManagerT , typename IRUnitT , typename... ExtraArgTs>
Result llvm::InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT, ExtraArgTs >::run ( IRUnitT &  IR,
AnalysisManager< IRUnitT, ExtraArgTs... > &  AM,
ExtraArgTs...   
)
inline

Run the analysis pass and create our proxy result object.

This doesn't do any interesting work; it is primarily used to insert our proxy result object into the outer analysis cache so that we can proxy invalidation to the inner analysis manager.

Definition at line 1101 of file PassManager.h.

Referenced by llvm::LoopAnalysisManagerFunctionProxy::Result<>::getManager(), llvm::CGSCCAnalysisManagerModuleProxy::Result<>::getManager(), and llvm::PassManager< Function >::run().


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