MLIR
20.0.0git
|
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 | mapCall (Operation *mlir, llvm::CallInst *llvm) |
Stores a mapping between an MLIR call operation and a corresponding LLVM call instruction. More... | |
llvm::CallInst * | lookupCall (Operation *op) const |
Finds an LLVM call instruction that corresponds to the given MLIR call operation. More... | |
void | forgetMapping (Region ®ion) |
Removes the mapping for blocks contained in the region and values defined in these blocks. More... | |
llvm::MDNode * | getOrCreateAliasScope (AliasScopeAttr aliasScopeAttr) |
Returns the LLVM metadata corresponding to a mlir LLVM dialect alias scope attribute. More... | |
llvm::MDNode * | getOrCreateAliasScopes (ArrayRef< AliasScopeAttr > aliasScopeAttrs) |
Returns the LLVM metadata corresponding to an array of mlir LLVM dialect alias scope attributes. More... | |
void | setAccessGroupsMetadata (AccessGroupOpInterface op, llvm::Instruction *inst) |
void | setAliasScopeMetadata (AliasAnalysisOpInterface op, llvm::Instruction *inst) |
void | setTBAAMetadata (AliasAnalysisOpInterface op, llvm::Instruction *inst) |
Sets LLVM TBAA metadata for memory operations that have TBAA attributes. More... | |
void | setBranchWeightsMetadata (BranchWeightOpInterface op) |
Sets LLVM profiling metadata for operations that have branch weights. More... | |
void | setLoopMetadata (Operation *op, llvm::Instruction *inst) |
Sets LLVM loop metadata for branch operations that have a loop annotation attribute. More... | |
llvm::Type * | convertType (Type type) |
Converts the type from MLIR LLVM dialect to LLVM. More... | |
MLIRContext & | getContext () |
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... | |
llvm::Module * | getLLVMModule () |
Returns the LLVM module in which the IR is being constructed. More... | |
llvm::DILocation * | translateLoc (Location loc, llvm::DILocalScope *scope) |
Translates the given location. More... | |
llvm::DIExpression * | translateExpression (LLVM::DIExpressionAttr attr) |
Translates the given LLVM DWARF expression metadata. More... | |
llvm::DIGlobalVariableExpression * | translateGlobalVariableExpression (LLVM::DIGlobalVariableExpressionAttr attr) |
Translates the given LLVM global variable expression metadata. More... | |
llvm::Metadata * | translateDebugInfo (LLVM::DINodeAttr attr) |
Translates the given LLVM debug info metadata. More... | |
llvm::RoundingMode | translateRoundingMode (LLVM::RoundingMode rounding) |
Translates the given LLVM rounding mode metadata. More... | |
llvm::fp::ExceptionBehavior | translateFPExceptionBehavior (LLVM::FPExceptionBehavior exceptionBehavior) |
Translates the given LLVM FP exception behavior metadata. 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... | |
SymbolTableCollection & | symbolTable () |
Friends | |
std::unique_ptr< llvm::Module > | mlir::translateModuleToLLVMIR (Operation *, llvm::LLVMContext &, StringRef, bool) |
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 58 of file ModuleTranslation.h.
|
inline |
Translates the contents of the given block to LLVM IR using this translator.
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.
Definition at line 219 of file ModuleTranslation.h.
Referenced by convertOmpAtomicCapture(), convertOmpAtomicUpdate(), convertOmpOpRegions(), and inlineConvertOmpRegions().
llvm::Type * ModuleTranslation::convertType | ( | Type | type | ) |
Converts the type from MLIR LLVM dialect to LLVM.
Definition at line 1849 of file ModuleTranslation.cpp.
References mlir::LLVM::TypeToLLVMIRTranslator::translateType().
Referenced by allocReductionVars(), collectReductionInfo(), convertFunctionKernelAttributes(), convertOmpAtomicCapture(), convertOmpAtomicRead(), convertOmpAtomicUpdate(), convertOmpAtomicWrite(), convertOmpOpRegions(), convertOmpParallel(), convertOperationImpl(), mlir::LLVM::detail::createIntrinsicCall(), and inlineOmpRegionCleanup().
void ModuleTranslation::forgetMapping | ( | Region & | region | ) |
Removes the mapping for blocks contained in the region and values defined in these blocks.
Definition at line 732 of file ModuleTranslation.cpp.
Referenced by convertOmpOpRegions(), convertOmpParallel(), convertOmpTarget(), inlineConvertOmpRegions(), and inlineOmpRegionCleanup().
|
inline |
Returns the MLIR context of the module being translated.
Definition at line 174 of file ModuleTranslation.h.
References mlir::Operation::getContext().
Referenced by clonePrivatizer(), convertOmpParallel(), convertOperationImpl(), and createVL().
|
inline |
Returns the LLVM context in which the IR is being constructed.
Definition at line 177 of file ModuleTranslation.h.
Referenced by convertOmpCritical(), convertOperationImpl(), mlir::LLVM::detail::getLLVMConstant(), getOrCreateAliasScopes(), and getXlenType().
|
inline |
Returns the LLVM module in which the IR is being constructed.
Definition at line 190 of file ModuleTranslation.h.
Referenced by convertLinkerOptionsOp(), and getRefPtrIfDeclareTarget().
llvm::OpenMPIRBuilder * ModuleTranslation::getOpenMPBuilder | ( | ) |
Returns the OpenMP IR builder associated with the LLVM IR module being constructed.
Definition at line 1862 of file ModuleTranslation.cpp.
Referenced by convertOmpAtomicCapture(), convertOmpAtomicRead(), convertOmpAtomicUpdate(), convertOmpAtomicWrite(), convertOmpCritical(), convertOmpMasked(), convertOmpMaster(), convertOmpOrdered(), convertOmpOrderedRegion(), convertOmpParallel(), convertOmpSimd(), convertOmpSingle(), convertOmpTarget(), convertOmpTaskgroupOp(), convertOmpTaskOp(), convertOmpTaskwaitOp(), convertOmpThreadprivate(), convertOmpWsloop(), genMapInfos(), and getRefPtrIfDeclareTarget().
llvm::MDNode * ModuleTranslation::getOrCreateAliasScope | ( | AliasScopeAttr | aliasScopeAttr | ) |
Returns the LLVM metadata corresponding to a mlir LLVM dialect alias scope attribute.
Creates the metadata node if it has not been converted before.
Definition at line 1673 of file ModuleTranslation.cpp.
References mlir::get().
Referenced by getOrCreateAliasScopes().
llvm::MDNode * ModuleTranslation::getOrCreateAliasScopes | ( | ArrayRef< AliasScopeAttr > | aliasScopeAttrs | ) |
Returns the LLVM metadata corresponding to an array of mlir LLVM dialect alias scope attributes.
Creates the metadata nodes if they have not been converted before.
Definition at line 1707 of file ModuleTranslation.cpp.
References mlir::get(), getLLVMContext(), and getOrCreateAliasScope().
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 1912 of file ModuleTranslation.cpp.
|
inline |
Finds an LLVM IR basic block that corresponds to the given MLIR block.
Definition at line 105 of file ModuleTranslation.h.
Referenced by convertOmpOpRegions(), and convertOperationImpl().
|
inline |
Finds an LLVM IR instruction that corresponds to the given MLIR operation with successors.
Definition at line 120 of file ModuleTranslation.h.
|
inline |
Finds an LLVM call instruction that corresponds to the given MLIR call operation.
Definition at line 134 of file ModuleTranslation.h.
|
inline |
Finds an LLVM IR function by its name.
Definition at line 73 of file ModuleTranslation.h.
Referenced by convertOmpSingle(), convertOmpTarget(), convertOperationImpl(), and mlir::LLVM::detail::getLLVMConstant().
|
inline |
Finds an LLVM IR global value that corresponds to the given MLIR operation defining a global value.
Definition at line 181 of file ModuleTranslation.h.
Referenced by convertOmpThreadprivate(), and convertOperationImpl().
|
inline |
Finds an LLVM IR value corresponding to the given MLIR value.
Definition at line 90 of file ModuleTranslation.h.
Referenced by buildDependData(), calculateBoundsOffset(), collectReductionInfo(), convertOmpAtomicCapture(), convertOmpAtomicRead(), convertOmpAtomicUpdate(), convertOmpAtomicWrite(), convertOmpMasked(), convertOmpOpRegions(), convertOmpParallel(), convertOmpSimd(), convertOmpSingle(), convertOmpTarget(), convertOmpTaskOp(), convertOmpWsloop(), convertOperandBundle(), convertOperationImpl(), getSizeInBytes(), lookupValues(), and mapInitializationArgs().
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 1854 of file ModuleTranslation.cpp.
References lookupValue().
Referenced by convertOmpOrdered(), convertOperationImpl(), mlir::LLVM::detail::createIntrinsicCall(), and inlineConvertOmpRegions().
|
inline |
Stores the mapping between an MLIR block and LLVM IR basic block.
Definition at line 98 of file ModuleTranslation.h.
Referenced by convertOmpAtomicCapture(), convertOmpAtomicUpdate(), convertOmpOpRegions(), and inlineConvertOmpRegions().
|
inline |
Stores the mapping between an MLIR operation with successors and a corresponding LLVM IR instruction.
Definition at line 111 of file ModuleTranslation.h.
Referenced by convertOperationImpl().
|
inline |
Stores a mapping between an MLIR call operation and a corresponding LLVM call instruction.
Definition at line 126 of file ModuleTranslation.h.
Referenced by convertOperationImpl().
|
inline |
Stores the mapping between a function name and its LLVM IR representation.
Definition at line 65 of file ModuleTranslation.h.
|
inline |
Stores the mapping between an MLIR value and its LLVM IR counterpart.
Definition at line 78 of file ModuleTranslation.h.
References mapValue().
Referenced by allocReductionVars(), convertOmpAtomicCapture(), convertOmpAtomicUpdate(), convertOmpParallel(), convertOmpSimd(), convertOmpTarget(), convertOmpThreadprivate(), convertOmpWsloop(), convertOperationImpl(), inlineOmpRegionCleanup(), makeAtomicReductionGen(), makeReductionGen(), mapInitializationArgs(), and mapValue().
|
inline |
Provides write-once access to store the LLVM IR value corresponding to the given MLIR value.
Definition at line 82 of file ModuleTranslation.h.
void ModuleTranslation::setAccessGroupsMetadata | ( | AccessGroupOpInterface | op, |
llvm::Instruction * | inst | ||
) |
Definition at line 1666 of file ModuleTranslation.cpp.
Referenced by convertOperationImpl().
void ModuleTranslation::setAliasScopeMetadata | ( | AliasAnalysisOpInterface | op, |
llvm::Instruction * | inst | ||
) |
Definition at line 1716 of file ModuleTranslation.cpp.
Referenced by convertOperationImpl().
void ModuleTranslation::setBranchWeightsMetadata | ( | BranchWeightOpInterface | op | ) |
Sets LLVM profiling metadata for operations that have branch weights.
Definition at line 1756 of file ModuleTranslation.cpp.
void ModuleTranslation::setLoopMetadata | ( | Operation * | op, |
llvm::Instruction * | inst | ||
) |
Sets LLVM loop metadata for branch operations that have a loop annotation attribute.
Definition at line 1836 of file ModuleTranslation.cpp.
Referenced by convertOperationImpl().
void ModuleTranslation::setTBAAMetadata | ( | AliasAnalysisOpInterface | op, |
llvm::Instruction * | inst | ||
) |
Sets LLVM TBAA metadata for memory operations that have TBAA attributes.
Definition at line 1736 of file ModuleTranslation.cpp.
Referenced by convertOperationImpl().
|
inline |
Pops the last element from the ModuleTranslation stack.
Definition at line 270 of file ModuleTranslation.h.
Referenced by mlir::LLVM::ModuleTranslation::SaveStack< T >::~SaveStack().
|
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 262 of file ModuleTranslation.h.
|
inline |
Calls callback
for every ModuleTranslation stack frame of type T
starting from the top of the stack.
Definition at line 276 of file ModuleTranslation.h.
References mlir::WalkResult::advance(), mlir::WalkResult::skip(), and mlir::WalkResult::wasInterrupted().
Referenced by findAllocaInsertPoint().
|
inline |
Definition at line 305 of file ModuleTranslation.h.
Referenced by convertOmpThreadprivate(), and convertOperationImpl().
llvm::Metadata * ModuleTranslation::translateDebugInfo | ( | LLVM::DINodeAttr | attr | ) |
Translates the given LLVM debug info metadata.
Definition at line 1897 of file ModuleTranslation.cpp.
llvm::DIExpression * ModuleTranslation::translateExpression | ( | LLVM::DIExpressionAttr | attr | ) |
Translates the given LLVM DWARF expression metadata.
Definition at line 1887 of file ModuleTranslation.cpp.
llvm::fp::ExceptionBehavior ModuleTranslation::translateFPExceptionBehavior | ( | LLVM::FPExceptionBehavior | exceptionBehavior | ) |
Translates the given LLVM FP exception behavior metadata.
Definition at line 1906 of file ModuleTranslation.cpp.
llvm::DIGlobalVariableExpression * ModuleTranslation::translateGlobalVariableExpression | ( | LLVM::DIGlobalVariableExpressionAttr | attr | ) |
Translates the given LLVM global variable expression metadata.
Definition at line 1892 of file ModuleTranslation.cpp.
llvm::DILocation * ModuleTranslation::translateLoc | ( | Location | loc, |
llvm::DILocalScope * | scope | ||
) |
Translates the given location.
Definition at line 1881 of file ModuleTranslation.cpp.
llvm::RoundingMode ModuleTranslation::translateRoundingMode | ( | LLVM::RoundingMode | rounding | ) |
Translates the given LLVM rounding mode metadata.
Definition at line 1902 of file ModuleTranslation.cpp.
|
friend |