MLIR  20.0.0git
Classes | Functions
OpenMPToLLVMIRTranslation.cpp File Reference
#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 &region, 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 &region, 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)
 

Function Documentation

◆ allocAndInitializeReductionVars()

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

Definition at line 771 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by convertOmpSections(), and convertOmpWsloop().

◆ allocByValReductionVars()

template<typename T >
static void allocByValReductionVars ( 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 
)
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().

◆ buildDependData()

static void buildDependData ( std::optional< ArrayAttr >  depends,
OperandRange  dependVars,
LLVM::ModuleTranslation moduleTranslation,
SmallVectorImpl< llvm::OpenMPIRBuilder::DependData > &  dds 
)
static

◆ calculateBoundsOffset()

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().

◆ checkIfPointerMap()

static bool checkIfPointerMap ( mlir::omp::MapInfoOp  mapOp)
static

◆ collectMapDataFromMapOperands()

void collectMapDataFromMapOperands ( MapInfoData mapData,
llvm::SmallVectorImpl< Value > &  mapOperands,
LLVM::ModuleTranslation moduleTranslation,
DataLayout dl,
llvm::IRBuilderBase &  builder 
)

◆ collectReductionDecls()

template<typename T >
static void collectReductionDecls ( loop,
SmallVectorImpl< omp::DeclareReductionOp > &  reductions 
)
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().

◆ collectReductionInfo()

template<typename T >
static void collectReductionInfo ( 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 
)
static

◆ convertAtomicOrdering()

static llvm::AtomicOrdering convertAtomicOrdering ( std::optional< omp::ClauseMemoryOrderKind >  ao)
static

Convert an Atomic Ordering attribute to llvm::AtomicOrdering.

Definition at line 1696 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by convertOmpAtomicCapture(), convertOmpAtomicRead(), convertOmpAtomicUpdate(), and convertOmpAtomicWrite().

◆ convertBinOpToAtomic()

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().

◆ convertDeclareTargetAttr()

static LogicalResult convertDeclareTargetAttr ( Operation op,
mlir::omp::DeclareTargetAttr  attribute,
LLVM::ModuleTranslation moduleTranslation 
)
static

Definition at line 3320 of file OpenMPToLLVMIRTranslation.cpp.

◆ convertFlagsAttr()

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.

◆ convertHostOrTargetOperation()

static LogicalResult convertHostOrTargetOperation ( Operation op,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
static

Given an OpenMP MLIR operation, create the corresponding LLVM IR (including OpenMP runtime calls).

Definition at line 3431 of file OpenMPToLLVMIRTranslation.cpp.

◆ convertOmpAtomicCapture()

static LogicalResult convertOmpAtomicCapture ( omp::AtomicCaptureOp  atomicCaptureOp,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
static

◆ convertOmpAtomicRead()

static LogicalResult convertOmpAtomicRead ( Operation opInst,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
static

◆ convertOmpAtomicUpdate()

static LogicalResult convertOmpAtomicUpdate ( omp::AtomicUpdateOp &  opInst,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
static

◆ convertOmpAtomicWrite()

static LogicalResult convertOmpAtomicWrite ( Operation opInst,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
static

◆ convertOmpCritical()

static LogicalResult convertOmpCritical ( Operation opInst,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
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().

◆ convertOmpMasked()

static LogicalResult convertOmpMasked ( Operation opInst,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
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().

◆ convertOmpMaster()

static LogicalResult convertOmpMaster ( Operation opInst,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
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().

◆ convertOmpOpRegions()

static llvm::BasicBlock* convertOmpOpRegions ( Region region,
StringRef  blockName,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation,
LogicalResult &  bodyGenStatus,
SmallVectorImpl< llvm::PHINode * > *  continuationBlockPHIs = nullptr 
)
static

◆ convertOmpOrdered()

static LogicalResult convertOmpOrdered ( Operation opInst,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
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().

◆ convertOmpOrderedRegion()

static LogicalResult convertOmpOrderedRegion ( Operation opInst,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
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().

◆ convertOmpParallel()

static LogicalResult convertOmpParallel ( omp::ParallelOp  opInst,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
static

◆ convertOmpSections()

static LogicalResult convertOmpSections ( Operation opInst,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
static

◆ convertOmpSimd()

static LogicalResult convertOmpSimd ( Operation opInst,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
static

◆ convertOmpSingle()

static LogicalResult convertOmpSingle ( omp::SingleOp &  singleOp,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
static

◆ convertOmpTarget()

static LogicalResult convertOmpTarget ( Operation opInst,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
static

◆ convertOmpTargetData()

static LogicalResult convertOmpTargetData ( Operation op,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
static

Definition at line 2783 of file OpenMPToLLVMIRTranslation.cpp.

◆ convertOmpTaskgroupOp()

static LogicalResult convertOmpTaskgroupOp ( omp::TaskgroupOp  tgOp,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
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().

◆ convertOmpTaskOp()

static LogicalResult convertOmpTaskOp ( omp::TaskOp  taskOp,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
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().

◆ convertOmpTeams()

static LogicalResult convertOmpTeams ( omp::TeamsOp  op,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
static

Definition at line 975 of file OpenMPToLLVMIRTranslation.cpp.

◆ convertOmpThreadprivate()

static LogicalResult convertOmpThreadprivate ( Operation opInst,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
static

◆ convertOmpWsloop()

static LogicalResult convertOmpWsloop ( Operation opInst,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
static

◆ convertOrderKind()

static llvm::omp::OrderKind convertOrderKind ( std::optional< omp::ClauseOrderKind >  o)
static

Convert Order attribute to llvm::omp::OrderKind.

Definition at line 1594 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by convertOmpSimd().

◆ convertTargetDeviceOp()

static LogicalResult convertTargetDeviceOp ( Operation op,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
static

Definition at line 3548 of file OpenMPToLLVMIRTranslation.cpp.

◆ convertTargetOpsInNest()

static LogicalResult convertTargetOpsInNest ( Operation op,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
static

Definition at line 3554 of file OpenMPToLLVMIRTranslation.cpp.

◆ convertToCaptureClauseKind()

static llvm::OffloadEntriesInfoManager::OMPTargetGlobalVarEntryKind convertToCaptureClauseKind ( mlir::omp::DeclareTargetCaptureClause  captureClasue)
static

Definition at line 1986 of file OpenMPToLLVMIRTranslation.cpp.

◆ convertToDeviceClauseKind()

static llvm::OffloadEntriesInfoManager::OMPTargetDeviceClauseKind convertToDeviceClauseKind ( mlir::omp::DeclareTargetDeviceType  deviceClause)
static

Definition at line 1970 of file OpenMPToLLVMIRTranslation.cpp.

◆ createAlteredByCaptureMap()

static void createAlteredByCaptureMap ( MapInfoData mapData,
LLVM::ModuleTranslation moduleTranslation,
llvm::IRBuilderBase &  builder 
)
static

◆ createDeviceArgumentAccessor()

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

Definition at line 3133 of file OpenMPToLLVMIRTranslation.cpp.

References MapInfoData::MapClause, and MapInfoData::OriginalValue.

Referenced by convertOmpTarget().

◆ createReductionsAndCleanup()

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

Definition at line 715 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by convertOmpWsloop().

◆ findAllocaInsertPoint()

static llvm::OpenMPIRBuilder::InsertPointTy findAllocaInsertPoint ( llvm::IRBuilderBase &  builder,
const LLVM::ModuleTranslation moduleTranslation 
)
static

◆ genMapInfos()

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

Definition at line 2687 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by convertOmpTarget().

◆ getArrayElementSizeInBits()

uint64_t getArrayElementSizeInBits ( LLVM::LLVMArrayType  arrTy,
DataLayout dl 
)

Definition at line 2104 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::DataLayout::getTypeSizeInBits().

Referenced by getSizeInBytes().

◆ getDeclareTargetRefPtrSuffix()

static llvm::SmallString<64> getDeclareTargetRefPtrSuffix ( LLVM::GlobalOp  globalOp,
llvm::OpenMPIRBuilder &  ompBuilder 
)
static

Definition at line 2000 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::SymbolTable::Private.

Referenced by getRefPtrIfDeclareTarget().

◆ getFirstOrLastMappedMemberPtr()

static mlir::omp::MapInfoOp getFirstOrLastMappedMemberPtr ( mlir::omp::MapInfoOp  mapInfo,
bool  first 
)
static

Definition at line 2237 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by mapParentWithMembers().

◆ getIsByRef()

static ArrayRef<bool> getIsByRef ( std::optional< ArrayRef< bool >>  attr)
static

◆ getMapDataMemberIdx()

static int getMapDataMemberIdx ( MapInfoData mapData,
mlir::omp::MapInfoOp  memberOp 
)
static

◆ getProcBindKind()

static llvm::omp::ProcBindKind getProcBindKind ( omp::ClauseProcBindKind  kind)
static

Convert ProcBindKind from MLIR-generated enum to LLVM enum.

Definition at line 253 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by convertOmpParallel().

◆ getRefPtrIfDeclareTarget()

static llvm::Value* getRefPtrIfDeclareTarget ( mlir::Value  value,
LLVM::ModuleTranslation moduleTranslation 
)
static

◆ getSizeInBytes()

llvm::Value* getSizeInBytes ( DataLayout dl,
const mlir::Type type,
Operation clauseOp,
llvm::Value *  basePointer,
llvm::Type *  baseType,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)

◆ getTargetEntryUniqueInfo()

static bool getTargetEntryUniqueInfo ( llvm::TargetRegionEntryInfo &  targetInfo,
omp::TargetOp  targetOp,
llvm::StringRef  parentName = "" 
)
static

Definition at line 2999 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by convertOmpTarget().

◆ handleDeclareTargetMapVar()

static void handleDeclareTargetMapVar ( MapInfoData mapData,
LLVM::ModuleTranslation moduleTranslation,
llvm::IRBuilderBase &  builder,
llvm::Function *  func 
)
static

◆ inlineConvertOmpRegions()

static LogicalResult inlineConvertOmpRegions ( Region region,
StringRef  blockName,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation,
SmallVectorImpl< llvm::Value * > *  continuationBlockArgs = nullptr 
)
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().

◆ inlineOmpRegionCleanup()

static LogicalResult inlineOmpRegionCleanup ( llvm::SmallVectorImpl< Region * > &  cleanupRegions,
llvm::ArrayRef< llvm::Value * >  privateVariables,
LLVM::ModuleTranslation moduleTranslation,
llvm::IRBuilderBase &  builder,
StringRef  regionName,
bool  shouldLoadCleanupRegionArg = true 
)
static

◆ isDeclareTargetLink()

static bool isDeclareTargetLink ( mlir::Value  value)
static

Definition at line 2019 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::Value::getDefiningOp().

Referenced by checkIfPointerMap().

◆ isTargetDeviceOp()

static bool isTargetDeviceOp ( Operation op)
static

Definition at line 3411 of file OpenMPToLLVMIRTranslation.cpp.

◆ makeAtomicReductionGen()

static OwningAtomicReductionGen makeAtomicReductionGen ( omp::DeclareReductionOp  decl,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
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().

◆ makeReductionGen()

static OwningReductionGen makeReductionGen ( omp::DeclareReductionOp  decl,
llvm::IRBuilderBase &  builder,
LLVM::ModuleTranslation moduleTranslation 
)
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().

◆ mapInitializationArg()

template<typename T >
static void mapInitializationArg ( loop,
LLVM::ModuleTranslation moduleTranslation,
SmallVectorImpl< omp::DeclareReductionOp > &  reductionDecls,
unsigned  i 
)
static

◆ mapParentWithMembers()

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

◆ processIndividualMap()

static void processIndividualMap ( MapInfoData mapData,
size_t  mapDataIdx,
llvm::OpenMPIRBuilder::MapInfosTy combinedInfo,
bool  isTargetParams,
int  mapDataParentIdx = -1 
)
static

◆ processMapMembersWithParent()

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

◆ processMapWithMembersOf()

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

◆ targetOpSupported()

static bool targetOpSupported ( Operation opInst)
static

Definition at line 3019 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::Operation::emitError().

Referenced by convertOmpTarget().