MLIR
20.0.0git
|
#include "mlir/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.h"
#include "mlir/Analysis/TopologicalSortUtils.h"
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
#include "mlir/Dialect/OpenMP/OpenMPDialect.h"
#include "mlir/Dialect/OpenMP/OpenMPInterfaces.h"
#include "mlir/IR/IRMapping.h"
#include "mlir/IR/Operation.h"
#include "mlir/Support/LLVM.h"
#include "mlir/Target/LLVMIR/Dialect/OpenMPCommon.h"
#include "mlir/Target/LLVMIR/ModuleTranslation.h"
#include "mlir/Transforms/RegionUtils.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/TypeSwitch.h"
#include "llvm/Frontend/OpenMP/OMPConstants.h"
#include "llvm/Frontend/OpenMP/OMPIRBuilder.h"
#include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/ReplaceConstant.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/TargetParser/Triple.h"
#include "llvm/Transforms/Utils/ModuleUtils.h"
#include <any>
#include <cstdint>
#include <iterator>
#include <numeric>
#include <optional>
#include <utility>
Go to the source code of this file.
Classes | |
class | OmpParallelOpConversionManager |
A RAII class that on construction replaces the region arguments of the parallel op (which correspond to private variables) with the actual private variables they correspond to. More... | |
struct | MapInfoData |
Functions | |
static llvm::OpenMPIRBuilder::InsertPointTy | findAllocaInsertPoint (llvm::IRBuilderBase &builder, const LLVM::ModuleTranslation &moduleTranslation) |
Find the insertion point for allocas given the current insertion point for normal operations in the builder. More... | |
static llvm::BasicBlock * | convertOmpOpRegions (Region ®ion, StringRef blockName, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, LogicalResult &bodyGenStatus, SmallVectorImpl< llvm::PHINode * > *continuationBlockPHIs=nullptr) |
Converts the given region that appears within an OpenMP dialect operation to LLVM IR, creating a branch from the sourceBlock to the entry block of the region, and a branch from any block with an successor-less OpenMP terminator to continuationBlock . More... | |
static llvm::omp::ProcBindKind | getProcBindKind (omp::ClauseProcBindKind kind) |
Convert ProcBindKind from MLIR-generated enum to LLVM enum. More... | |
static LogicalResult | convertOmpMasked (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
Converts an OpenMP 'masked' operation into LLVM IR using OpenMPIRBuilder. More... | |
static LogicalResult | convertOmpMaster (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
Converts an OpenMP 'master' operation into LLVM IR using OpenMPIRBuilder. More... | |
static LogicalResult | convertOmpCritical (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
Converts an OpenMP 'critical' operation into LLVM IR using OpenMPIRBuilder. More... | |
template<typename T > | |
static void | collectReductionDecls (T loop, SmallVectorImpl< omp::DeclareReductionOp > &reductions) |
Populates reductions with reduction declarations used in the given loop. More... | |
static LogicalResult | inlineConvertOmpRegions (Region ®ion, StringRef blockName, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, SmallVectorImpl< llvm::Value * > *continuationBlockArgs=nullptr) |
Translates the blocks contained in the given region and appends them to at the current insertion point of builder . More... | |
static OwningReductionGen | makeReductionGen (omp::DeclareReductionOp decl, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
Create an OpenMPIRBuilder-compatible reduction generator for the given reduction declaration. More... | |
static OwningAtomicReductionGen | makeAtomicReductionGen (omp::DeclareReductionOp decl, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
Create an OpenMPIRBuilder-compatible atomic reduction generator for the given reduction declaration. More... | |
static LogicalResult | convertOmpOrdered (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
Converts an OpenMP 'ordered' operation into LLVM IR using OpenMPIRBuilder. More... | |
static LogicalResult | convertOmpOrderedRegion (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
Converts an OpenMP 'ordered_region' operation into LLVM IR using OpenMPIRBuilder. More... | |
template<typename T > | |
static void | allocByValReductionVars (T loop, ArrayRef< BlockArgument > reductionArgs, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, llvm::OpenMPIRBuilder::InsertPointTy &allocaIP, SmallVectorImpl< omp::DeclareReductionOp > &reductionDecls, SmallVectorImpl< llvm::Value * > &privateReductionVariables, DenseMap< Value, llvm::Value * > &reductionVariableMap, llvm::ArrayRef< bool > isByRefs) |
Allocate space for privatized reduction variables. More... | |
template<typename T > | |
static void | mapInitializationArg (T loop, LLVM::ModuleTranslation &moduleTranslation, SmallVectorImpl< omp::DeclareReductionOp > &reductionDecls, unsigned i) |
Map input argument to all reduction initialization regions. More... | |
template<typename T > | |
static void | collectReductionInfo (T loop, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, SmallVectorImpl< omp::DeclareReductionOp > &reductionDecls, SmallVectorImpl< OwningReductionGen > &owningReductionGens, SmallVectorImpl< OwningAtomicReductionGen > &owningAtomicReductionGens, const ArrayRef< llvm::Value * > privateReductionVariables, SmallVectorImpl< llvm::OpenMPIRBuilder::ReductionInfo > &reductionInfos) |
Collect reduction info. More... | |
static LogicalResult | inlineOmpRegionCleanup (llvm::SmallVectorImpl< Region * > &cleanupRegions, llvm::ArrayRef< llvm::Value * > privateVariables, LLVM::ModuleTranslation &moduleTranslation, llvm::IRBuilderBase &builder, StringRef regionName, bool shouldLoadCleanupRegionArg=true) |
handling of DeclareReductionOp's cleanup region More... | |
template<class OP > | |
static LogicalResult | createReductionsAndCleanup (OP op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, llvm::OpenMPIRBuilder::InsertPointTy &allocaIP, SmallVectorImpl< omp::DeclareReductionOp > &reductionDecls, ArrayRef< llvm::Value * > privateReductionVariables, ArrayRef< bool > isByRef) |
static ArrayRef< bool > | getIsByRef (std::optional< ArrayRef< bool >> attr) |
template<typename OP > | |
static LogicalResult | allocAndInitializeReductionVars (OP op, ArrayRef< BlockArgument > reductionArgs, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, llvm::OpenMPIRBuilder::InsertPointTy &allocaIP, SmallVectorImpl< omp::DeclareReductionOp > &reductionDecls, SmallVectorImpl< llvm::Value * > &privateReductionVariables, DenseMap< Value, llvm::Value * > &reductionVariableMap, llvm::ArrayRef< bool > isByRef) |
static LogicalResult | convertOmpSections (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
static LogicalResult | convertOmpSingle (omp::SingleOp &singleOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
Converts an OpenMP single construct into LLVM IR using OpenMPIRBuilder. More... | |
static LogicalResult | convertOmpTeams (omp::TeamsOp op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
static void | buildDependData (std::optional< ArrayAttr > depends, OperandRange dependVars, LLVM::ModuleTranslation &moduleTranslation, SmallVectorImpl< llvm::OpenMPIRBuilder::DependData > &dds) |
static LogicalResult | convertOmpTaskOp (omp::TaskOp taskOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
Converts an OpenMP task construct into LLVM IR using OpenMPIRBuilder. More... | |
static LogicalResult | convertOmpTaskgroupOp (omp::TaskgroupOp tgOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
Converts an OpenMP taskgroup construct into LLVM IR using OpenMPIRBuilder. More... | |
static LogicalResult | convertOmpWsloop (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
Converts an OpenMP workshare loop into LLVM IR using OpenMPIRBuilder. More... | |
static LogicalResult | convertOmpParallel (omp::ParallelOp opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
Converts the OpenMP parallel operation to LLVM IR. More... | |
static llvm::omp::OrderKind | convertOrderKind (std::optional< omp::ClauseOrderKind > o) |
Convert Order attribute to llvm::omp::OrderKind. More... | |
static LogicalResult | convertOmpSimd (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
Converts an OpenMP simd loop into LLVM IR using OpenMPIRBuilder. More... | |
static llvm::AtomicOrdering | convertAtomicOrdering (std::optional< omp::ClauseMemoryOrderKind > ao) |
Convert an Atomic Ordering attribute to llvm::AtomicOrdering. More... | |
static LogicalResult | convertOmpAtomicRead (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
Convert omp.atomic.read operation to LLVM IR. More... | |
static LogicalResult | convertOmpAtomicWrite (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
Converts an omp.atomic.write operation to LLVM IR. More... | |
llvm::AtomicRMWInst::BinOp | convertBinOpToAtomic (Operation &op) |
Converts an LLVM dialect binary operation to the corresponding enum value for atomicrmw supported binary operation. More... | |
static LogicalResult | convertOmpAtomicUpdate (omp::AtomicUpdateOp &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
Converts an OpenMP atomic update operation using OpenMPIRBuilder. More... | |
static LogicalResult | convertOmpAtomicCapture (omp::AtomicCaptureOp atomicCaptureOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
static LogicalResult | convertOmpThreadprivate (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
Converts an OpenMP Threadprivate operation into LLVM IR using OpenMPIRBuilder. More... | |
static llvm::OffloadEntriesInfoManager::OMPTargetDeviceClauseKind | convertToDeviceClauseKind (mlir::omp::DeclareTargetDeviceType deviceClause) |
static llvm::OffloadEntriesInfoManager::OMPTargetGlobalVarEntryKind | convertToCaptureClauseKind (mlir::omp::DeclareTargetCaptureClause captureClasue) |
static llvm::SmallString< 64 > | getDeclareTargetRefPtrSuffix (LLVM::GlobalOp globalOp, llvm::OpenMPIRBuilder &ompBuilder) |
static bool | isDeclareTargetLink (mlir::Value value) |
static llvm::Value * | getRefPtrIfDeclareTarget (mlir::Value value, LLVM::ModuleTranslation &moduleTranslation) |
uint64_t | getArrayElementSizeInBits (LLVM::LLVMArrayType arrTy, DataLayout &dl) |
llvm::Value * | getSizeInBytes (DataLayout &dl, const mlir::Type &type, Operation *clauseOp, llvm::Value *basePointer, llvm::Type *baseType, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
void | collectMapDataFromMapOperands (MapInfoData &mapData, llvm::SmallVectorImpl< Value > &mapOperands, LLVM::ModuleTranslation &moduleTranslation, DataLayout &dl, llvm::IRBuilderBase &builder) |
static int | getMapDataMemberIdx (MapInfoData &mapData, mlir::omp::MapInfoOp memberOp) |
static mlir::omp::MapInfoOp | getFirstOrLastMappedMemberPtr (mlir::omp::MapInfoOp mapInfo, bool first) |
std::vector< llvm::Value * > | calculateBoundsOffset (LLVM::ModuleTranslation &moduleTranslation, llvm::IRBuilderBase &builder, bool isArrayTy, mlir::OperandRange bounds) |
This function calculates the array/pointer offset for map data provided with bounds operations, e.g. More... | |
static llvm::omp::OpenMPOffloadMappingFlags | mapParentWithMembers (LLVM::ModuleTranslation &moduleTranslation, llvm::IRBuilderBase &builder, llvm::OpenMPIRBuilder &ompBuilder, DataLayout &dl, llvm::OpenMPIRBuilder::MapInfosTy &combinedInfo, MapInfoData &mapData, uint64_t mapDataIndex, bool isTargetParams) |
static bool | checkIfPointerMap (mlir::omp::MapInfoOp mapOp) |
static void | processMapMembersWithParent (LLVM::ModuleTranslation &moduleTranslation, llvm::IRBuilderBase &builder, llvm::OpenMPIRBuilder &ompBuilder, DataLayout &dl, llvm::OpenMPIRBuilder::MapInfosTy &combinedInfo, MapInfoData &mapData, uint64_t mapDataIndex, llvm::omp::OpenMPOffloadMappingFlags memberOfFlag) |
static void | processIndividualMap (MapInfoData &mapData, size_t mapDataIdx, llvm::OpenMPIRBuilder::MapInfosTy &combinedInfo, bool isTargetParams, int mapDataParentIdx=-1) |
static void | processMapWithMembersOf (LLVM::ModuleTranslation &moduleTranslation, llvm::IRBuilderBase &builder, llvm::OpenMPIRBuilder &ompBuilder, DataLayout &dl, llvm::OpenMPIRBuilder::MapInfosTy &combinedInfo, MapInfoData &mapData, uint64_t mapDataIndex, bool isTargetParams) |
static void | createAlteredByCaptureMap (MapInfoData &mapData, LLVM::ModuleTranslation &moduleTranslation, llvm::IRBuilderBase &builder) |
static void | genMapInfos (llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, DataLayout &dl, llvm::OpenMPIRBuilder::MapInfosTy &combinedInfo, MapInfoData &mapData, const SmallVector< Value > &devPtrOperands={}, const SmallVector< Value > &devAddrOperands={}, bool isTargetParams=false) |
static LogicalResult | convertOmpTargetData (Operation *op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
LogicalResult | convertFlagsAttr (Operation *op, mlir::omp::FlagsAttr attribute, LLVM::ModuleTranslation &moduleTranslation) |
Lowers the FlagsAttr which is applied to the module on the device pass when offloading, this attribute contains OpenMP RTL globals that can be passed as flags to the frontend, otherwise they are set to default. More... | |
static bool | getTargetEntryUniqueInfo (llvm::TargetRegionEntryInfo &targetInfo, omp::TargetOp targetOp, llvm::StringRef parentName="") |
static bool | targetOpSupported (Operation &opInst) |
static void | handleDeclareTargetMapVar (MapInfoData &mapData, LLVM::ModuleTranslation &moduleTranslation, llvm::IRBuilderBase &builder, llvm::Function *func) |
static llvm::IRBuilderBase::InsertPoint | createDeviceArgumentAccessor (MapInfoData &mapData, llvm::Argument &arg, llvm::Value *input, llvm::Value *&retVal, llvm::IRBuilderBase &builder, llvm::OpenMPIRBuilder &ompBuilder, LLVM::ModuleTranslation &moduleTranslation, llvm::IRBuilderBase::InsertPoint allocaIP, llvm::IRBuilderBase::InsertPoint codeGenIP) |
static LogicalResult | convertOmpTarget (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
static LogicalResult | convertDeclareTargetAttr (Operation *op, mlir::omp::DeclareTargetAttr attribute, LLVM::ModuleTranslation &moduleTranslation) |
static bool | isTargetDeviceOp (Operation *op) |
static LogicalResult | convertHostOrTargetOperation (Operation *op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
Given an OpenMP MLIR operation, create the corresponding LLVM IR (including OpenMP runtime calls). More... | |
static LogicalResult | convertTargetDeviceOp (Operation *op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
static LogicalResult | convertTargetOpsInNest (Operation *op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
|
static |
Definition at line 771 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpSections(), and convertOmpWsloop().
|
static |
Allocate space for privatized reduction variables.
Definition at line 597 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::convertType(), and mlir::LLVM::ModuleTranslation::mapValue().
Referenced by convertOmpParallel().
|
static |
Definition at line 1013 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::lookupValue().
Referenced by convertOmpTarget(), and convertOmpTaskOp().
std::vector<llvm::Value *> calculateBoundsOffset | ( | LLVM::ModuleTranslation & | moduleTranslation, |
llvm::IRBuilderBase & | builder, | ||
bool | isArrayTy, | ||
mlir::OperandRange | bounds | ||
) |
This function calculates the array/pointer offset for map data provided with bounds operations, e.g.
when provided something like the following:
Fortran map(tofrom: array(2:5, 3:2)) or C++ map(tofrom: array[1:4][2:3]) We must calculate the initial pointer offset to pass across, this function performs this using bounds.
NOTE: which while specified in row-major order it currently needs to be flipped for Fortran's column order array allocation and access (as opposed to C++'s row-major, hence the backwards processing where order is important). This is likely important to keep in mind for the future when we incorporate a C++ frontend, both frontends will need to agree on the ordering of generated bounds operations (one may have to flip them) to make the below lowering frontend agnostic. The offload size calcualtion may also have to be adjusted for C++.
Definition at line 2304 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::lookupValue().
Referenced by createAlteredByCaptureMap().
|
static |
Definition at line 2487 of file OpenMPToLLVMIRTranslation.cpp.
References isDeclareTargetLink().
Referenced by createAlteredByCaptureMap(), processIndividualMap(), and processMapMembersWithParent().
void collectMapDataFromMapOperands | ( | MapInfoData & | mapData, |
llvm::SmallVectorImpl< Value > & | mapOperands, | ||
LLVM::ModuleTranslation & | moduleTranslation, | ||
DataLayout & | dl, | ||
llvm::IRBuilderBase & | builder | ||
) |
Definition at line 2169 of file OpenMPToLLVMIRTranslation.cpp.
References MapInfoData::BaseType, mlir::LLVM::ModuleTranslation::convertType(), mlir::LLVM::createMappingInformation(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), getRefPtrIfDeclareTarget(), getSizeInBytes(), MapInfoData::IsAMember, MapInfoData::IsDeclareTarget, mlir::LLVM::ModuleTranslation::lookupValue(), MapInfoData::MapClause, None, and MapInfoData::OriginalValue.
Referenced by convertOmpTarget().
|
static |
Populates reductions
with reduction declarations used in the given loop.
Definition at line 377 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpParallel(), convertOmpSections(), and convertOmpWsloop().
|
static |
Collect reduction info.
Definition at line 640 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::convertType(), mlir::getType(), mlir::LLVM::ModuleTranslation::lookupValue(), makeAtomicReductionGen(), and makeReductionGen().
Referenced by convertOmpParallel().
|
static |
Convert an Atomic Ordering attribute to llvm::AtomicOrdering.
Definition at line 1696 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpAtomicCapture(), convertOmpAtomicRead(), convertOmpAtomicUpdate(), and convertOmpAtomicWrite().
llvm::AtomicRMWInst::BinOp convertBinOpToAtomic | ( | Operation & | op | ) |
Converts an LLVM dialect binary operation to the corresponding enum value for atomicrmw
supported binary operation.
Definition at line 1758 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpAtomicCapture(), and convertOmpAtomicUpdate().
|
static |
Definition at line 3320 of file OpenMPToLLVMIRTranslation.cpp.
LogicalResult convertFlagsAttr | ( | Operation * | op, |
mlir::omp::FlagsAttr | attribute, | ||
LLVM::ModuleTranslation & | moduleTranslation | ||
) |
Lowers the FlagsAttr which is applied to the module on the device pass when offloading, this attribute contains OpenMP RTL globals that can be passed as flags to the frontend, otherwise they are set to default.
Definition at line 2962 of file OpenMPToLLVMIRTranslation.cpp.
|
static |
Given an OpenMP MLIR operation, create the corresponding LLVM IR (including OpenMP runtime calls).
Definition at line 3431 of file OpenMPToLLVMIRTranslation.cpp.
|
static |
Definition at line 1846 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Block::begin(), convertAtomicOrdering(), convertBinOpToAtomic(), mlir::LLVM::ModuleTranslation::convertBlock(), mlir::LLVM::ModuleTranslation::convertType(), findAllocaInsertPoint(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::Block::getTerminator(), mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapBlock(), and mlir::LLVM::ModuleTranslation::mapValue().
|
static |
Convert omp.atomic.read operation to LLVM IR.
Definition at line 1717 of file OpenMPToLLVMIRTranslation.cpp.
References convertAtomicOrdering(), mlir::LLVM::ModuleTranslation::convertType(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and mlir::LLVM::ModuleTranslation::lookupValue().
|
static |
Converts an OpenMP atomic update operation using OpenMPIRBuilder.
Definition at line 1774 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Block::begin(), convertAtomicOrdering(), convertBinOpToAtomic(), mlir::LLVM::ModuleTranslation::convertBlock(), mlir::LLVM::ModuleTranslation::convertType(), findAllocaInsertPoint(), mlir::Region::front(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::Operation::getOperand(), mlir::Operation::getOperands(), mlir::Operation::getRegion(), mlir::Block::getTerminator(), mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapBlock(), and mlir::LLVM::ModuleTranslation::mapValue().
|
static |
Converts an omp.atomic.write operation to LLVM IR.
Definition at line 1740 of file OpenMPToLLVMIRTranslation.cpp.
References convertAtomicOrdering(), mlir::LLVM::ModuleTranslation::convertType(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and mlir::LLVM::ModuleTranslation::lookupValue().
|
static |
Converts an OpenMP 'critical' operation into LLVM IR using OpenMPIRBuilder.
Definition at line 333 of file OpenMPToLLVMIRTranslation.cpp.
References convertOmpOpRegions(), mlir::get(), mlir::LLVM::ModuleTranslation::getLLVMContext(), and mlir::LLVM::ModuleTranslation::getOpenMPBuilder().
|
static |
Converts an OpenMP 'masked' operation into LLVM IR using OpenMPIRBuilder.
Definition at line 269 of file OpenMPToLLVMIRTranslation.cpp.
References convertOmpOpRegions(), mlir::get(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and mlir::LLVM::ModuleTranslation::lookupValue().
|
static |
Converts an OpenMP 'master' operation into LLVM IR using OpenMPIRBuilder.
Definition at line 306 of file OpenMPToLLVMIRTranslation.cpp.
References convertOmpOpRegions(), and mlir::LLVM::ModuleTranslation::getOpenMPBuilder().
|
static |
Converts the given region that appears within an OpenMP dialect operation to LLVM IR, creating a branch from the sourceBlock
to the entry block of the region, and a branch from any block with an successor-less OpenMP terminator to continuationBlock
.
Populates continuationBlockPHIs
with the PHI nodes of the continuation block if provided.
Definition at line 140 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::detail::connectPHINodes(), mlir::LLVM::ModuleTranslation::convertBlock(), mlir::LLVM::ModuleTranslation::convertType(), mlir::LLVM::ModuleTranslation::forgetMapping(), mlir::Region::getBlocks(), mlir::getBlocksSortedByDominance(), mlir::Operation::getNumOperands(), mlir::Operation::getOperand(), mlir::LLVM::ModuleTranslation::lookupBlock(), mlir::LLVM::ModuleTranslation::lookupValue(), and mlir::LLVM::ModuleTranslation::mapBlock().
Referenced by convertOmpCritical(), convertOmpMasked(), convertOmpMaster(), convertOmpOrderedRegion(), convertOmpParallel(), convertOmpSimd(), convertOmpSingle(), convertOmpTarget(), convertOmpTaskgroupOp(), convertOmpTaskOp(), convertOmpWsloop(), and inlineConvertOmpRegions().
|
static |
Converts an OpenMP 'ordered' operation into LLVM IR using OpenMPIRBuilder.
Definition at line 533 of file OpenMPToLLVMIRTranslation.cpp.
References findAllocaInsertPoint(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and mlir::LLVM::ModuleTranslation::lookupValues().
|
static |
Converts an OpenMP 'ordered_region' operation into LLVM IR using OpenMPIRBuilder.
Definition at line 563 of file OpenMPToLLVMIRTranslation.cpp.
References convertOmpOpRegions(), and mlir::LLVM::ModuleTranslation::getOpenMPBuilder().
|
static |
Converts the OpenMP parallel operation to LLVM IR.
Definition at line 1274 of file OpenMPToLLVMIRTranslation.cpp.
References allocByValReductionVars(), mlir::clone(), mlir::OpBuilder::clone(), mlir::OpBuilder::cloneRegionBefore(), collectReductionDecls(), collectReductionInfo(), convertOmpOpRegions(), mlir::LLVM::ModuleTranslation::convertType(), mlir::Region::end(), findAllocaInsertPoint(), mlir::LLVM::ModuleTranslation::forgetMapping(), mlir::Region::getArgument(), mlir::LLVM::ModuleTranslation::getContext(), getIsByRef(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), getProcBindKind(), inlineConvertOmpRegions(), inlineOmpRegionCleanup(), mlir::LLVM::ModuleTranslation::lookupValue(), mapInitializationArg(), mlir::LLVM::ModuleTranslation::mapValue(), mlir::RewriterBase::mergeBlocks(), mlir::replaceAllUsesInRegionWith(), and mlir::OpBuilder::setInsertionPoint().
|
static |
Definition at line 829 of file OpenMPToLLVMIRTranslation.cpp.
References allocAndInitializeReductionVars(), collectReductionDecls(), mlir::emitError(), findAllocaInsertPoint(), and getIsByRef().
|
static |
Converts an OpenMP simd loop into LLVM IR using OpenMPIRBuilder.
Definition at line 1606 of file OpenMPToLLVMIRTranslation.cpp.
References convertOmpOpRegions(), convertOrderKind(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::lookupValue(), and mlir::LLVM::ModuleTranslation::mapValue().
|
static |
Converts an OpenMP single construct into LLVM IR using OpenMPIRBuilder.
Definition at line 943 of file OpenMPToLLVMIRTranslation.cpp.
References convertOmpOpRegions(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::lookupFunction(), and mlir::LLVM::ModuleTranslation::lookupValue().
|
static |
Definition at line 3193 of file OpenMPToLLVMIRTranslation.cpp.
References buildDependData(), collectMapDataFromMapOperands(), convertOmpOpRegions(), createDeviceArgumentAccessor(), findAllocaInsertPoint(), genMapInfos(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::Operation::getParentOfType(), getTargetEntryUniqueInfo(), handleDeclareTargetMapVar(), MapInfoData::IsAMember, MapInfoData::IsDeclareTarget, mlir::LLVM::ModuleTranslation::lookupFunction(), mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapValue(), MapInfoData::OriginalValue, and targetOpSupported().
|
static |
Definition at line 2783 of file OpenMPToLLVMIRTranslation.cpp.
|
static |
Converts an OpenMP taskgroup construct into LLVM IR using OpenMPIRBuilder.
Definition at line 1076 of file OpenMPToLLVMIRTranslation.cpp.
References convertOmpOpRegions(), findAllocaInsertPoint(), and mlir::LLVM::ModuleTranslation::getOpenMPBuilder().
|
static |
Converts an OpenMP task construct into LLVM IR using OpenMPIRBuilder.
Definition at line 1040 of file OpenMPToLLVMIRTranslation.cpp.
References buildDependData(), convertOmpOpRegions(), findAllocaInsertPoint(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and mlir::LLVM::ModuleTranslation::lookupValue().
|
static |
Definition at line 975 of file OpenMPToLLVMIRTranslation.cpp.
|
static |
Converts an OpenMP Threadprivate operation into LLVM IR using OpenMPIRBuilder.
Definition at line 1941 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Operation::emitError(), mlir::Value::getDefiningOp(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::Operation::getResult(), mlir::LLVM::ModuleTranslation::lookupGlobal(), mlir::LLVM::ModuleTranslation::mapValue(), and mlir::LLVM::ModuleTranslation::symbolTable().
|
static |
Converts an OpenMP workshare loop into LLVM IR using OpenMPIRBuilder.
Definition at line 1096 of file OpenMPToLLVMIRTranslation.cpp.
References allocAndInitializeReductionVars(), collectReductionDecls(), convertOmpOpRegions(), createReductionsAndCleanup(), findAllocaInsertPoint(), getIsByRef(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::lookupValue(), and mlir::LLVM::ModuleTranslation::mapValue().
|
static |
Convert Order attribute to llvm::omp::OrderKind.
Definition at line 1594 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpSimd().
|
static |
Definition at line 3548 of file OpenMPToLLVMIRTranslation.cpp.
|
static |
Definition at line 3554 of file OpenMPToLLVMIRTranslation.cpp.
|
static |
Definition at line 1986 of file OpenMPToLLVMIRTranslation.cpp.
|
static |
Definition at line 1970 of file OpenMPToLLVMIRTranslation.cpp.
|
static |
Definition at line 2621 of file OpenMPToLLVMIRTranslation.cpp.
References MapInfoData::BaseType, calculateBoundsOffset(), checkIfPointerMap(), findAllocaInsertPoint(), MapInfoData::IsDeclareTarget, and MapInfoData::MapClause.
|
static |
Definition at line 3133 of file OpenMPToLLVMIRTranslation.cpp.
References MapInfoData::MapClause, and MapInfoData::OriginalValue.
Referenced by convertOmpTarget().
|
static |
Definition at line 715 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpWsloop().
|
static |
Find the insertion point for allocas given the current insertion point for normal operations in the builder.
Definition at line 97 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::WalkResult::interrupt(), mlir::LLVM::ModuleTranslation::stackWalk(), and mlir::WalkResult::wasInterrupted().
Referenced by convertOmpAtomicCapture(), convertOmpAtomicUpdate(), convertOmpOrdered(), convertOmpParallel(), convertOmpSections(), convertOmpTarget(), convertOmpTaskgroupOp(), convertOmpTaskOp(), convertOmpWsloop(), and createAlteredByCaptureMap().
|
static |
Definition at line 2687 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpTarget().
uint64_t getArrayElementSizeInBits | ( | LLVM::LLVMArrayType | arrTy, |
DataLayout & | dl | ||
) |
Definition at line 2104 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::DataLayout::getTypeSizeInBits().
Referenced by getSizeInBytes().
|
static |
Definition at line 2000 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::SymbolTable::Private.
Referenced by getRefPtrIfDeclareTarget().
|
static |
Definition at line 2237 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by mapParentWithMembers().
Definition at line 763 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpParallel(), convertOmpSections(), and convertOmpWsloop().
|
static |
Definition at line 2228 of file OpenMPToLLVMIRTranslation.cpp.
References MapInfoData::MapClause.
Referenced by mapParentWithMembers(), processMapMembersWithParent(), and processMapWithMembersOf().
|
static |
Convert ProcBindKind from MLIR-generated enum to LLVM enum.
Definition at line 253 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpParallel().
|
static |
Definition at line 2037 of file OpenMPToLLVMIRTranslation.cpp.
References getDeclareTargetRefPtrSuffix(), mlir::Value::getDefiningOp(), mlir::LLVM::ModuleTranslation::getLLVMModule(), and mlir::LLVM::ModuleTranslation::getOpenMPBuilder().
Referenced by collectMapDataFromMapOperands().
llvm::Value* getSizeInBytes | ( | DataLayout & | dl, |
const mlir::Type & | type, | ||
Operation * | clauseOp, | ||
llvm::Value * | basePointer, | ||
llvm::Type * | baseType, | ||
llvm::IRBuilderBase & | builder, | ||
LLVM::ModuleTranslation & | moduleTranslation | ||
) |
Definition at line 2121 of file OpenMPToLLVMIRTranslation.cpp.
References getArrayElementSizeInBits(), mlir::DataLayout::getTypeSizeInBits(), and mlir::LLVM::ModuleTranslation::lookupValue().
Referenced by collectMapDataFromMapOperands().
|
static |
Definition at line 2999 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpTarget().
|
static |
Definition at line 3045 of file OpenMPToLLVMIRTranslation.cpp.
References MapInfoData::IsDeclareTarget, MapInfoData::MapClause, and MapInfoData::OriginalValue.
Referenced by convertOmpTarget().
|
static |
Translates the blocks contained in the given region and appends them to at the current insertion point of builder
.
The operations of the entry block are appended to the current insertion block. If set, continuationBlockArgs
is populated with translated values that correspond to the values omp.yield'ed from the region.
Definition at line 396 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Block::back(), mlir::LLVM::ModuleTranslation::convertBlock(), convertOmpOpRegions(), mlir::Region::empty(), mlir::LLVM::ModuleTranslation::forgetMapping(), mlir::Region::front(), mlir::Operation::getOperands(), mlir::LLVM::ModuleTranslation::lookupValues(), and mlir::LLVM::ModuleTranslation::mapBlock().
Referenced by convertOmpParallel(), inlineOmpRegionCleanup(), makeAtomicReductionGen(), and makeReductionGen().
|
static |
handling of DeclareReductionOp's cleanup region
Definition at line 676 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::convertType(), mlir::detail::enumerate(), mlir::LLVM::ModuleTranslation::forgetMapping(), mlir::Block::front(), mlir::Block::getArgument(), mlir::Value::getType(), inlineConvertOmpRegions(), and mlir::LLVM::ModuleTranslation::mapValue().
Referenced by convertOmpParallel().
|
static |
Definition at line 2019 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Value::getDefiningOp().
Referenced by checkIfPointerMap().
|
static |
Definition at line 3411 of file OpenMPToLLVMIRTranslation.cpp.
|
static |
Create an OpenMPIRBuilder-compatible atomic reduction generator for the given reduction declaration.
The generator uses builder
but ignores its insertion point. Returns null if there is no atomic region available in the reduction declaration.
Definition at line 504 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Region::front(), mlir::Block::getArgument(), inlineConvertOmpRegions(), and mlir::LLVM::ModuleTranslation::mapValue().
Referenced by collectReductionInfo().
|
static |
Create an OpenMPIRBuilder-compatible reduction generator for the given reduction declaration.
The generator uses builder
but ignores its insertion point.
Definition at line 474 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Region::front(), mlir::Block::getArgument(), inlineConvertOmpRegions(), and mlir::LLVM::ModuleTranslation::mapValue().
Referenced by collectReductionInfo().
|
static |
Map input argument to all reduction initialization regions.
Definition at line 622 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Region::front(), mlir::Block::getArgument(), mlir::Block::getNumArguments(), mlir::LLVM::ModuleTranslation::lookupValue(), and mlir::LLVM::ModuleTranslation::mapValue().
Referenced by convertOmpParallel().
|
static |
Definition at line 2392 of file OpenMPToLLVMIRTranslation.cpp.
References MapInfoData::BaseType, mlir::LLVM::createMappingInformation(), getFirstOrLastMappedMemberPtr(), getMapDataMemberIdx(), MapInfoData::MapClause, and None.
Referenced by processMapWithMembersOf().
|
static |
Definition at line 2540 of file OpenMPToLLVMIRTranslation.cpp.
References checkIfPointerMap(), MapInfoData::IsDeclareTarget, and MapInfoData::MapClause.
Referenced by processMapWithMembersOf().
|
static |
Definition at line 2502 of file OpenMPToLLVMIRTranslation.cpp.
References checkIfPointerMap(), mlir::LLVM::createMappingInformation(), getMapDataMemberIdx(), MapInfoData::MapClause, and None.
Referenced by processMapWithMembersOf().
|
static |
Definition at line 2578 of file OpenMPToLLVMIRTranslation.cpp.
References getMapDataMemberIdx(), MapInfoData::MapClause, mapParentWithMembers(), processIndividualMap(), and processMapMembersWithParent().
|
static |
Definition at line 3019 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Operation::emitError().
Referenced by convertOmpTarget().