MLIR
21.0.0git
|
#include "mlir/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.h"
#include "mlir/Analysis/TopologicalSortUtils.h"
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
#include "mlir/Dialect/LLVMIR/LLVMTypes.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/SmallVector.h"
#include "llvm/ADT/TypeSwitch.h"
#include "llvm/Frontend/OpenMP/OMPConstants.h"
#include "llvm/Frontend/OpenMP/OMPIRBuilder.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/MDBuilder.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 | |
struct | PrivateVarsInfo |
A util to collect info needed to convert delayed privatizers from MLIR to LLVM. More... | |
Functions | |
static omp::PrivateClauseOp | findPrivatizer (Operation *from, SymbolRefAttr symbolName) |
Looks up from the operation from and returns the PrivateClauseOp with name symbolName. More... | |
static LogicalResult | checkImplementationStatus (Operation &op) |
Check whether translation to LLVM IR for the given operation is currently supported. More... | |
static LogicalResult | handleError (llvm::Error error, Operation &op) |
template<typename T > | |
static LogicalResult | handleError (llvm::Expected< T > &result, Operation &op) |
static llvm::OpenMPIRBuilder::InsertPointTy | findAllocaInsertPoint (llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
Find the insertion point for allocas given the current insertion point for normal operations in the builder. More... | |
static llvm::CanonicalLoopInfo * | findCurrentLoopInfo (LLVM::ModuleTranslation &moduleTranslation) |
Find the loop information structure for the loop nest being translated. More... | |
static llvm::Expected< llvm::BasicBlock * > | convertOmpOpRegions (Region ®ion, StringRef blockName, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, 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 void | forwardArgs (LLVM::ModuleTranslation &moduleTranslation, omp::BlockArgOpenMPOpInterface blockArgIface) |
Maps block arguments from blockArgIface (which are MLIR values) to the corresponding LLVM values of the interface's operands. More... | |
static LogicalResult | convertIgnoredWrapper (omp::LoopWrapperInterface opInst, LLVM::ModuleTranslation &moduleTranslation) |
Helper function to map block arguments defined by ignored loop wrappers to LLVM values and prevent any uses of those from triggering null pointer dereferences. 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 op, SmallVectorImpl< omp::DeclareReductionOp > &reductions) |
Populates reductions with reduction declarations used in the given op. 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 LogicalResult | allocReductionVars (T loop, ArrayRef< BlockArgument > reductionArgs, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, const llvm::OpenMPIRBuilder::InsertPointTy &allocaIP, SmallVectorImpl< omp::DeclareReductionOp > &reductionDecls, SmallVectorImpl< llvm::Value * > &privateReductionVariables, DenseMap< Value, llvm::Value * > &reductionVariableMap, SmallVectorImpl< DeferredStore > &deferredStores, llvm::ArrayRef< bool > isByRefs) |
Allocate space for privatized reduction variables. More... | |
template<typename T > | |
static void | mapInitializationArgs (T loop, LLVM::ModuleTranslation &moduleTranslation, SmallVectorImpl< omp::DeclareReductionOp > &reductionDecls, DenseMap< Value, llvm::Value * > &reductionVariableMap, unsigned i) |
Map input arguments to reduction initialization region. More... | |
static void | setInsertPointForPossiblyEmptyBlock (llvm::IRBuilderBase &builder, llvm::BasicBlock *block=nullptr) |
template<typename OP > | |
static LogicalResult | initReductionVars (OP op, ArrayRef< BlockArgument > reductionArgs, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, llvm::BasicBlock *latestAllocaBlock, SmallVectorImpl< omp::DeclareReductionOp > &reductionDecls, SmallVectorImpl< llvm::Value * > &privateReductionVariables, DenseMap< Value, llvm::Value * > &reductionVariableMap, llvm::ArrayRef< bool > isByRef, SmallVectorImpl< DeferredStore > &deferredStores) |
Inline reductions' init 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, bool isNowait=false, bool isTeamsReduction=false) |
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 llvm::Value * | findAssociatedValue (Value privateVar, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, llvm::DenseMap< Value, Value > *mappedPrivateVars=nullptr) |
Return the llvm::Value * corresponding to the privateVar that is being privatized. More... | |
static llvm::Expected< llvm::Value * > | initPrivateVar (llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, omp::PrivateClauseOp &privDecl, Value mlirPrivVar, BlockArgument &blockArg, llvm::Value *llvmPrivateVar, llvm::BasicBlock *privInitBlock, llvm::DenseMap< Value, Value > *mappedPrivateVars=nullptr) |
Initialize a single (first)private variable. More... | |
static llvm::Error | initPrivateVars (llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, PrivateVarsInfo &privateVarsInfo, llvm::DenseMap< Value, Value > *mappedPrivateVars=nullptr) |
static llvm::Expected< llvm::BasicBlock * > | allocatePrivateVars (llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, PrivateVarsInfo &privateVarsInfo, const llvm::OpenMPIRBuilder::InsertPointTy &allocaIP, llvm::DenseMap< Value, Value > *mappedPrivateVars=nullptr) |
Allocate and initialize delayed private variables. More... | |
static LogicalResult | copyFirstPrivateVars (mlir::Operation *op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, SmallVectorImpl< mlir::Value > &mlirPrivateVars, ArrayRef< llvm::Value * > llvmPrivateVars, SmallVectorImpl< omp::PrivateClauseOp > &privateDecls, bool insertBarrier, llvm::DenseMap< Value, Value > *mappedPrivateVars=nullptr) |
static LogicalResult | cleanupPrivateVars (llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, Location loc, SmallVectorImpl< llvm::Value * > &llvmPrivateVars, SmallVectorImpl< omp::PrivateClauseOp > &privateDecls) |
static bool | constructIsCancellable (Operation *op) |
Returns true if the construct contains omp.cancel or omp.cancellation_point. More... | |
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 bool | teamsReductionContainedInDistribute (omp::TeamsOp teamsOp) |
static LogicalResult | convertOmpTeams (omp::TeamsOp op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
static void | buildDependData (std::optional< ArrayAttr > dependKinds, OperandRange dependVars, LLVM::ModuleTranslation &moduleTranslation, SmallVectorImpl< llvm::OpenMPIRBuilder::DependData > &dds) |
static void | pushCancelFinalizationCB (SmallVectorImpl< llvm::BranchInst * > &cancelTerminators, llvm::IRBuilderBase &llvmBuilder, llvm::OpenMPIRBuilder &ompBuilder, mlir::Operation *op, llvm::omp::Directive cancelDirective) |
Shared implementation of a callback which adds a termiator for the new block created for the branch taken when an openmp construct is cancelled. More... | |
static void | popCancelFinalizationCB (const ArrayRef< llvm::BranchInst * > cancelTerminators, llvm::OpenMPIRBuilder &ompBuilder, const llvm::OpenMPIRBuilder::InsertPointTy &afterIP) |
If we cancelled the construct, we should branch to the finalization block of that construct. More... | |
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 | convertOmpTaskwaitOp (omp::TaskwaitOp twOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
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 LogicalResult | convertOmpLoopNest (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
Converts an OpenMP loop nest 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 llvm::omp::Directive | convertCancellationConstructType (omp::ClauseCancellationConstructType directive) |
static LogicalResult | convertOmpCancel (omp::CancelOp op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
static LogicalResult | convertOmpCancellationPoint (omp::CancellationPointOp op, 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 captureClause) |
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) |
static void | collectMapDataFromMapOperands (MapInfoData &mapData, SmallVectorImpl< Value > &mapVars, LLVM::ModuleTranslation &moduleTranslation, DataLayout &dl, llvm::IRBuilderBase &builder, ArrayRef< Value > useDevPtrOperands={}, ArrayRef< Value > useDevAddrOperands={}, ArrayRef< Value > hasDevAddrOperands={}) |
static int | getMapDataMemberIdx (MapInfoData &mapData, omp::MapInfoOp memberOp) |
static omp::MapInfoOp | getFirstOrLastMappedMemberPtr (omp::MapInfoOp mapInfo, bool first) |
std::vector< llvm::Value * > | calculateBoundsOffset (LLVM::ModuleTranslation &moduleTranslation, llvm::IRBuilderBase &builder, bool isArrayTy, 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, MapInfosTy &combinedInfo, MapInfoData &mapData, uint64_t mapDataIndex, bool isTargetParams) |
static bool | checkIfPointerMap (omp::MapInfoOp mapOp) |
static void | processMapMembersWithParent (LLVM::ModuleTranslation &moduleTranslation, llvm::IRBuilderBase &builder, llvm::OpenMPIRBuilder &ompBuilder, DataLayout &dl, MapInfosTy &combinedInfo, MapInfoData &mapData, uint64_t mapDataIndex, llvm::omp::OpenMPOffloadMappingFlags memberOfFlag) |
static void | processIndividualMap (MapInfoData &mapData, size_t mapDataIdx, MapInfosTy &combinedInfo, bool isTargetParams, int mapDataParentIdx=-1) |
static void | processMapWithMembersOf (LLVM::ModuleTranslation &moduleTranslation, llvm::IRBuilderBase &builder, llvm::OpenMPIRBuilder &ompBuilder, DataLayout &dl, 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, MapInfosTy &combinedInfo, MapInfoData &mapData, bool isTargetParams=false) |
static llvm::Expected< llvm::Function * > | emitUserDefinedMapper (Operation *declMapperOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, llvm::StringRef mapperFuncName) |
static llvm::Expected< llvm::Function * > | getOrCreateUserDefinedMapperFunc (Operation *op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
static LogicalResult | convertOmpTargetData (Operation *op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
static LogicalResult | convertOmpDistribute (Operation &opInst, 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 void | getTargetEntryUniqueInfo (llvm::TargetRegionEntryInfo &targetInfo, omp::TargetOp targetOp, llvm::StringRef parentName="") |
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 void | extractHostEvalClauses (omp::TargetOp targetOp, Value &numThreads, Value &numTeamsLower, Value &numTeamsUpper, Value &threadLimit, llvm::SmallVectorImpl< Value > *lowerBounds=nullptr, llvm::SmallVectorImpl< Value > *upperBounds=nullptr, llvm::SmallVectorImpl< Value > *steps=nullptr) |
Follow uses of host_eval -defined block arguments of the given omp.target operation and populate output variables with their corresponding host value (i.e. More... | |
template<typename OpTy > | |
static OpTy | castOrGetParentOfType (Operation *op, bool immediateParent=false) |
If op is of the given type parameter, return it casted to that type. More... | |
static std::optional< int64_t > | extractConstInteger (Value value) |
If the given value is defined by an llvm.mlir.constant operation and it is of an integer type, return its value. More... | |
static uint64_t | getTypeByteSize (mlir::Type type, const DataLayout &dl) |
template<typename OpTy > | |
static uint64_t | getReductionDataSize (OpTy &op) |
static void | initTargetDefaultAttrs (omp::TargetOp targetOp, Operation *capturedOp, llvm::OpenMPIRBuilder::TargetKernelDefaultAttrs &attrs, bool isTargetDevice, bool isGPU) |
Populate default MinTeams , MaxTeams and MaxThreads to their default values as stated by the corresponding clauses, if constant. More... | |
static void | initTargetRuntimeAttrs (llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, omp::TargetOp targetOp, Operation *capturedOp, llvm::OpenMPIRBuilder::TargetKernelRuntimeAttrs &attrs) |
Gather LLVM runtime values for all clauses evaluated in the host that are passed to the kernel invocation. More... | |
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 1471 of file OpenMPToLLVMIRTranslation.cpp.
References allocReductionVars(), and initReductionVars().
Referenced by convertOmpDistribute(), convertOmpSections(), and convertOmpTeams().
|
static |
Allocate and initialize delayed private variables.
Returns the basic block which comes after all of these allocations. llvm::Value * for each of these private variables are populated in llvmPrivateVars.
Definition at line 1606 of file OpenMPToLLVMIRTranslation.cpp.
References PrivateVarsInfo::blockArgs, mlir::LLVM::ModuleTranslation::convertType(), mlir::LLVM::ModuleTranslation::getLLVMModule(), PrivateVarsInfo::llvmVars, PrivateVarsInfo::mlirVars, and PrivateVarsInfo::privatizers.
Referenced by convertOmpDistribute(), convertOmpParallel(), convertOmpSimd(), convertOmpTarget(), and convertOmpWsloop().
|
static |
Allocate space for privatized reduction variables.
deferredStores
contains information to create store operations which needs to be inserted after all allocas
Definition at line 1131 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::convertType(), mlir::Region::empty(), inlineConvertOmpRegions(), and mlir::LLVM::ModuleTranslation::mapValue().
Referenced by allocAndInitializeReductionVars(), convertOmpParallel(), and convertOmpWsloop().
|
static |
Definition at line 2018 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, | ||
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 3823 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::lookupValue().
Referenced by createAlteredByCaptureMap().
|
static |
If op
is of the given type parameter, return it casted to that type.
Otherwise, if its immediate parent operation (or some other higher-level parent, if immediateParent
is false) is of that type, return that parent casted to the given type.
If op
is null
or neither it or its parent(s) are of the specified type, return a null
operation.
Definition at line 5057 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Operation::getParentOfType(), and mlir::Operation::getParentOp().
|
static |
Definition at line 4006 of file OpenMPToLLVMIRTranslation.cpp.
References isDeclareTargetLink().
Referenced by createAlteredByCaptureMap(), processIndividualMap(), and processMapMembersWithParent().
|
static |
Check whether translation to LLVM IR for the given operation is currently supported.
If not, descriptive diagnostics will be emitted to let users know this is a not-yet-implemented feature.
Definition at line 286 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Operation::emitError(), mlir::Operation::emitWarning(), mlir::Operation::getDialect(), mlir::Operation::getName(), and mlir::Operation::getParentOp().
Referenced by convertHostOrTargetOperation(), convertOmpAtomicCapture(), convertOmpAtomicRead(), convertOmpAtomicUpdate(), convertOmpAtomicWrite(), convertOmpCancel(), convertOmpCancellationPoint(), convertOmpCritical(), convertOmpDistribute(), convertOmpMasked(), convertOmpMaster(), convertOmpOrdered(), convertOmpOrderedRegion(), convertOmpParallel(), convertOmpSections(), convertOmpSimd(), convertOmpSingle(), convertOmpTarget(), convertOmpTargetData(), convertOmpTaskgroupOp(), convertOmpTaskOp(), convertOmpTaskwaitOp(), convertOmpTeams(), convertOmpThreadprivate(), and convertOmpWsloop().
|
static |
Definition at line 1718 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::emitError(), and inlineOmpRegionCleanup().
Referenced by convertOmpDistribute(), convertOmpParallel(), convertOmpSimd(), convertOmpTaskOp(), and convertOmpWsloop().
|
static |
Definition at line 3599 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpTarget(), convertOmpTargetData(), and emitUserDefinedMapper().
|
static |
Populates reductions
with reduction declarations used in the given op.
Definition at line 890 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpDistribute(), convertOmpParallel(), convertOmpSections(), convertOmpTeams(), convertOmpWsloop(), and getReductionDataSize().
|
static |
Collect reduction info.
Definition at line 1329 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::convertType(), mlir::getType(), mlir::LLVM::ModuleTranslation::lookupValue(), makeAtomicReductionGen(), and makeReductionGen().
Referenced by convertOmpParallel(), and createReductionsAndCleanup().
|
static |
Returns true if the construct contains omp.cancel or omp.cancellation_point.
Definition at line 1739 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::WalkResult::advance(), mlir::WalkResult::interrupt(), and mlir::Operation::walk().
Referenced by convertOmpParallel(), convertOmpSections(), and pushCancelFinalizationCB().
|
static |
Convert an Atomic Ordering attribute to llvm::AtomicOrdering.
Definition at line 3018 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 3090 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpAtomicCapture(), and convertOmpAtomicUpdate().
|
static |
Definition at line 3278 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpCancel(), and convertOmpCancellationPoint().
|
static |
Definition at line 5595 of file OpenMPToLLVMIRTranslation.cpp.
References convertToCaptureClauseKind(), convertToDeviceClauseKind(), mlir::LocationAttr::findInstanceOf(), mlir::LLVM::ModuleTranslation::getLLVMModule(), mlir::Operation::getLoc(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::Operation::getParentOfType(), mlir::LLVM::ModuleTranslation::lookupFunction(), and mlir::SymbolTable::Private.
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 4747 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::getOpenMPBuilder().
|
static |
Given an OpenMP MLIR operation, create the corresponding LLVM IR (including OpenMP runtime calls).
Definition at line 5714 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertOmpAtomicCapture(), convertOmpAtomicRead(), convertOmpAtomicUpdate(), convertOmpAtomicWrite(), convertOmpCancel(), convertOmpCancellationPoint(), convertOmpCritical(), convertOmpDistribute(), convertOmpLoopNest(), convertOmpMasked(), convertOmpMaster(), convertOmpOrdered(), convertOmpOrderedRegion(), convertOmpParallel(), convertOmpSections(), convertOmpSimd(), convertOmpSingle(), convertOmpTarget(), convertOmpTargetData(), convertOmpTaskgroupOp(), convertOmpTaskOp(), convertOmpTaskwaitOp(), convertOmpTeams(), convertOmpThreadprivate(), convertOmpWsloop(), mlir::Operation::emitError(), mlir::Operation::getName(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::Operation::getParentOp(), handleError(), mlir::LLVM::ModuleTranslation::stackPop(), and mlir::LLVM::ModuleTranslation::stackPush().
Referenced by convertTargetDeviceOp().
|
static |
Helper function to map block arguments defined by ignored loop wrappers to LLVM values and prevent any uses of those from triggering null pointer dereferences.
This must be called after block arguments of parent wrappers have already been mapped to LLVM IR values.
Definition at line 705 of file OpenMPToLLVMIRTranslation.cpp.
References forwardArgs().
Referenced by convertOmpSimd().
|
static |
Definition at line 3184 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Block::begin(), checkImplementationStatus(), 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(), handleError(), mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapBlock(), and mlir::LLVM::ModuleTranslation::mapValue().
Referenced by convertHostOrTargetOperation().
|
static |
Convert omp.atomic.read operation to LLVM IR.
Definition at line 3039 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertAtomicOrdering(), mlir::LLVM::ModuleTranslation::convertType(), findAllocaInsertPoint(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and mlir::LLVM::ModuleTranslation::lookupValue().
Referenced by convertHostOrTargetOperation().
|
static |
Converts an OpenMP atomic update operation using OpenMPIRBuilder.
Definition at line 3106 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Block::begin(), checkImplementationStatus(), 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(), handleError(), mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapBlock(), and mlir::LLVM::ModuleTranslation::mapValue().
Referenced by convertHostOrTargetOperation().
|
static |
Converts an omp.atomic.write operation to LLVM IR.
Definition at line 3066 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertAtomicOrdering(), mlir::LLVM::ModuleTranslation::convertType(), findAllocaInsertPoint(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and mlir::LLVM::ModuleTranslation::lookupValue().
Referenced by convertHostOrTargetOperation().
|
static |
Definition at line 3293 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertCancellationConstructType(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), and mlir::LLVM::ModuleTranslation::lookupValue().
Referenced by convertHostOrTargetOperation().
|
static |
Definition at line 3320 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertCancellationConstructType(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and handleError().
Referenced by convertHostOrTargetOperation().
|
static |
Converts an OpenMP 'critical' operation into LLVM IR using OpenMPIRBuilder.
Definition at line 803 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertOmpOpRegions(), mlir::get(), mlir::LLVM::ModuleTranslation::getLLVMContext(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and handleError().
Referenced by convertHostOrTargetOperation().
|
static |
Process teams op reduction in distribute if the reduction is contained in the distribute op.
Definition at line 4611 of file OpenMPToLLVMIRTranslation.cpp.
References allocAndInitializeReductionVars(), allocatePrivateVars(), checkImplementationStatus(), cleanupPrivateVars(), collectReductionDecls(), convertOmpOpRegions(), copyFirstPrivateVars(), createReductionsAndCleanup(), findAllocaInsertPoint(), findCurrentLoopInfo(), getIsByRef(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::Operation::getParentOfType(), handleError(), initPrivateVars(), PrivateVarsInfo::llvmVars, PrivateVarsInfo::mlirVars, PrivateVarsInfo::privatizers, and teamsReductionContainedInDistribute().
Referenced by convertHostOrTargetOperation().
|
static |
Converts an OpenMP loop nest into LLVM IR using OpenMPIRBuilder.
Definition at line 2925 of file OpenMPToLLVMIRTranslation.cpp.
References convertOmpOpRegions(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), mlir::WalkResult::interrupt(), mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapValue(), and mlir::LLVM::ModuleTranslation::stackWalk().
Referenced by convertHostOrTargetOperation().
|
static |
Converts an OpenMP 'masked' operation into LLVM IR using OpenMPIRBuilder.
Definition at line 724 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertOmpOpRegions(), mlir::get(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), and mlir::LLVM::ModuleTranslation::lookupValue().
Referenced by convertHostOrTargetOperation().
|
static |
Converts an OpenMP 'master' operation into LLVM IR using OpenMPIRBuilder.
Definition at line 768 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertOmpOpRegions(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and handleError().
Referenced by convertHostOrTargetOperation().
|
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 546 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::Region::getParentOp(), mlir::LLVM::ModuleTranslation::lookupBlock(), mlir::LLVM::ModuleTranslation::lookupValue(), and mlir::LLVM::ModuleTranslation::mapBlock().
Referenced by convertOmpCritical(), convertOmpDistribute(), convertOmpLoopNest(), convertOmpMasked(), convertOmpMaster(), convertOmpOrderedRegion(), convertOmpParallel(), convertOmpSections(), convertOmpSimd(), convertOmpSingle(), convertOmpTarget(), convertOmpTaskgroupOp(), convertOmpTaskOp(), convertOmpTeams(), convertOmpWsloop(), convertTargetOpsInNest(), and inlineConvertOmpRegions().
|
static |
Converts an OpenMP 'ordered' operation into LLVM IR using OpenMPIRBuilder.
Definition at line 1049 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), findAllocaInsertPoint(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and mlir::LLVM::ModuleTranslation::lookupValues().
Referenced by convertHostOrTargetOperation().
|
static |
Converts an OpenMP 'ordered_region' operation into LLVM IR using OpenMPIRBuilder.
Definition at line 1082 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertOmpOpRegions(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and handleError().
Referenced by convertHostOrTargetOperation().
|
static |
Converts the OpenMP parallel operation to LLVM IR.
Definition at line 2654 of file OpenMPToLLVMIRTranslation.cpp.
References allocatePrivateVars(), allocReductionVars(), checkImplementationStatus(), cleanupPrivateVars(), collectReductionDecls(), collectReductionInfo(), constructIsCancellable(), convertOmpOpRegions(), copyFirstPrivateVars(), findAllocaInsertPoint(), getIsByRef(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), getProcBindKind(), handleError(), initPrivateVars(), initReductionVars(), inlineOmpRegionCleanup(), PrivateVarsInfo::llvmVars, mlir::LLVM::ModuleTranslation::lookupValue(), PrivateVarsInfo::mlirVars, and PrivateVarsInfo::privatizers.
Referenced by convertHostOrTargetOperation().
|
static |
Definition at line 1753 of file OpenMPToLLVMIRTranslation.cpp.
References allocAndInitializeReductionVars(), mlir::Region::begin(), checkImplementationStatus(), collectReductionDecls(), constructIsCancellable(), convertOmpOpRegions(), createReductionsAndCleanup(), findAllocaInsertPoint(), mlir::Region::getArguments(), getIsByRef(), mlir::Region::getNumArguments(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::Operation::getRegion(), handleError(), mlir::LLVM::ModuleTranslation::lookupValue(), and mlir::LLVM::ModuleTranslation::mapValue().
Referenced by convertHostOrTargetOperation().
|
static |
Converts an OpenMP simd loop into LLVM IR using OpenMPIRBuilder.
Definition at line 2839 of file OpenMPToLLVMIRTranslation.cpp.
References allocatePrivateVars(), checkImplementationStatus(), cleanupPrivateVars(), convertIgnoredWrapper(), convertOmpOpRegions(), convertOrderKind(), findAllocaInsertPoint(), findCurrentLoopInfo(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), initPrivateVars(), inlineConvertOmpRegions(), PrivateVarsInfo::llvmVars, mlir::LLVM::ModuleTranslation::lookupValue(), and PrivateVarsInfo::privatizers.
Referenced by convertHostOrTargetOperation().
|
static |
Converts an OpenMP single construct into LLVM IR using OpenMPIRBuilder.
Definition at line 1860 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertOmpOpRegions(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), mlir::LLVM::ModuleTranslation::lookupFunction(), and mlir::LLVM::ModuleTranslation::lookupValue().
Referenced by convertHostOrTargetOperation().
|
static |
Definition at line 5299 of file OpenMPToLLVMIRTranslation.cpp.
References allocatePrivateVars(), buildDependData(), checkImplementationStatus(), collectMapDataFromMapOperands(), convertOmpOpRegions(), copyFirstPrivateVars(), createDeviceArgumentAccessor(), mlir::detail::enumerate(), findAllocaInsertPoint(), findPrivatizer(), genMapInfos(), mlir::Value::getDefiningOp(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), getOrCreateUserDefinedMapperFunc(), mlir::Operation::getParentOfType(), getTargetEntryUniqueInfo(), handleDeclareTargetMapVar(), handleError(), initPrivateVars(), initTargetDefaultAttrs(), initTargetRuntimeAttrs(), inlineOmpRegionCleanup(), PrivateVarsInfo::llvmVars, mlir::LLVM::ModuleTranslation::lookupFunction(), mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapValue(), PrivateVarsInfo::mlirVars, and PrivateVarsInfo::privatizers.
Referenced by convertHostOrTargetOperation(), and convertTargetOpsInNest().
|
static |
Definition at line 4368 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), collectMapDataFromMapOperands(), findAllocaInsertPoint(), genMapInfos(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), getOrCreateUserDefinedMapperFunc(), mlir::Operation::getParentOfType(), handleError(), inlineConvertOmpRegions(), mlir::LLVM::ModuleTranslation::lookupValue(), and mlir::LLVM::ModuleTranslation::mapValue().
Referenced by convertHostOrTargetOperation(), and convertTargetOpsInNest().
|
static |
Converts an OpenMP taskgroup construct into LLVM IR using OpenMPIRBuilder.
Definition at line 2447 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertOmpOpRegions(), findAllocaInsertPoint(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and handleError().
Referenced by convertHostOrTargetOperation().
|
static |
Converts an OpenMP task construct into LLVM IR using OpenMPIRBuilder.
Definition at line 2214 of file OpenMPToLLVMIRTranslation.cpp.
References PrivateVarsInfo::blockArgs, buildDependData(), checkImplementationStatus(), cleanupPrivateVars(), convertOmpOpRegions(), mlir::LLVM::ModuleTranslation::convertType(), copyFirstPrivateVars(), mlir::detail::enumerate(), findAllocaInsertPoint(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), initPrivateVar(), PrivateVarsInfo::llvmVars, mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapValue(), PrivateVarsInfo::mlirVars, popCancelFinalizationCB(), PrivateVarsInfo::privatizers, pushCancelFinalizationCB(), and setInsertPointForPossiblyEmptyBlock().
Referenced by convertHostOrTargetOperation().
|
static |
Definition at line 2474 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), and mlir::LLVM::ModuleTranslation::getOpenMPBuilder().
Referenced by convertHostOrTargetOperation().
|
static |
Definition at line 1939 of file OpenMPToLLVMIRTranslation.cpp.
References allocAndInitializeReductionVars(), checkImplementationStatus(), collectReductionDecls(), convertOmpOpRegions(), createReductionsAndCleanup(), findAllocaInsertPoint(), getIsByRef(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), mlir::LLVM::ModuleTranslation::lookupValue(), and teamsReductionContainedInDistribute().
Referenced by convertHostOrTargetOperation().
|
static |
Converts an OpenMP Threadprivate operation into LLVM IR using OpenMPIRBuilder.
Definition at line 3346 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), mlir::Operation::emitError(), mlir::Value::getDefiningOp(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::Operation::getOperand(), mlir::Operation::getResult(), mlir::LLVM::ModuleTranslation::lookupGlobal(), mlir::LLVM::ModuleTranslation::mapValue(), and mlir::LLVM::ModuleTranslation::symbolTable().
Referenced by convertHostOrTargetOperation().
|
static |
Converts an OpenMP workshare loop into LLVM IR using OpenMPIRBuilder.
Definition at line 2485 of file OpenMPToLLVMIRTranslation.cpp.
References allocatePrivateVars(), allocReductionVars(), checkImplementationStatus(), cleanupPrivateVars(), collectReductionDecls(), convertOmpOpRegions(), copyFirstPrivateVars(), createReductionsAndCleanup(), findAllocaInsertPoint(), findCurrentLoopInfo(), getIsByRef(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::Operation::getParentOp(), handleError(), initPrivateVars(), initReductionVars(), PrivateVarsInfo::llvmVars, mlir::LLVM::ModuleTranslation::lookupValue(), PrivateVarsInfo::mlirVars, popCancelFinalizationCB(), PrivateVarsInfo::privatizers, and pushCancelFinalizationCB().
Referenced by convertHostOrTargetOperation().
|
static |
Convert Order attribute to llvm::omp::OrderKind.
Definition at line 2827 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpSimd().
|
static |
Definition at line 5874 of file OpenMPToLLVMIRTranslation.cpp.
References convertHostOrTargetOperation().
|
static |
Definition at line 5880 of file OpenMPToLLVMIRTranslation.cpp.
References convertOmpOpRegions(), convertOmpTarget(), convertOmpTargetData(), mlir::LLVM::ModuleTranslation::convertType(), forwardArgs(), mlir::get(), handleError(), mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapValue(), and mlir::Operation::walk().
|
static |
Definition at line 3402 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertDeclareTargetAttr().
|
static |
Definition at line 3386 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertDeclareTargetAttr().
|
static |
Definition at line 1653 of file OpenMPToLLVMIRTranslation.cpp.
References findAssociatedValue(), mlir::LLVM::ModuleTranslation::forgetMapping(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), inlineConvertOmpRegions(), mlir::LLVM::ModuleTranslation::mapValue(), and setInsertPointForPossiblyEmptyBlock().
Referenced by convertOmpDistribute(), convertOmpParallel(), convertOmpTarget(), convertOmpTaskOp(), and convertOmpWsloop().
|
static |
Definition at line 4182 of file OpenMPToLLVMIRTranslation.cpp.
References calculateBoundsOffset(), checkIfPointerMap(), findAllocaInsertPoint(), and mlir::LLVM::ModuleTranslation::getOpenMPBuilder().
Referenced by genMapInfos().
|
static |
Definition at line 4896 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::get(), and mlir::LLVM::TypeToLLVMIRTranslator::getPreferredAlignment().
Referenced by convertOmpTarget().
|
static |
Definition at line 1404 of file OpenMPToLLVMIRTranslation.cpp.
References collectReductionInfo(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), and inlineOmpRegionCleanup().
Referenced by convertOmpDistribute(), convertOmpSections(), convertOmpTeams(), and convertOmpWsloop().
|
static |
Definition at line 4314 of file OpenMPToLLVMIRTranslation.cpp.
References collectMapDataFromMapOperands(), mlir::LLVM::ModuleTranslation::convertBlock(), mlir::LLVM::ModuleTranslation::convertType(), mlir::LLVM::ModuleTranslation::forgetMapping(), genMapInfos(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), getOrCreateUserDefinedMapperFunc(), mlir::LLVM::ModuleTranslation::mapBlock(), mlir::LLVM::ModuleTranslation::mapFunction(), and mlir::LLVM::ModuleTranslation::mapValue().
Referenced by getOrCreateUserDefinedMapperFunc().
|
static |
If the given value
is defined by an llvm.mlir.constant
operation and it is of an integer type, return its value.
Definition at line 5072 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Value::getDefiningOp().
Referenced by initTargetDefaultAttrs().
|
static |
Follow uses of host_eval
-defined block arguments of the given omp.target
operation and populate output variables with their corresponding host value (i.e.
operand evaluated outside of the target region), based on their uses inside of the target region.
Loop bounds and steps are only optionally populated, if output vectors are provided.
Definition at line 4991 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::detail::enumerate(), and mlir::Operation::getUsers().
Referenced by initTargetDefaultAttrs(), and initTargetRuntimeAttrs().
|
static |
Find the insertion point for allocas given the current insertion point for normal operations in the builder.
Definition at line 489 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::WalkResult::interrupt(), mlir::LLVM::ModuleTranslation::stackWalk(), and mlir::WalkResult::wasInterrupted().
Referenced by convertOmpAtomicCapture(), convertOmpAtomicRead(), convertOmpAtomicUpdate(), convertOmpAtomicWrite(), convertOmpDistribute(), convertOmpOrdered(), convertOmpParallel(), convertOmpSections(), convertOmpSimd(), convertOmpTarget(), convertOmpTargetData(), convertOmpTaskgroupOp(), convertOmpTaskOp(), convertOmpTeams(), convertOmpWsloop(), and createAlteredByCaptureMap().
|
static |
Return the llvm::Value * corresponding to the privateVar
that is being privatized.
It isn't always as simple as looking up moduleTranslation with privateVar. For instance, in case of an allocatable, the descriptor for the allocatable is privatized. This descriptor is mapped using an MapInfoOp. So, this function will return a pointer to the llvm::Value corresponding to the block argument for the mapped descriptor.
Definition at line 1504 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::convertType(), mlir::Value::getType(), and mlir::LLVM::ModuleTranslation::lookupValue().
Referenced by copyFirstPrivateVars(), and initPrivateVar().
|
static |
Find the loop information structure for the loop nest being translated.
It will return a null
value unless called from the translation function for a loop wrapper operation after successfully translating its body.
Definition at line 531 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::WalkResult::interrupt(), and mlir::LLVM::ModuleTranslation::stackWalk().
Referenced by convertOmpDistribute(), convertOmpSimd(), and convertOmpWsloop().
|
static |
Looks up from the operation from and returns the PrivateClauseOp with name symbolName.
Definition at line 271 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpTarget().
|
static |
Maps block arguments from blockArgIface
(which are MLIR values) to the corresponding LLVM values of the
interface's operands.
This is useful when an OpenMP region with entry block arguments is converted to LLVM. In this case the block arguments are (part of) of the OpenMP region's entry arguments and the operands are (part of) of the operands to the OpenMP op containing the region.
Definition at line 690 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::lookupValue(), and mlir::LLVM::ModuleTranslation::mapValue().
Referenced by convertIgnoredWrapper(), and convertTargetOpsInNest().
|
static |
Definition at line 4247 of file OpenMPToLLVMIRTranslation.cpp.
References createAlteredByCaptureMap(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), processIndividualMap(), and processMapWithMembersOf().
Referenced by convertOmpTarget(), convertOmpTargetData(), and emitUserDefinedMapper().
uint64_t getArrayElementSizeInBits | ( | LLVM::LLVMArrayType | arrTy, |
DataLayout & | dl | ||
) |
Definition at line 3534 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::DataLayout::getTypeSizeInBits().
Referenced by getSizeInBytes().
|
static |
Definition at line 3416 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::SymbolTable::Private.
Referenced by getRefPtrIfDeclareTarget().
|
static |
Definition at line 3765 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by mapParentWithMembers().
Definition at line 1463 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpDistribute(), convertOmpParallel(), convertOmpSections(), convertOmpTeams(), and convertOmpWsloop().
|
static |
Definition at line 3758 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by mapParentWithMembers(), processMapMembersWithParent(), and processMapWithMembersOf().
|
static |
Definition at line 4297 of file OpenMPToLLVMIRTranslation.cpp.
References emitUserDefinedMapper(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and mlir::LLVM::ModuleTranslation::lookupFunction().
Referenced by convertOmpTarget(), convertOmpTargetData(), and emitUserDefinedMapper().
|
static |
Convert ProcBindKind from MLIR-generated enum to LLVM enum.
Definition at line 670 of file OpenMPToLLVMIRTranslation.cpp.
References kind.
Referenced by convertOmpParallel().
|
static |
Definition at line 5091 of file OpenMPToLLVMIRTranslation.cpp.
References collectReductionDecls(), mlir::Operation::getContext(), mlir::Operation::getParentOfType(), and getTypeByteSize().
Referenced by initTargetDefaultAttrs().
|
static |
Definition at line 3453 of file OpenMPToLLVMIRTranslation.cpp.
References getDeclareTargetRefPtrSuffix(), mlir::Value::getDefiningOp(), mlir::LLVM::ModuleTranslation::getLLVMModule(), and mlir::LLVM::ModuleTranslation::getOpenMPBuilder().
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 3551 of file OpenMPToLLVMIRTranslation.cpp.
References getArrayElementSizeInBits(), mlir::DataLayout::getTypeSizeInBits(), and mlir::LLVM::ModuleTranslation::lookupValue().
|
static |
Definition at line 4784 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::spirv::hash_value().
Referenced by convertOmpTarget().
|
static |
Definition at line 5084 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::DataLayout::getTypeSizeInBits().
Referenced by getReductionDataSize().
|
static |
Definition at line 4806 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::getOpenMPBuilder().
Referenced by convertOmpTarget().
|
static |
Definition at line 465 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Operation::emitError().
Referenced by convertHostOrTargetOperation(), convertOmpAtomicCapture(), convertOmpAtomicUpdate(), convertOmpCancel(), convertOmpCancellationPoint(), convertOmpCritical(), convertOmpDistribute(), convertOmpLoopNest(), convertOmpMasked(), convertOmpMaster(), convertOmpOrderedRegion(), convertOmpParallel(), convertOmpSections(), convertOmpSimd(), convertOmpSingle(), convertOmpTarget(), convertOmpTargetData(), convertOmpTaskgroupOp(), convertOmpTaskOp(), convertOmpTeams(), convertOmpWsloop(), convertTargetOpsInNest(), copyFirstPrivateVars(), createReductionsAndCleanup(), handleError(), and inlineConvertOmpRegions().
|
static |
Definition at line 479 of file OpenMPToLLVMIRTranslation.cpp.
References handleError().
|
static |
Initialize a single (first)private variable.
You probably want to use allocateAndInitPrivateVars instead of this. This returns the private variable which has been initialized. This variable should be mapped before constructing the body of the Op.
Definition at line 1535 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Region::empty(), findAssociatedValue(), mlir::LLVM::ModuleTranslation::forgetMapping(), inlineConvertOmpRegions(), and mlir::LLVM::ModuleTranslation::mapValue().
Referenced by convertOmpTaskOp(), and initPrivateVars().
|
static |
Definition at line 1572 of file OpenMPToLLVMIRTranslation.cpp.
References PrivateVarsInfo::blockArgs, mlir::detail::enumerate(), initPrivateVar(), PrivateVarsInfo::llvmVars, mlir::LLVM::ModuleTranslation::mapValue(), PrivateVarsInfo::mlirVars, PrivateVarsInfo::privatizers, and setInsertPointForPossiblyEmptyBlock().
Referenced by convertOmpDistribute(), convertOmpParallel(), convertOmpSimd(), convertOmpTarget(), and convertOmpWsloop().
|
static |
Inline reductions' init
regions.
This functions assumes that the builder
's insertion point is where the user wants the init
regions to be inlined; i.e. it does not try to find a proper insertion location for the init
regions. It also leaves the `builder's insertions point in a state where the user can continue the code-gen directly afterwards.
Definition at line 1239 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::convertType(), mlir::LLVM::ModuleTranslation::forgetMapping(), inlineConvertOmpRegions(), mapInitializationArgs(), mlir::LLVM::ModuleTranslation::mapValue(), and setInsertPointForPossiblyEmptyBlock().
Referenced by allocAndInitializeReductionVars(), convertOmpParallel(), and convertOmpWsloop().
|
static |
Populate default MinTeams
, MaxTeams
and MaxThreads
to their default values as stated by the corresponding clauses, if constant.
These default values must be set before the creation of the outlined LLVM function for the target region, so that they can be used to initialize the corresponding global ConfigurationEnvironmentTy
structure.
Definition at line 5116 of file OpenMPToLLVMIRTranslation.cpp.
References extractConstInteger(), extractHostEvalClauses(), and getReductionDataSize().
Referenced by convertOmpTarget().
|
static |
Gather LLVM runtime values for all clauses evaluated in the host that are passed to the kernel invocation.
This function must be called only when compiling for the host. Also, it will only provide correct results if it's called after the body of targetOp
has been fully generated.
Definition at line 5236 of file OpenMPToLLVMIRTranslation.cpp.
References extractHostEvalClauses(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and mlir::LLVM::ModuleTranslation::lookupValue().
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 909 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::Region::getParentOp(), handleError(), mlir::LLVM::ModuleTranslation::lookupValues(), and mlir::LLVM::ModuleTranslation::mapBlock().
Referenced by allocReductionVars(), convertOmpSimd(), convertOmpTargetData(), copyFirstPrivateVars(), initPrivateVar(), initReductionVars(), inlineOmpRegionCleanup(), makeAtomicReductionGen(), and makeReductionGen().
|
static |
handling of DeclareReductionOp's cleanup region
Definition at line 1365 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 cleanupPrivateVars(), convertOmpParallel(), convertOmpTarget(), and createReductionsAndCleanup().
|
static |
Definition at line 3435 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Value::getDefiningOp().
Referenced by checkIfPointerMap().
|
static |
Definition at line 5686 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Operation::getParentOfType().
|
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 1019 of file OpenMPToLLVMIRTranslation.cpp.
References 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 989 of file OpenMPToLLVMIRTranslation.cpp.
References inlineConvertOmpRegions(), and mlir::LLVM::ModuleTranslation::mapValue().
Referenced by collectReductionInfo().
|
static |
Map input arguments to reduction initialization region.
Definition at line 1199 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Region::front(), mlir::Block::getNumArguments(), mlir::LLVM::ModuleTranslation::lookupValue(), and mlir::LLVM::ModuleTranslation::mapValue().
Referenced by initReductionVars().
|
static |
Definition at line 3911 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::createMappingInformation(), getFirstOrLastMappedMemberPtr(), getMapDataMemberIdx(), and None.
Referenced by processMapWithMembersOf().
|
static |
If we cancelled the construct, we should branch to the finalization block of that construct.
OMPIRBuilder structures the CFG such that the cleanup block is immediately before the continuation block. Now this finalization has been created we can fix the branch.
Definition at line 2087 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpTaskOp(), and convertOmpWsloop().
|
static |
Definition at line 4098 of file OpenMPToLLVMIRTranslation.cpp.
References checkIfPointerMap().
Referenced by genMapInfos(), and processMapWithMembersOf().
|
static |
Definition at line 4021 of file OpenMPToLLVMIRTranslation.cpp.
References checkIfPointerMap(), mlir::LLVM::createMappingInformation(), mlir::LLVM::ModuleTranslation::getLLVMModule(), getMapDataMemberIdx(), and None.
Referenced by processMapWithMembersOf().
|
static |
Definition at line 4135 of file OpenMPToLLVMIRTranslation.cpp.
References getMapDataMemberIdx(), mapParentWithMembers(), processIndividualMap(), and processMapMembersWithParent().
Referenced by genMapInfos().
|
static |
Shared implementation of a callback which adds a termiator for the new block created for the branch taken when an openmp construct is cancelled.
The terminator is saved in cancelTerminators
. This callback is invoked only if there is cancellation inside of the taskgroup body. The terminator will need to be fixed to branch to the correct block to cleanup the construct.
Definition at line 2057 of file OpenMPToLLVMIRTranslation.cpp.
References constructIsCancellable().
Referenced by convertOmpTaskOp(), and convertOmpWsloop().
|
static |
Definition at line 1221 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpTaskOp(), copyFirstPrivateVars(), initPrivateVars(), and initReductionVars().
|
static |
Definition at line 1901 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Operation::erase().
Referenced by convertOmpDistribute(), and convertOmpTeams().