MLIR  14.0.0git
Classes | Public Member Functions | Friends | List of all members
mlir::LLVM::ModuleTranslation Class Reference

Implementation class for module translation. More...

#include "mlir/Target/LLVMIR/ModuleTranslation.h"

Classes

struct  SaveStack
 RAII object calling stackPush/stackPop on construction/destruction. More...
 
class  StackFrame
 Common CRTP base class for ModuleTranslation stack frames. More...
 
class  StackFrameBase
 Concrete CRTP base class for ModuleTranslation stack frames. More...
 

Public Member Functions

void mapFunction (StringRef name, llvm::Function *func)
 Stores the mapping between a function name and its LLVM IR representation. More...
 
llvm::Function * lookupFunction (StringRef name) const
 Finds an LLVM IR function by its name. More...
 
void mapValue (Value mlir, llvm::Value *llvm)
 Stores the mapping between an MLIR value and its LLVM IR counterpart. More...
 
llvm::Value *& mapValue (Value value)
 Provides write-once access to store the LLVM IR value corresponding to the given MLIR value. More...
 
llvm::Value * lookupValue (Value value) const
 Finds an LLVM IR value corresponding to the given MLIR value. More...
 
SmallVector< llvm::Value * > lookupValues (ValueRange values)
 Looks up remapped a list of remapped values. More...
 
void mapBlock (Block *mlir, llvm::BasicBlock *llvm)
 Stores the mapping between an MLIR block and LLVM IR basic block. More...
 
llvm::BasicBlock * lookupBlock (Block *block) const
 Finds an LLVM IR basic block that corresponds to the given MLIR block. More...
 
void mapBranch (Operation *mlir, llvm::Instruction *llvm)
 Stores the mapping between an MLIR operation with successors and a corresponding LLVM IR instruction. More...
 
llvm::Instruction * lookupBranch (Operation *op) const
 Finds an LLVM IR instruction that corresponds to the given MLIR operation with successors. More...
 
void forgetMapping (Region &region)
 Removes the mapping for blocks contained in the region and values defined in these blocks. More...
 
llvm::MDNode * getAccessGroup (Operation &opInst, SymbolRefAttr accessGroupRef) const
 Returns the LLVM metadata corresponding to a reference to an mlir LLVM dialect access group operation. More...
 
llvm::MDNode * getAliasScope (Operation &opInst, SymbolRefAttr aliasScopeRef) const
 Returns the LLVM metadata corresponding to a reference to an mlir LLVM dialect alias scope operation. More...
 
llvm::MDNode * lookupLoopOptionsMetadata (Attribute options) const
 Returns the LLVM metadata corresponding to a llvm loop's codegen options attribute. More...
 
void mapLoopOptionsMetadata (Attribute options, llvm::MDNode *metadata)
 
void setAccessGroupsMetadata (Operation *op, llvm::Instruction *inst)
 
void setAliasScopeMetadata (Operation *op, llvm::Instruction *inst)
 
llvm::Type * convertType (Type type)
 Converts the type from MLIR LLVM dialect to LLVM. More...
 
MLIRContextgetContext ()
 Returns the MLIR context of the module being translated. More...
 
llvm::LLVMContext & getLLVMContext () const
 Returns the LLVM context in which the IR is being constructed. More...
 
llvm::GlobalValue * lookupGlobal (Operation *op)
 Finds an LLVM IR global value that corresponds to the given MLIR operation defining a global value. More...
 
llvm::OpenMPIRBuilder * getOpenMPBuilder ()
 Returns the OpenMP IR builder associated with the LLVM IR module being constructed. More...
 
const llvm::DILocation * translateLoc (Location loc, llvm::DILocalScope *scope)
 Translates the given location. More...
 
LogicalResult convertBlock (Block &bb, bool ignoreArguments, llvm::IRBuilderBase &builder)
 Translates the contents of the given block to LLVM IR using this translator. More...
 
llvm::NamedMDNode * getOrInsertNamedModuleMetadata (StringRef name)
 Gets the named metadata in the LLVM IR module being constructed, creating it if it does not exist. More...
 
template<typename T , typename... Args>
void stackPush (Args &&...args)
 Creates a stack frame of type T on ModuleTranslation stack. More...
 
void stackPop ()
 Pops the last element from the ModuleTranslation stack. More...
 
template<typename T >
WalkResult stackWalk (llvm::function_ref< WalkResult(const T &)> callback) const
 Calls callback for every ModuleTranslation stack frame of type T starting from the top of the stack. More...
 

Friends

std::unique_ptr< llvm::Module > mlir::translateModuleToLLVMIR (Operation *, llvm::LLVMContext &, StringRef)
 

Detailed Description

Implementation class for module translation.

Holds a reference to the module being translated, and the mappings between the original and the translated functions, basic blocks and values. It is practically easier to hold these mappings in one class since the conversion of control flow operations needs to look up block and function mappings.

Definition at line 51 of file ModuleTranslation.h.

Member Function Documentation

◆ convertBlock()

LogicalResult ModuleTranslation::convertBlock ( Block bb,
bool  ignoreArguments,
llvm::IRBuilderBase &  builder 
)

Translates the contents of the given block to LLVM IR using this translator.

Convert block to LLVM IR.

The LLVM IR basic block corresponding to the given block is expected to exist in the mapping of this translator. Uses builder to translate the IR, leaving it at the end of the block. If ignoreArguments is set, does not produce PHI nodes for the block arguments. Otherwise, the PHI nodes are constructed for block arguments but are not connected to the predecessors that may not exist yet.

Unless ignoreArguments is set, emit PHI nodes to define values corresponding to the MLIR block arguments. These nodes are not connected to the source basic blocks, which may not exist yet. Uses builder to construct the LLVM IR. Expects the LLVM IR basic block to have been created for bb and included in the block mapping. Inserts new instructions at the end of the block and leaves builder in a state suitable for further insertion into the end of the block.

Definition at line 494 of file ModuleTranslation.cpp.

References mlir::emitError(), mlir::failed(), mlir::failure(), mlir::Block::front(), mlir::Block::getArguments(), mlir::Operation::getLoc(), mlir::Block::getPredecessors(), mlir::LLVM::isCompatibleType(), and mlir::success().

Referenced by convertDataOp(), convertOmpOpRegions(), and inlineConvertOmpRegions().

◆ convertType()

llvm::Type * ModuleTranslation::convertType ( Type  type)

Converts the type from MLIR LLVM dialect to LLVM.

Definition at line 958 of file ModuleTranslation.cpp.

Referenced by convertOmpOpRegions(), convertOmpReductionOp(), convertOmpWsLoop(), and convertOperationImpl().

◆ forgetMapping()

void ModuleTranslation::forgetMapping ( Region region)

Removes the mapping for blocks contained in the region and values defined in these blocks.

Definition at line 324 of file ModuleTranslation.cpp.

References value.

Referenced by convertOmpOpRegions(), and inlineConvertOmpRegions().

◆ getAccessGroup()

llvm::MDNode * ModuleTranslation::getAccessGroup ( Operation opInst,
SymbolRefAttr  accessGroupRef 
) const

Returns the LLVM metadata corresponding to a reference to an mlir LLVM dialect access group operation.

Definition at line 847 of file ModuleTranslation.cpp.

References mlir::Operation::getParentOp(), mlir::SymbolTable::lookupNearestSymbolFrom(), and mlir::success().

Referenced by setLoopMetadata().

◆ getAliasScope()

llvm::MDNode * ModuleTranslation::getAliasScope ( Operation opInst,
SymbolRefAttr  aliasScopeRef 
) const

Returns the LLVM metadata corresponding to a reference to an mlir LLVM dialect alias scope operation.

Definition at line 928 of file ModuleTranslation.cpp.

References mlir::Operation::getParentOp(), and mlir::SymbolTable::lookupNearestSymbolFrom().

◆ getContext()

MLIRContext& mlir::LLVM::ModuleTranslation::getContext ( )
inline

Returns the MLIR context of the module being translated.

Definition at line 153 of file ModuleTranslation.h.

Referenced by convertOperationImpl().

◆ getLLVMContext()

llvm::LLVMContext& mlir::LLVM::ModuleTranslation::getLLVMContext ( ) const
inline

Returns the LLVM context in which the IR is being constructed.

Definition at line 156 of file ModuleTranslation.h.

Referenced by convertOmpCritical(), convertOperationImpl(), mlir::LLVM::detail::getLLVMConstant(), and getShflBflyIntrinsicId().

◆ getOpenMPBuilder()

llvm::OpenMPIRBuilder* mlir::LLVM::ModuleTranslation::getOpenMPBuilder ( )
inline

◆ getOrInsertNamedModuleMetadata()

llvm::NamedMDNode * ModuleTranslation::getOrInsertNamedModuleMetadata ( StringRef  name)

Gets the named metadata in the LLVM IR module being constructed, creating it if it does not exist.

Definition at line 977 of file ModuleTranslation.cpp.

Referenced by getShflBflyIntrinsicId().

◆ lookupBlock()

llvm::BasicBlock* mlir::LLVM::ModuleTranslation::lookupBlock ( Block block) const
inline

Finds an LLVM IR basic block that corresponds to the given MLIR block.

Definition at line 97 of file ModuleTranslation.h.

Referenced by mlir::LLVM::detail::connectPHINodes(), convertDataOp(), convertOmpOpRegions(), and convertOperationImpl().

◆ lookupBranch()

llvm::Instruction* mlir::LLVM::ModuleTranslation::lookupBranch ( Operation op) const
inline

Finds an LLVM IR instruction that corresponds to the given MLIR operation with successors.

Definition at line 112 of file ModuleTranslation.h.

Referenced by mlir::LLVM::detail::connectPHINodes().

◆ lookupFunction()

llvm::Function* mlir::LLVM::ModuleTranslation::lookupFunction ( StringRef  name) const
inline

◆ lookupGlobal()

llvm::GlobalValue* mlir::LLVM::ModuleTranslation::lookupGlobal ( Operation op)
inline

Finds an LLVM IR global value that corresponds to the given MLIR operation defining a global value.

Definition at line 160 of file ModuleTranslation.h.

Referenced by convertOperationImpl().

◆ lookupLoopOptionsMetadata()

llvm::MDNode* mlir::LLVM::ModuleTranslation::lookupLoopOptionsMetadata ( Attribute  options) const
inline

Returns the LLVM metadata corresponding to a llvm loop's codegen options attribute.

Definition at line 132 of file ModuleTranslation.h.

Referenced by setLoopMetadata().

◆ lookupValue()

llvm::Value* mlir::LLVM::ModuleTranslation::lookupValue ( Value  value) const
inline

◆ lookupValues()

SmallVector< llvm::Value * > ModuleTranslation::lookupValues ( ValueRange  values)

Looks up remapped a list of remapped values.

A helper to look up remapped operands in the value remapping table.

Definition at line 963 of file ModuleTranslation.cpp.

Referenced by convertOmpOrdered(), convertOperationImpl(), and inlineConvertOmpRegions().

◆ mapBlock()

void mlir::LLVM::ModuleTranslation::mapBlock ( Block mlir,
llvm::BasicBlock *  llvm 
)
inline

Stores the mapping between an MLIR block and LLVM IR basic block.

Definition at line 90 of file ModuleTranslation.h.

Referenced by convertDataOp(), convertOmpOpRegions(), and inlineConvertOmpRegions().

◆ mapBranch()

void mlir::LLVM::ModuleTranslation::mapBranch ( Operation mlir,
llvm::Instruction *  llvm 
)
inline

Stores the mapping between an MLIR operation with successors and a corresponding LLVM IR instruction.

Definition at line 103 of file ModuleTranslation.h.

Referenced by convertOperationImpl().

◆ mapFunction()

void mlir::LLVM::ModuleTranslation::mapFunction ( StringRef  name,
llvm::Function *  func 
)
inline

Stores the mapping between a function name and its LLVM IR representation.

Definition at line 57 of file ModuleTranslation.h.

◆ mapLoopOptionsMetadata()

void mlir::LLVM::ModuleTranslation::mapLoopOptionsMetadata ( Attribute  options,
llvm::MDNode *  metadata 
)
inline

Definition at line 136 of file ModuleTranslation.h.

Referenced by setLoopMetadata().

◆ mapValue() [1/2]

void mlir::LLVM::ModuleTranslation::mapValue ( Value  mlir,
llvm::Value *  llvm 
)
inline

Stores the mapping between an MLIR value and its LLVM IR counterpart.

Definition at line 70 of file ModuleTranslation.h.

References mapValue().

Referenced by convertOmpReductionOp(), convertOmpWsLoop(), convertOperationImpl(), and mapValue().

◆ mapValue() [2/2]

llvm::Value*& mlir::LLVM::ModuleTranslation::mapValue ( Value  value)
inline

Provides write-once access to store the LLVM IR value corresponding to the given MLIR value.

Definition at line 74 of file ModuleTranslation.h.

References value.

◆ setAccessGroupsMetadata()

void ModuleTranslation::setAccessGroupsMetadata ( Operation op,
llvm::Instruction *  inst 
)

◆ setAliasScopeMetadata()

void ModuleTranslation::setAliasScopeMetadata ( Operation op,
llvm::Instruction *  inst 
)

Definition at line 939 of file ModuleTranslation.cpp.

References mlir::Operation::getAttrOfType().

◆ stackPop()

void mlir::LLVM::ModuleTranslation::stackPop ( )
inline

Pops the last element from the ModuleTranslation stack.

Definition at line 232 of file ModuleTranslation.h.

◆ stackPush()

template<typename T , typename... Args>
void mlir::LLVM::ModuleTranslation::stackPush ( Args &&...  args)
inline

Creates a stack frame of type T on ModuleTranslation stack.

T must be derived from StackFrameBase<T> and constructible from the provided arguments. Doing this before entering the region of the op being translated makes the frame available when translating ops within that region.

Definition at line 224 of file ModuleTranslation.h.

References value.

◆ stackWalk()

template<typename T >
WalkResult mlir::LLVM::ModuleTranslation::stackWalk ( llvm::function_ref< WalkResult(const T &)>  callback) const
inline

Calls callback for every ModuleTranslation stack frame of type T starting from the top of the stack.

Definition at line 238 of file ModuleTranslation.h.

References value, and mlir::WalkResult::wasInterrupted().

Referenced by convertOmpReductionOp(), and findAllocaInsertPoint().

◆ translateLoc()

const llvm::DILocation * ModuleTranslation::translateLoc ( Location  loc,
llvm::DILocalScope *  scope 
)

Translates the given location.

Definition at line 972 of file ModuleTranslation.cpp.

Referenced by convertOmpWsLoop().

Friends And Related Function Documentation

◆ mlir::translateModuleToLLVMIR

std::unique_ptr<llvm::Module> mlir::translateModuleToLLVMIR ( Operation ,
llvm::LLVMContext &  ,
StringRef   
)
friend

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