MLIR 24.0.0git
OpenMPToLLVMIRTranslation.cpp File Reference
#include "mlir/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.h"
#include "mlir/Analysis/TopologicalSortUtils.h"
#include "mlir/Dialect/Arith/IR/Arith.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/Dialect/OpenMP/Utils/Utils.h"
#include "mlir/IR/Operation.h"
#include "mlir/Interfaces/SideEffectInterfaces.h"
#include "mlir/Support/LLVM.h"
#include "mlir/Target/LLVMIR/Dialect/OpenMPCommon.h"
#include "mlir/Target/LLVMIR/ModuleTranslation.h"
#include "llvm/ADT/ArrayRef.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/AMDGPUAddrSpace.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/NVPTXAddrSpace.h"
#include "llvm/Support/VirtualFileSystem.h"
#include "llvm/TargetParser/Triple.h"
#include "llvm/Transforms/Utils/ModuleUtils.h"
#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...
struct  PrivateVarsInfo::AllocatorPrivateInfo
struct  ComplexComparePattern
 Result of matching the decomposed complex equality pattern inside an atomic compare region. More...
struct  AtomicComparePatternInfo
 Holds the extracted comparison pattern information from an atomic compare region. More...

Typedefs

using IteratorStoreEntryTy

Functions

static omp::PrivateClauseOp findPrivatizer (Operation *from, SymbolRefAttr symbolName)
 Looks up from the operation from and returns the PrivateClauseOp with name symbolName.
static LogicalResult checkImplementationStatus (Operation &op)
 Check whether translation to LLVM IR for the given operation is currently supported.
static LogicalResult handleError (llvm::Error error, Operation &op)
template<typename T>
static LogicalResult handleError (llvm::Expected< T > &result, Operation &op)
static llvm::OpenMPIRBuilder::InsertPointTy findAllocInsertPoints (llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, llvm::SmallVectorImpl< llvm::BasicBlock * > *deallocBlocks=nullptr)
 Find the insertion point for allocas given the current insertion point for normal operations in the builder.
static llvm::CanonicalLoopInfo * findCurrentLoopInfo (LLVM::ModuleTranslation &moduleTranslation)
 Find the loop information structure for the loop nest being translated.
static llvm::Expected< llvm::BasicBlock * > convertOmpOpRegions (Region &region, 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.
static llvm::omp::ProcBindKind getProcBindKind (omp::ClauseProcBindKind kind)
 Convert ProcBindKind from MLIR-generated enum to LLVM enum.
static LogicalResult convertOmpMasked (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Converts an OpenMP 'masked' operation into LLVM IR using OpenMPIRBuilder.
static LogicalResult convertOmpMaster (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Converts an OpenMP 'master' operation into LLVM IR using OpenMPIRBuilder.
static LogicalResult convertOmpCritical (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Converts an OpenMP 'critical' operation into LLVM IR using OpenMPIRBuilder.
template<typename T>
static void collectReductionDecls (T op, SmallVectorImpl< omp::DeclareReductionOp > &reductions)
 Populates reductions with reduction declarations used in the given op.
static LogicalResult collectAndValidateTaskloopRedDecls (Operation *contextOp, std::optional< ArrayAttr > syms, StringRef opName, StringRef clauseName, SmallVectorImpl< omp::DeclareReductionOp > &out)
 Look up and validate the declare_reduction ops referenced by a reduction-like clause on the omp.taskloop.context translation path.
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.
static OwningReductionGen makeReductionGen (omp::DeclareReductionOp decl, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Create an OpenMPIRBuilder-compatible reduction generator for the given reduction declaration.
static OwningAtomicReductionGen makeAtomicReductionGen (omp::DeclareReductionOp decl, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Create an OpenMPIRBuilder-compatible atomic reduction generator for the given reduction declaration.
static OwningDataPtrPtrReductionGen makeRefDataPtrGen (omp::DeclareReductionOp decl, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, bool isByRef)
 Create an OpenMPIRBuilder-compatible data_ptr_ptr reduction generator for the given reduction declaration.
static LogicalResult convertOmpOrdered (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Converts an OpenMP 'ordered' operation into LLVM IR using OpenMPIRBuilder.
static LogicalResult convertOmpOrderedRegion (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Converts an OpenMP 'ordered_region' operation into LLVM IR using OpenMPIRBuilder.
template<typename T>
static LogicalResult allocReductionVars (T op, 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.
template<typename T>
static void mapInitializationArgs (T loop, LLVM::ModuleTranslation &moduleTranslation, llvm::IRBuilderBase &builder, SmallVectorImpl< omp::DeclareReductionOp > &reductionDecls, DenseMap< Value, llvm::Value * > &reductionVariableMap, unsigned i)
 Map input arguments to reduction initialization region.
static void setInsertPointForPossiblyEmptyBlock (llvm::IRBuilderBase &builder, llvm::BasicBlock *block=nullptr)
allocatedType moduleTranslation static convertType(allocatedType) 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
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< boolgetIsByRef (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. 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.
static llvm::Value * materializeRegionArgValue (llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, BlockArgument regionArg, llvm::Value *value)
static llvm::Expected< llvm::Value * > initPrivateVar (llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, omp::PrivateClauseOp &privDecl, llvm::Value *nonPrivateVar, BlockArgument &blockArg, llvm::Value *llvmPrivateVar, llvm::BasicBlock *privInitBlock, llvm::DenseMap< Value, Value > *mappedPrivateVars=nullptr)
 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.
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)
 Version of initPrivateVar which looks up the nonPrivateVar from mlirPrivVar.
static llvm::Error initPrivateVars (llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, PrivateVarsInfo &privateVarsInfo, llvm::DenseMap< Value, Value > *mappedPrivateVars=nullptr)
template<typename T>
static llvm::Expected< llvm::BasicBlock * > allocatePrivateVars (T op, 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. Returns the basic block which comes after all of these allocations. llvm::Value * for each of these private variables are populated in llvmPrivateVars.
static bool opIsInSingleThread (mlir::Operation *op)
 This can't always be determined statically, but when we can, it is good to avoid generating compiler-added barriers which will deadlock the program.
static LogicalResult copyFirstPrivateVars (mlir::Operation *op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, SmallVectorImpl< llvm::Value * > &moldVars, ArrayRef< llvm::Value * > llvmPrivateVars, SmallVectorImpl< omp::PrivateClauseOp > &privateDecls, bool insertBarrier, llvm::DenseMap< Value, Value > *mappedPrivateVars=nullptr)
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)
template<typename T>
static LogicalResult cleanupPrivateVars (T op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, Location loc, PrivateVarsInfo &privateVarsInfo)
static bool constructIsCancellable (Operation *op)
 Returns true if the construct contains omp.cancel or omp.cancellation_point.
static llvm::Value * emitTaskReductionInitCall (ArrayRef< omp::DeclareReductionOp > redDecls, ArrayRef< llvm::Value * > origPtrs, StringRef helperNamePrefix, llvm::IRBuilderBase &builder, llvm::OpenMPIRBuilder::InsertPointTy allocaIP, LLVM::ModuleTranslation &moduleTranslation, bool isModifier, bool isWorksharing)
 Emit the per-taskgroup task_reduction descriptor array and the __kmpc_taskred_init runtime call. origPtrs holds the LLVM values for the original (shared) variables, one per declaration in redDecls. builder must be set to the point at which the descriptor stores and the init call should be emitted; the descriptor array itself is allocated at allocaIP. helperNamePrefix is used to disambiguate the generated init/combiner helper symbol names between taskgroup and taskloop callers.
static void emitTaskReductionModifierFini (bool isWorksharing, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Emits __kmpc_task_reduction_modifier_fini(loc, gtid, is_ws) at the current builder insertion point, closing the task-reduction scope opened by the task reduction modifier on a parallel or worksharing construct.
static LogicalResult convertOmpSections (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
static LogicalResult convertOmpScope (omp::ScopeOp &scopeOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Converts an OpenMP scope construct into LLVM IR.
static LogicalResult convertOmpSingle (omp::SingleOp &singleOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Converts an OpenMP single construct into LLVM IR using OpenMPIRBuilder.
static omp::DistributeOp getDistributeCapturingTeamsReduction (omp::TeamsOp teamsOp)
static LogicalResult convertOmpTeams (omp::TeamsOp op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
static llvm::omp::RTLDependenceKindTy convertDependKind (mlir::omp::ClauseTaskDepend kind)
static void buildDependDataLocator (std::optional< ArrayAttr > dependKinds, OperandRange dependVars, LLVM::ModuleTranslation &moduleTranslation, SmallVectorImpl< llvm::OpenMPIRBuilder::DependData > &dds)
static void pushCancelFinalizationCB (SmallVectorImpl< llvm::UncondBrInst * > &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. 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.
static void popCancelFinalizationCB (const ArrayRef< llvm::UncondBrInst * > cancelTerminators, llvm::OpenMPIRBuilder &ompBuilder, const llvm::OpenMPIRBuilder::InsertPointTy &afterIP)
 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.
static void storeAffinityEntry (llvm::IRBuilderBase &builder, llvm::OpenMPIRBuilder &ompBuilder, llvm::Value *affinityList, llvm::Value *index, llvm::Value *addr, llvm::Value *len)
static void fillAffinityLocators (Operation::operand_range affinityVars, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, llvm::Value *affinityList)
static mlir::LogicalResult convertIteratorRegion (llvm::Value *linearIV, IteratorInfo &iterInfo, mlir::Block &iteratorRegionBlock, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
static mlir::LogicalResult fillIteratorLoop (mlir::omp::IteratorOp itersOp, llvm::IRBuilderBase &builder, mlir::LLVM::ModuleTranslation &moduleTranslation, IteratorInfo &iterInfo, llvm::StringRef loopName, IteratorStoreEntryTy genStoreEntry)
static mlir::LogicalResult buildAffinityData (mlir::omp::TaskOp &taskOp, llvm::IRBuilderBase &builder, mlir::LLVM::ModuleTranslation &moduleTranslation, llvm::OpenMPIRBuilder::AffinityData &ad)
static mlir::LogicalResult buildDependData (OperandRange dependVars, std::optional< ArrayAttr > dependKinds, OperandRange dependIterated, std::optional< ArrayAttr > dependIteratedKinds, llvm::IRBuilderBase &builder, mlir::LLVM::ModuleTranslation &moduleTranslation, llvm::OpenMPIRBuilder::DependenciesInfo &taskDeps)
static LogicalResult convertOmpTaskOp (omp::TaskOp taskOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Converts an OpenMP task construct into LLVM IR using OpenMPIRBuilder.
static LogicalResult convertOmpTaskloopWrapperOp (omp::TaskloopWrapperOp loopWrapperOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 The correct entry point is convertOmpTaskloopContextOp. This gets called whilst lowering the body of the taskloop context (i.e. the task function).
static llvm::Expected< llvm::Value * > lookupOrTranslatePureValue (Value value, LLVM::ModuleTranslation &moduleTranslation, llvm::IRBuilderBase &builder)
 Look up the given value in the mapping, and if it's not there, translate its defining operation at the current builder insertion point. Only pure, regionless operations are supported because the same operation will later be translated again when the taskloop body itself is lowered.
static llvm::Error computeTaskloopBounds (omp::LoopNestOp loopOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, llvm::Value *&lbVal, llvm::Value *&ubVal, llvm::Value *&stepVal)
static LogicalResult convertOmpTaskloopContextOp (omp::TaskloopContextOp contextOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
static llvm::Function * emitTaskReductionInitFn (omp::DeclareReductionOp decl, StringRef baseName, LLVM::ModuleTranslation &moduleTranslation)
 Build an outlined init helper for a task_reduction declare_reduction op. Signature: void(ptr priv, ptr orig). For non-byref reductions, the init region's mold argument is mapped following the same rule as the regular reduction path (mapInitializationArgs): a non-pointer mold loads the value from orig, while a pointer-typed mold receives orig directly. The yielded value is stored into priv.
static llvm::Function * emitTaskReductionCombFn (omp::DeclareReductionOp decl, StringRef baseName, LLVM::ModuleTranslation &moduleTranslation)
 Build an outlined combiner helper for a task_reduction declare_reduction op. Signature: void(ptr lhs, ptr rhs). For non-byref reductions, the values at *lhs and *rhs are loaded, fed into the combiner region, and the yielded scalar is stored back into *lhs.
static LogicalResult convertOmpTaskgroupOp (omp::TaskgroupOp tgOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Converts an OpenMP taskgroup construct into LLVM IR using OpenMPIRBuilder.
static LogicalResult convertOmpInteropInitOp (omp::InteropInitOp initOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
static LogicalResult convertOmpInteropDestroyOp (omp::InteropDestroyOp destroyOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
static LogicalResult convertOmpInteropUseOp (omp::InteropUseOp useOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
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.
static LogicalResult convertOmpParallel (omp::ParallelOp opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Converts the OpenMP parallel operation to LLVM IR.
static llvm::omp::OrderKind convertOrderKind (std::optional< omp::ClauseOrderKind > o)
 Convert Order attribute to llvm::omp::OrderKind.
static LogicalResult convertOmpSimd (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Converts an OpenMP simd loop into LLVM IR using OpenMPIRBuilder.
static LogicalResult convertOmpLoopNest (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Converts an OpenMP loop nest into LLVM IR using OpenMPIRBuilder.
static LogicalResult convertOmpCanonicalLoopOp (omp::CanonicalLoopOp op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Convert an omp.canonical_loop to LLVM-IR.
static LogicalResult applyUnrollHeuristic (omp::UnrollHeuristicOp op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Apply a #pragma omp unroll / "!$omp unroll" transformation using the OpenMPIRBuilder.
static LogicalResult applyUnrollFull (omp::UnrollFullOp op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Apply a #pragma omp unroll full / !$omp unroll full transformation using the OpenMPIRBuilder.
static LogicalResult applyUnrollPartial (omp::UnrollPartialOp op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Apply a #pragma omp unroll partial / !$omp unroll partial transformation using the OpenMPIRBuilder.
static LogicalResult applyTile (omp::TileOp op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Apply a #pragma omp tile / !$omp tile transformation using the OpenMPIRBuilder.
static LogicalResult applyFuse (omp::FuseOp op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Apply a #pragma omp fuse / !$omp fuse transformation using the OpenMPIRBuilder.
static llvm::AtomicOrdering convertAtomicOrdering (std::optional< omp::ClauseMemoryOrderKind > ao)
 Convert an Atomic Ordering attribute to llvm::AtomicOrdering.
static llvm::AtomicOrdering getAtomicCompareFailureOrdering (omp::AtomicCompareOp atomicCompareOp, llvm::AtomicOrdering atomicOrdering)
 Compute the cmpxchg failure ordering for an atomic compare op: use the fail clause ordering when present (the verifier guarantees it is a valid cmpxchg failure ordering), otherwise the strongest failure ordering derived from the success ordering (which matches the OpenMPIRBuilder default).
static LogicalResult convertOmpAtomicRead (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Convert omp.atomic.read operation to LLVM IR.
static LogicalResult convertOmpAtomicWrite (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Converts an omp.atomic.write operation to LLVM IR.
static llvm::AtomicRMWInst::BinOp convertBinOpToAtomic (Operation &op)
 Converts an LLVM dialect binary operation to the corresponding enum value for atomicrmw supported binary operation.
static void extractAtomicControlFlags (omp::AtomicUpdateOp atomicUpdateOp, bool &isIgnoreDenormalMode, bool &isFineGrainedMemory, bool &isRemoteMemory)
static LogicalResult convertOmpAtomicUpdate (omp::AtomicUpdateOp &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Converts an OpenMP atomic update operation using OpenMPIRBuilder.
static std::optional< llvm::omp::OMPAtomicCompareOp > convertICmpPredicateToAtomicCompareOp (LLVM::ICmpPredicate predicate)
 Helper to extract the OMPAtomicCompareOp from an integer comparison predicate. Returns std::nullopt for unsupported predicates.
static std::optional< llvm::omp::OMPAtomicCompareOp > convertFCmpPredicateToAtomicCompareOp (LLVM::FCmpPredicate predicate)
 Helper to extract the OMPAtomicCompareOp from a floating-point comparison predicate. Returns std::nullopt for unsupported predicates.
static ComplexComparePattern detectComplexCompareEq (Block &block)
 Detect a decomposed complex equality comparison in an atomic compare region: re_x = llvm.extractvalue xval[0] re_e = llvm.extractvalue eStruct[0] cmp_re = llvm.fcmp "oeq" re_x, re_e im_x = llvm.extractvalue xval[1] im_e = llvm.extractvalue eStruct[1] cmp_im = llvm.fcmp "oeq" im_x, im_e cmp = llvm.and cmp_re, cmp_im (llvm.or would be NE) It is recognised by an and/or whose operands are both fcmps operating on extractvalues, one chain rooted at the block argument (x) and the other at the expected complex value (e).
static void emitComplexAtomicCmpXchg (llvm::IRBuilderBase &builder, llvm::Value *llvmX, llvm::Type *complexTy, llvm::Value *eVal, llvm::Value *dVal, llvm::AtomicOrdering atomicOrdering, llvm::AtomicOrdering failOrdering, bool isWeak, llvm::Value *&oldComplex, llvm::Value *&cmpOk)
 Emit an IEEE-754-correct cmpxchg for a complex (struct-typed) atomic compare with fcmp oeq. The old value of X is returned (as the complex struct type) in oldComplex and the success flag (i1) in cmpOk. failOrdering is the memory ordering used when the compare-exchange does not store; it must be a valid cmpxchg failure ordering.
static LogicalResult extractAtomicComparePattern (Block &block, llvm::function_ref< llvm::Value *(mlir::Value)> materializeValue, omp::AtomicCompareOp atomicCompareOp, AtomicComparePatternInfo &info)
 Extract comparison predicate, expected value (e), desired value (d), and related flags from an atomic compare region block by scanning for icmp/fcmp/select/min/max operations.
static LogicalResult convertOmpAtomicCapture (omp::AtomicCaptureOp atomicCaptureOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
static LogicalResult convertOmpAtomicCompare (omp::AtomicCompareOp atomicCompareOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Converts an omp.atomic.compare operation to LLVM IR.
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.
static llvm::OffloadEntriesInfoManager::OMPTargetDeviceClauseKind convertToDeviceClauseKind (mlir::omp::DeclareTargetDeviceType deviceClause)
static llvm::OffloadEntriesInfoManager::OMPTargetGlobalVarEntryKind convertToCaptureClauseKind (mlir::omp::DeclareTargetCaptureClause captureClause)
static OperationgetGlobalOpFromValue (Value value)
static Value getBaseValueForTypeLookup (Value value)
static llvm::SmallString< 64 > getDeclareTargetRefPtrSuffix (LLVM::GlobalOp globalOp, llvm::OpenMPIRBuilder &ompBuilder, llvm::vfs::FileSystem &vfs)
static bool isDeclareTargetLink (Value value)
static bool isDeclareTargetTo (Value value)
static llvm::Value * getRefPtrIfDeclareTarget (Value value, LLVM::ModuleTranslation &moduleTranslation)
static uint64_t getArrayElementSizeInBits (LLVM::LLVMArrayType arrTy, DataLayout &dl)
static bool checkIfPointerMap (omp::MapInfoOp mapOp)
static llvm::Value * getSizeInBytes (DataLayout &dl, const mlir::Type &type, Operation *clauseOp, llvm::Value *basePointer, llvm::Type *baseType, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
static llvm::omp::OpenMPOffloadMappingFlags convertClauseMapFlags (omp::ClauseMapFlags mlirFlags)
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 void sortMapIndices (llvm::SmallVectorImpl< size_t > &indices, omp::MapInfoOp mapInfo, bool first=true)
static omp::MapInfoOp getFirstOrLastMappedMemberPtr (omp::MapInfoOp mapInfo, bool first)
static 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:
static void getAsIntegers (ArrayAttr values, llvm::SmallVector< int64_t > &ints)
static void getOverlappedMembers (llvm::SmallVectorImpl< size_t > &overlapMapDataIdxs, omp::MapInfoOp parentOp)
static void processIndividualMap (llvm::IRBuilderBase &builder, llvm::OpenMPIRBuilder &ompBuilder, MapInfoData &mapData, size_t mapDataIdx, MapInfosTy &combinedInfo, TargetDirectiveEnumTy targetDirective, llvm::omp::OpenMPOffloadMappingFlags memberOfFlag=llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_NONE, bool isTargetParam=true, int mapDataParentIdx=-1)
 This function handles the insertion of a single item of map data from MapInfoData into the OMPIRBuilder's MapInfo list. Utilising this function means the map being inserted can be treated as a non-parent map entity, if the memberOfFlag is set then the map being inserted is treated as a member map of a larger entity. The insertion into the MapInfo list of the OMPIRBuilder can vary based on a number of factors, such as if it's a ref_ptr or ref_ptee map, if it's a member of a record, what construct the map belongs to and the various map type bit flags that are set for the map.
static void mapParentWithMembers (LLVM::ModuleTranslation &moduleTranslation, llvm::IRBuilderBase &builder, llvm::OpenMPIRBuilder &ompBuilder, DataLayout &dl, MapInfosTy &combinedInfo, MapInfoData &mapData, uint64_t mapDataIndex, llvm::omp::OpenMPOffloadMappingFlags memberOfFlag, TargetDirectiveEnumTy targetDirective)
static void processMapWithMembersOf (LLVM::ModuleTranslation &moduleTranslation, llvm::IRBuilderBase &builder, llvm::OpenMPIRBuilder &ompBuilder, DataLayout &dl, MapInfosTy &combinedInfo, MapInfoData &mapData, uint64_t mapDataIndex, TargetDirectiveEnumTy targetDirective)
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, TargetDirectiveEnumTy targetDirective)
static llvm::Expected< llvm::Function * > emitUserDefinedMapper (Operation *declMapperOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, llvm::StringRef mapperFuncName, TargetDirectiveEnumTy targetDirective)
static llvm::Expected< llvm::Function * > getOrCreateUserDefinedMapperFunc (Operation *op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, TargetDirectiveEnumTy targetDirective)
static LogicalResult convertOmpTargetData (Operation *op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
static LogicalResult convertOmpDistribute (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
static LogicalResult convertFlagsAttr (Operation *op, mlir::omp::FlagsAttr attribute, LLVM::ModuleTranslation &moduleTranslation)
 Lowers the FlagsAttr which is applied to the module when offloading. This attribute contains OpenMP RTL globals that can be passed as flags to the frontend, otherwise they are set to default.
static void getTargetEntryUniqueInfo (llvm::TargetRegionEntryInfo &targetInfo, omp::TargetOp targetOp, llvm::OpenMPIRBuilder &ompBuilder, llvm::vfs::FileSystem &vfs, llvm::StringRef parentName="")
static llvm::IRBuilderBase::InsertPoint createDeviceArgumentAccessor (omp::TargetOp targetOp, 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, llvm::ArrayRef< llvm::IRBuilderBase::InsertPoint > deallocIPs)
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. operand evaluated outside of the target region), based on their uses inside of the target region.
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. 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.
static std::optional< int64_textractConstInteger (Value value)
 If the given value is defined by an llvm.mlir.constant operation and it is of an integer type, return its value.
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.
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.
static llvm::omp::OMPDynGroupprivateFallbackType getDynGroupprivateFallbackType (omp::FallbackModifierAttr fallbackAttr)
static LogicalResult convertOmpTarget (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
static LogicalResult convertDeclareTargetAttr (Operation *op, mlir::omp::DeclareTargetAttr attribute, llvm::OpenMPIRBuilder *ompBuilder, LLVM::ModuleTranslation &moduleTranslation)
static bool isHostDeviceOp (Operation *op)
static llvm::Function * getOmpTargetAlloc (llvm::IRBuilderBase &builder, llvm::Module *llvmModule)
template<typename T>
static llvm::Value * getAllocationSize (llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, T op)
template<>
llvm::Value * getAllocationSize (llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, omp::TargetAllocMemOp op)
static LogicalResult convertTargetAllocMemOp (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
static LogicalResult convertAllocSharedMemOp (omp::AllocSharedMemOp allocMemOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
static LogicalResult convertAllocateDirOp (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, const OpenMPDialectLLVMIRTranslationInterface &ompIface)
static LogicalResult convertAllocateFreeOp (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, const OpenMPDialectLLVMIRTranslationInterface &ompIface)
static llvm::Function * getOmpTargetFree (llvm::IRBuilderBase &builder, llvm::Module *llvmModule)
static LogicalResult convertTargetFreeMemOp (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
static LogicalResult convertFreeSharedMemOp (omp::FreeSharedMemOp freeMemOp, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
static LogicalResult convertOmpGroupprivate (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation)
 Converts an OpenMP groupprivate operation into LLVM IR.

Variables

 owningReductionGens [i]
 nullptr
 atomicGen
 owningDataPtrPtrReductionGens [i]

Typedef Documentation

◆ IteratorStoreEntryTy

Initial value:
llvm::function_ref<void(llvm::Value *linearIV, mlir::omp::YieldOp yield)>

Definition at line 2975 of file OpenMPToLLVMIRTranslation.cpp.

Function Documentation

◆ allocAndInitializeReductionVars()

template<typename OP>
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

◆ allocatePrivateVars()

template<typename T>
llvm::Expected< llvm::BasicBlock * > allocatePrivateVars ( T op,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation,
PrivateVarsInfo & privateVarsInfo,
const llvm::OpenMPIRBuilder::InsertPointTy & allocaIP,
llvm::DenseMap< Value, Value > * mappedPrivateVars = nullptr )
static

◆ allocReductionVars()

template<typename T>
LogicalResult allocReductionVars ( T op,
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 )
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 1364 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::LLVM::ModuleTranslation::convertType(), mlir::Region::empty(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::getType(), inlineConvertOmpRegions(), mlir::LLVM::ModuleTranslation::mapValue(), mlir::omp::opInSharedDeviceContext(), and success().

Referenced by allocAndInitializeReductionVars(), convertOmpParallel(), convertOmpSimd(), and convertOmpWsloop().

◆ applyFuse()

LogicalResult applyFuse ( omp::FuseOp op,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation )
static

◆ applyTile()

LogicalResult applyTile ( omp::TileOp op,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation )
static

◆ applyUnrollFull()

LogicalResult applyUnrollFull ( omp::UnrollFullOp op,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation )
static

Apply a #pragma omp unroll full / !$omp unroll full transformation using the OpenMPIRBuilder.

Definition at line 5487 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::invalidateOmpLoop(), mlir::LLVM::ModuleTranslation::lookupOMPLoop(), and success().

◆ applyUnrollHeuristic()

LogicalResult applyUnrollHeuristic ( omp::UnrollHeuristicOp op,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation )
static

Apply a #pragma omp unroll / "!$omp unroll" transformation using the OpenMPIRBuilder.

Definition at line 5468 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::invalidateOmpLoop(), mlir::LLVM::ModuleTranslation::lookupOMPLoop(), and success().

◆ applyUnrollPartial()

LogicalResult applyUnrollPartial ( omp::UnrollPartialOp op,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation )
static

Apply a #pragma omp unroll partial / !$omp unroll partial transformation using the OpenMPIRBuilder.

Definition at line 5506 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::invalidateOmpLoop(), mlir::LLVM::ModuleTranslation::lookupOMPLoop(), and success().

◆ buildAffinityData()

mlir::LogicalResult buildAffinityData ( mlir::omp::TaskOp & taskOp,
llvm::IRBuilderBase & builder,
mlir::LLVM::ModuleTranslation & moduleTranslation,
llvm::OpenMPIRBuilder::AffinityData & ad )
static

◆ buildDependData()

mlir::LogicalResult buildDependData ( OperandRange dependVars,
std::optional< ArrayAttr > dependKinds,
OperandRange dependIterated,
std::optional< ArrayAttr > dependIteratedKinds,
llvm::IRBuilderBase & builder,
mlir::LLVM::ModuleTranslation & moduleTranslation,
llvm::OpenMPIRBuilder::DependenciesInfo & taskDeps )
static

◆ buildDependDataLocator()

void buildDependDataLocator ( std::optional< ArrayAttr > dependKinds,
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,
OperandRange bounds )
static

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

We must calculate the initial pointer offset to pass across, this function performs this using bounds.

TODO/WARNING: This only supports Fortran's column major indexing currently as is noted in the note below and comments in the function, we must extend this function when we add a C++ frontend. 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 7561 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::LLVM::ModuleTranslation::lookupValue().

Referenced by createAlteredByCaptureMap().

◆ castOrGetParentOfType()

template<typename OpTy>
OpTy castOrGetParentOfType ( Operation * op,
bool immediateParent = false )
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 8985 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::Operation::getParentOfType(), and mlir::Operation::getParentOp().

Referenced by initTargetDefaultAttrs(), and initTargetRuntimeAttrs().

◆ checkIfPointerMap()

bool checkIfPointerMap ( omp::MapInfoOp mapOp)
static

◆ checkImplementationStatus()

LogicalResult checkImplementationStatus ( Operation & op)
static

◆ cleanupPrivateVars()

◆ collectAndValidateTaskloopRedDecls()

LogicalResult collectAndValidateTaskloopRedDecls ( Operation * contextOp,
std::optional< ArrayAttr > syms,
StringRef opName,
StringRef clauseName,
SmallVectorImpl< omp::DeclareReductionOp > & out )
static

Look up and validate the declare_reduction ops referenced by a reduction-like clause on the omp.taskloop.context translation path.

Only the non-byref, single-init-arg, no-cleanup form is supported in this initial cut; richer shapes are rejected here with a diagnostic. syms is the clause's symbol list (e.g. getReductionSyms() or getInReductionSyms()), opName is the textual op name used in diagnostics, and clauseName distinguishes "reduction" from "in_reduction" in those diagnostics.

Definition at line 1075 of file OpenMPToLLVMIRTranslation.cpp.

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

Referenced by convertOmpTaskloopContextOp(), and convertOmpTaskOp().

◆ collectMapDataFromMapOperands()

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

◆ collectReductionDecls()

template<typename T>
void collectReductionDecls ( T op,
SmallVectorImpl< omp::DeclareReductionOp > & reductions )
static

◆ computeTaskloopBounds()

llvm::Error computeTaskloopBounds ( omp::LoopNestOp loopOp,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation,
llvm::Value *& lbVal,
llvm::Value *& ubVal,
llvm::Value *& stepVal )
static

Definition at line 3614 of file OpenMPToLLVMIRTranslation.cpp.

References lookupOrTranslatePureValue().

Referenced by convertOmpTaskloopContextOp().

◆ constructIsCancellable()

bool constructIsCancellable ( Operation * op)
static

Returns true if the construct contains omp.cancel or omp.cancellation_point.

Definition at line 2212 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::WalkResult::advance(), mlir::WalkResult::interrupt(), and mlir::Operation::walk().

Referenced by convertOmpParallel(), convertOmpSections(), and pushCancelFinalizationCB().

◆ convertAllocateDirOp()

LogicalResult convertAllocateDirOp ( Operation & opInst,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation,
const OpenMPDialectLLVMIRTranslationInterface & ompIface )
static

◆ convertAllocateFreeOp()

LogicalResult convertAllocateFreeOp ( Operation & opInst,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation,
const OpenMPDialectLLVMIRTranslationInterface & ompIface )
static

◆ convertAllocSharedMemOp()

LogicalResult convertAllocSharedMemOp ( omp::AllocSharedMemOp allocMemOp,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation )
static

◆ convertAtomicOrdering()

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

◆ convertBinOpToAtomic()

llvm::AtomicRMWInst::BinOp convertBinOpToAtomic ( Operation & op)
static

Converts an LLVM dialect binary operation to the corresponding enum value for atomicrmw supported binary operation.

Definition at line 5697 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by convertOmpAtomicCapture(), and convertOmpAtomicUpdate().

◆ convertCancellationConstructType()

llvm::omp::Directive convertCancellationConstructType ( omp::ClauseCancellationConstructType directive)
static

◆ convertClauseMapFlags()

llvm::omp::OpenMPOffloadMappingFlags convertClauseMapFlags ( omp::ClauseMapFlags mlirFlags)
static

◆ convertDeclareTargetAttr()

◆ convertDependKind()

llvm::omp::RTLDependenceKindTy convertDependKind ( mlir::omp::ClauseTaskDepend kind)
static

Definition at line 2622 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by buildDependData(), and buildDependDataLocator().

◆ convertFCmpPredicateToAtomicCompareOp()

std::optional< llvm::omp::OMPAtomicCompareOp > convertFCmpPredicateToAtomicCompareOp ( LLVM::FCmpPredicate predicate)
static

Helper to extract the OMPAtomicCompareOp from a floating-point comparison predicate. Returns std::nullopt for unsupported predicates.

Definition at line 5834 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by extractAtomicComparePattern().

◆ convertFlagsAttr()

LogicalResult convertFlagsAttr ( Operation * op,
mlir::omp::FlagsAttr attribute,
LLVM::ModuleTranslation & moduleTranslation )
static

Lowers the FlagsAttr which is applied to the module 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 8698 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::Operation::emitOpError(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and success().

◆ convertFreeSharedMemOp()

LogicalResult convertFreeSharedMemOp ( omp::FreeSharedMemOp freeMemOp,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation )
static

◆ convertICmpPredicateToAtomicCompareOp()

std::optional< llvm::omp::OMPAtomicCompareOp > convertICmpPredicateToAtomicCompareOp ( LLVM::ICmpPredicate predicate)
static

Helper to extract the OMPAtomicCompareOp from an integer comparison predicate. Returns std::nullopt for unsupported predicates.

Definition at line 5816 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by extractAtomicComparePattern().

◆ convertIteratorRegion()

mlir::LogicalResult convertIteratorRegion ( llvm::Value * linearIV,
IteratorInfo & iterInfo,
mlir::Block & iteratorRegionBlock,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation )
static

◆ convertOmpAtomicCapture()

◆ convertOmpAtomicCompare()

LogicalResult convertOmpAtomicCompare ( omp::AtomicCompareOp atomicCompareOp,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation )
static

◆ convertOmpAtomicRead()

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

◆ convertOmpAtomicUpdate()

◆ convertOmpAtomicWrite()

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

◆ convertOmpCancel()

LogicalResult convertOmpCancel ( omp::CancelOp op,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation )
static

◆ convertOmpCancellationPoint()

LogicalResult convertOmpCancellationPoint ( omp::CancellationPointOp op,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation )
static

◆ convertOmpCanonicalLoopOp()

LogicalResult convertOmpCanonicalLoopOp ( omp::CanonicalLoopOp op,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation )
static

◆ convertOmpCritical()

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

◆ convertOmpDistribute()

◆ convertOmpGroupprivate()

◆ convertOmpInteropDestroyOp()

LogicalResult convertOmpInteropDestroyOp ( omp::InteropDestroyOp destroyOp,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation )
static

◆ convertOmpInteropInitOp()

LogicalResult convertOmpInteropInitOp ( omp::InteropInitOp initOp,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation )
static

◆ convertOmpInteropUseOp()

LogicalResult convertOmpInteropUseOp ( omp::InteropUseOp useOp,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation )
static

◆ convertOmpLoopNest()

◆ convertOmpMasked()

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

◆ convertOmpMaster()

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

Converts an OpenMP 'master' operation into LLVM IR using OpenMPIRBuilder.

Definition at line 922 of file OpenMPToLLVMIRTranslation.cpp.

References checkImplementationStatus(), convertOmpOpRegions(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), and success().

◆ convertOmpOpRegions()

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

◆ convertOmpOrdered()

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

Converts an OpenMP 'ordered' operation into LLVM IR using OpenMPIRBuilder.

Definition at line 1281 of file OpenMPToLLVMIRTranslation.cpp.

References checkImplementationStatus(), findAllocInsertPoints(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::lookupValues(), and success().

◆ convertOmpOrderedRegion()

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 1314 of file OpenMPToLLVMIRTranslation.cpp.

References checkImplementationStatus(), convertOmpOpRegions(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), and success().

◆ convertOmpParallel()

◆ convertOmpScope()

◆ convertOmpSections()

◆ convertOmpSimd()

◆ convertOmpSingle()

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

◆ convertOmpTarget()

◆ convertOmpTargetData()

◆ convertOmpTaskgroupOp()

LogicalResult convertOmpTaskgroupOp ( omp::TaskgroupOp tgOp,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation )
static

◆ convertOmpTaskloopContextOp()

◆ convertOmpTaskloopWrapperOp()

LogicalResult convertOmpTaskloopWrapperOp ( omp::TaskloopWrapperOp loopWrapperOp,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation )
static

The correct entry point is convertOmpTaskloopContextOp. This gets called whilst lowering the body of the taskloop context (i.e. the task function).

Definition at line 3541 of file OpenMPToLLVMIRTranslation.cpp.

References checkImplementationStatus(), convertOmpOpRegions(), handleError(), and success().

◆ convertOmpTaskOp()

◆ convertOmpTaskwaitOp()

LogicalResult convertOmpTaskwaitOp ( omp::TaskwaitOp twOp,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation )
static

◆ convertOmpTeams()

◆ convertOmpThreadprivate()

◆ convertOmpWsloop()

◆ convertOrderKind()

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

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

Definition at line 5088 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by convertOmpSimd().

◆ convertTargetAllocMemOp()

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

◆ convertTargetFreeMemOp()

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

◆ convertToCaptureClauseKind()

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

Definition at line 6877 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by convertDeclareTargetAttr().

◆ convertToDeviceClauseKind()

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

Definition at line 6861 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by convertDeclareTargetAttr().

◆ copyFirstPrivateVars() [1/2]

◆ copyFirstPrivateVars() [2/2]

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

Definition at line 2149 of file OpenMPToLLVMIRTranslation.cpp.

References copyFirstPrivateVars().

◆ createAlteredByCaptureMap()

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

◆ createDeviceArgumentAccessor()

llvm::IRBuilderBase::InsertPoint createDeviceArgumentAccessor ( omp::TargetOp targetOp,
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,
llvm::ArrayRef< llvm::IRBuilderBase::InsertPoint > deallocIPs )
static

◆ createReductionsAndCleanup()

template<class OP>
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

◆ detectComplexCompareEq()

ComplexComparePattern detectComplexCompareEq ( Block & block)
static

Detect a decomposed complex equality comparison in an atomic compare region: re_x = llvm.extractvalue xval[0] re_e = llvm.extractvalue eStruct[0] cmp_re = llvm.fcmp "oeq" re_x, re_e im_x = llvm.extractvalue xval[1] im_e = llvm.extractvalue eStruct[1] cmp_im = llvm.fcmp "oeq" im_x, im_e cmp = llvm.and cmp_re, cmp_im (llvm.or would be NE) It is recognised by an and/or whose operands are both fcmps operating on extractvalues, one chain rooted at the block argument (x) and the other at the expected complex value (e).

Definition at line 5870 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::Block::getArgument(), mlir::Value::getDefiningOp(), mlir::Operation::getOperand(), mlir::Block::getOperations(), and result.

Referenced by convertOmpAtomicCompare(), and extractAtomicComparePattern().

◆ emitComplexAtomicCmpXchg()

void emitComplexAtomicCmpXchg ( llvm::IRBuilderBase & builder,
llvm::Value * llvmX,
llvm::Type * complexTy,
llvm::Value * eVal,
llvm::Value * dVal,
llvm::AtomicOrdering atomicOrdering,
llvm::AtomicOrdering failOrdering,
bool isWeak,
llvm::Value *& oldComplex,
llvm::Value *& cmpOk )
static

Emit an IEEE-754-correct cmpxchg for a complex (struct-typed) atomic compare with fcmp oeq. The old value of X is returned (as the complex struct type) in oldComplex and the success flag (i1) in cmpOk. failOrdering is the memory ordering used when the compare-exchange does not store; it must be a valid cmpxchg failure ordering.

Definition at line 5907 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by convertOmpAtomicCapture(), and convertOmpAtomicCompare().

◆ emitTaskReductionCombFn()

llvm::Function * emitTaskReductionCombFn ( omp::DeclareReductionOp decl,
StringRef baseName,
LLVM::ModuleTranslation & moduleTranslation )
static

Build an outlined combiner helper for a task_reduction declare_reduction op. Signature: void(ptr lhs, ptr rhs). For non-byref reductions, the values at *lhs and *rhs are loaded, fed into the combiner region, and the yielded scalar is stored back into *lhs.

Definition at line 4245 of file OpenMPToLLVMIRTranslation.cpp.

References b, mlir::LLVM::ModuleTranslation::convertType(), mlir::LLVM::ModuleTranslation::forgetMapping(), mlir::Block::front(), mlir::Block::getArgument(), mlir::LLVM::ModuleTranslation::getLLVMModule(), mlir::Block::getNumArguments(), inlineConvertOmpRegions(), and mlir::LLVM::ModuleTranslation::mapValue().

Referenced by emitTaskReductionInitCall().

◆ emitTaskReductionInitCall()

llvm::Value * emitTaskReductionInitCall ( ArrayRef< omp::DeclareReductionOp > redDecls,
ArrayRef< llvm::Value * > origPtrs,
StringRef helperNamePrefix,
llvm::IRBuilderBase & builder,
llvm::OpenMPIRBuilder::InsertPointTy allocaIP,
LLVM::ModuleTranslation & moduleTranslation,
bool isModifier,
bool isWorksharing )
static

Emit the per-taskgroup task_reduction descriptor array and the __kmpc_taskred_init runtime call. origPtrs holds the LLVM values for the original (shared) variables, one per declaration in redDecls. builder must be set to the point at which the descriptor stores and the init call should be emitted; the descriptor array itself is allocated at allocaIP. helperNamePrefix is used to disambiguate the generated init/combiner helper symbol names between taskgroup and taskloop callers.

When isModifier is false, emits __kmpc_taskred_init and returns the ptr value it produces (the taskgroup reduction handle). When isModifier is true, emits __kmpc_taskred_modifier_init instead to open a task-reduction scope for a parallel or worksharing construct, passing isWorksharing as the runtime is_ws argument. Returns null on failure.

Only the non-byref form is handled here. Byref reductions have already been rejected by checkImplementationStatus.

Definition at line 4304 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::LLVM::ModuleTranslation::convertType(), emitTaskReductionCombFn(), emitTaskReductionInitFn(), mlir::LLVM::ModuleTranslation::getLLVMModule(), and mlir::LLVM::ModuleTranslation::getOpenMPBuilder().

Referenced by convertOmpParallel(), convertOmpSections(), convertOmpTaskgroupOp(), convertOmpTaskloopContextOp(), and convertOmpWsloop().

◆ emitTaskReductionInitFn()

llvm::Function * emitTaskReductionInitFn ( omp::DeclareReductionOp decl,
StringRef baseName,
LLVM::ModuleTranslation & moduleTranslation )
static

Build an outlined init helper for a task_reduction declare_reduction op. Signature: void(ptr priv, ptr orig). For non-byref reductions, the init region's mold argument is mapped following the same rule as the regular reduction path (mapInitializationArgs): a non-pointer mold loads the value from orig, while a pointer-typed mold receives orig directly. The yielded value is stored into priv.

Definition at line 4195 of file OpenMPToLLVMIRTranslation.cpp.

References b, mlir::LLVM::ModuleTranslation::convertType(), mlir::LLVM::ModuleTranslation::forgetMapping(), mlir::LLVM::ModuleTranslation::getLLVMModule(), mlir::Value::getType(), inlineConvertOmpRegions(), and mlir::LLVM::ModuleTranslation::mapValue().

Referenced by emitTaskReductionInitCall().

◆ emitTaskReductionModifierFini()

void emitTaskReductionModifierFini ( bool isWorksharing,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation )
static

Emits __kmpc_task_reduction_modifier_fini(loc, gtid, is_ws) at the current builder insertion point, closing the task-reduction scope opened by the task reduction modifier on a parallel or worksharing construct.

Definition at line 4408 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::LLVM::ModuleTranslation::getLLVMModule(), and mlir::LLVM::ModuleTranslation::getOpenMPBuilder().

Referenced by convertOmpParallel(), convertOmpSections(), and convertOmpWsloop().

◆ emitUserDefinedMapper()

◆ extractAtomicComparePattern()

LogicalResult extractAtomicComparePattern ( Block & block,
llvm::function_ref< llvm::Value *(mlir::Value)> materializeValue,
omp::AtomicCompareOp atomicCompareOp,
AtomicComparePatternInfo & info )
static

◆ extractAtomicControlFlags()

void extractAtomicControlFlags ( omp::AtomicUpdateOp atomicUpdateOp,
bool & isIgnoreDenormalMode,
bool & isFineGrainedMemory,
bool & isRemoteMemory )
static

◆ extractConstInteger()

std::optional< int64_t > extractConstInteger ( Value value)
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 9000 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::Value::getDefiningOp().

Referenced by initTargetDefaultAttrs().

◆ extractHostEvalClauses()

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 )
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 8918 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::Operation::getUsers().

Referenced by initTargetDefaultAttrs(), and initTargetRuntimeAttrs().

◆ fillAffinityLocators()

void fillAffinityLocators ( Operation::operand_range affinityVars,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation,
llvm::Value * affinityList )
static

◆ fillIteratorLoop()

mlir::LogicalResult fillIteratorLoop ( mlir::omp::IteratorOp itersOp,
llvm::IRBuilderBase & builder,
mlir::LLVM::ModuleTranslation & moduleTranslation,
IteratorInfo & iterInfo,
llvm::StringRef loopName,
IteratorStoreEntryTy genStoreEntry )
static

◆ findAllocInsertPoints()

◆ findAssociatedValue()

llvm::Value * findAssociatedValue ( Value privateVar,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation,
llvm::DenseMap< Value, Value > * mappedPrivateVars = nullptr )
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 1807 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::LLVM::ModuleTranslation::convertType(), mlir::Value::getType(), and mlir::LLVM::ModuleTranslation::lookupValue().

Referenced by initPrivateVar().

◆ findCurrentLoopInfo()

llvm::CanonicalLoopInfo * findCurrentLoopInfo ( LLVM::ModuleTranslation & moduleTranslation)
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 722 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::WalkResult::interrupt(), and mlir::LLVM::ModuleTranslation::stackWalk().

Referenced by convertOmpDistribute(), convertOmpSimd(), convertOmpTaskloopContextOp(), and convertOmpWsloop().

◆ findPrivatizer()

omp::PrivateClauseOp findPrivatizer ( Operation * from,
SymbolRefAttr symbolName )
static

Looks up from the operation from and returns the PrivateClauseOp with name symbolName.

Definition at line 388 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::SymbolTable::lookupNearestSymbolFrom().

Referenced by convertOmpTarget().

◆ genMapInfos()

void genMapInfos ( llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation,
DataLayout & dl,
MapInfosTy & combinedInfo,
MapInfoData & mapData,
TargetDirectiveEnumTy targetDirective )
static

◆ getAllocationSize() [1/2]

template<>
llvm::Value * getAllocationSize ( llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation,
omp::TargetAllocMemOp op )

◆ getAllocationSize() [2/2]

template<typename T>
llvm::Value * getAllocationSize ( llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation,
T op )
static

◆ getArrayElementSizeInBits()

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

◆ getAsIntegers()

void getAsIntegers ( ArrayAttr values,
llvm::SmallVector< int64_t > & ints )
static

Definition at line 7615 of file OpenMPToLLVMIRTranslation.cpp.

References ArrayAttr().

Referenced by getOverlappedMembers().

◆ getAtomicCompareFailureOrdering()

llvm::AtomicOrdering getAtomicCompareFailureOrdering ( omp::AtomicCompareOp atomicCompareOp,
llvm::AtomicOrdering atomicOrdering )
static

Compute the cmpxchg failure ordering for an atomic compare op: use the fail clause ordering when present (the verifier guarantees it is a valid cmpxchg failure ordering), otherwise the strongest failure ordering derived from the success ordering (which matches the OpenMPIRBuilder default).

Definition at line 5637 of file OpenMPToLLVMIRTranslation.cpp.

References convertAtomicOrdering().

Referenced by convertOmpAtomicCapture(), and convertOmpAtomicCompare().

◆ getBaseValueForTypeLookup()

◆ getDeclareTargetRefPtrSuffix()

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

Definition at line 6924 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::SymbolTable::Private.

Referenced by getRefPtrIfDeclareTarget().

◆ getDistributeCapturingTeamsReduction()

omp::DistributeOp getDistributeCapturingTeamsReduction ( omp::TeamsOp teamsOp)
static

◆ getDynGroupprivateFallbackType()

llvm::omp::OMPDynGroupprivateFallbackType getDynGroupprivateFallbackType ( omp::FallbackModifierAttr fallbackAttr)
static

Definition at line 9258 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by convertOmpTarget().

◆ getFirstOrLastMappedMemberPtr()

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

Definition at line 7527 of file OpenMPToLLVMIRTranslation.cpp.

References ArrayAttr(), indices, and sortMapIndices().

Referenced by mapParentWithMembers().

◆ getGlobalOpFromValue()

◆ getIsByRef()

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

◆ getMapDataMemberIdx()

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

◆ getOmpTargetAlloc()

llvm::Function * getOmpTargetAlloc ( llvm::IRBuilderBase & builder,
llvm::Module * llvmModule )
static

Definition at line 10085 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by convertTargetAllocMemOp().

◆ getOmpTargetFree()

llvm::Function * getOmpTargetFree ( llvm::IRBuilderBase & builder,
llvm::Module * llvmModule )
static

Definition at line 10290 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by convertTargetFreeMemOp().

◆ getOrCreateUserDefinedMapperFunc()

llvm::Expected< llvm::Function * > getOrCreateUserDefinedMapperFunc ( Operation * op,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation,
TargetDirectiveEnumTy targetDirective )
static

◆ getOverlappedMembers()

void getOverlappedMembers ( llvm::SmallVectorImpl< size_t > & overlapMapDataIdxs,
omp::MapInfoOp parentOp )
static

Definition at line 7624 of file OpenMPToLLVMIRTranslation.cpp.

References ArrayAttr(), and getAsIntegers().

Referenced by mapParentWithMembers().

◆ getProcBindKind()

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

Convert ProcBindKind from MLIR-generated enum to LLVM enum.

Definition at line 861 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by convertOmpParallel().

◆ getReductionDataSize()

template<typename OpTy>
uint64_t getReductionDataSize ( OpTy & op)
static

◆ getRefPtrIfDeclareTarget()

◆ getSizeInBytes()

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

◆ getTargetEntryUniqueInfo()

void getTargetEntryUniqueInfo ( llvm::TargetRegionEntryInfo & targetInfo,
omp::TargetOp targetOp,
llvm::OpenMPIRBuilder & ompBuilder,
llvm::vfs::FileSystem & vfs,
llvm::StringRef parentName = "" )
static

Definition at line 8730 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by convertOmpTarget().

◆ getTypeByteSize()

uint64_t getTypeByteSize ( mlir::Type type,
const DataLayout & dl )
static

◆ handleError() [1/2]

◆ handleError() [2/2]

template<typename T>
LogicalResult handleError ( llvm::Expected< T > & result,
Operation & op )
static

Definition at line 645 of file OpenMPToLLVMIRTranslation.cpp.

References handleError(), result, and success().

◆ initPrivateVar() [1/2]

llvm::Expected< llvm::Value * > initPrivateVar ( llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation,
omp::PrivateClauseOp & privDecl,
llvm::Value * nonPrivateVar,
BlockArgument & blockArg,
llvm::Value * llvmPrivateVar,
llvm::BasicBlock * privInitBlock,
llvm::DenseMap< Value, Value > * mappedPrivateVars = nullptr )
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 1858 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::Region::empty(), mlir::LLVM::ModuleTranslation::forgetMapping(), inlineConvertOmpRegions(), and mlir::LLVM::ModuleTranslation::mapValue().

Referenced by convertOmpTaskloopContextOp(), convertOmpTaskOp(), initPrivateVar(), and initPrivateVars().

◆ initPrivateVar() [2/2]

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 )
static

Version of initPrivateVar which looks up the nonPrivateVar from mlirPrivVar.

Definition at line 1893 of file OpenMPToLLVMIRTranslation.cpp.

References findAssociatedValue(), and initPrivateVar().

◆ initPrivateVars()

◆ initTargetDefaultAttrs()

void initTargetDefaultAttrs ( omp::TargetOp targetOp,
Operation * capturedOp,
llvm::OpenMPIRBuilder::TargetKernelDefaultAttrs & attrs,
bool isTargetDevice,
bool isGPU )
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 9050 of file OpenMPToLLVMIRTranslation.cpp.

References castOrGetParentOfType(), extractConstInteger(), extractHostEvalClauses(), getReductionDataSize(), and result.

Referenced by convertOmpTarget().

◆ initTargetRuntimeAttrs()

void initTargetRuntimeAttrs ( llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation,
omp::TargetOp targetOp,
Operation * capturedOp,
llvm::OpenMPIRBuilder::TargetKernelRuntimeAttrs & attrs )
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 9177 of file OpenMPToLLVMIRTranslation.cpp.

References castOrGetParentOfType(), extractHostEvalClauses(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and mlir::LLVM::ModuleTranslation::lookupValue().

Referenced by convertOmpTarget().

◆ inlineConvertOmpRegions()

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 1109 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::Region::hasOneBlock(), mlir::LLVM::ModuleTranslation::lookupValues(), mlir::LLVM::ModuleTranslation::mapBlock(), nullptr, and success().

Referenced by allocReductionVars(), convertOmpTargetData(), copyFirstPrivateVars(), emitTaskReductionCombFn(), emitTaskReductionInitFn(), initPrivateVar(), inlineOmpRegionCleanup(), makeAtomicReductionGen(), makeReductionGen(), and makeRefDataPtrGen().

◆ inlineOmpRegionCleanup()

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

◆ isDeclareTargetLink()

bool isDeclareTargetLink ( Value value)
static

◆ isDeclareTargetTo()

bool isDeclareTargetTo ( Value value)
static

Definition at line 6955 of file OpenMPToLLVMIRTranslation.cpp.

References getGlobalOpFromValue().

Referenced by getRefPtrIfDeclareTarget().

◆ isHostDeviceOp()

bool isHostDeviceOp ( Operation * op)
static

◆ lookupOrTranslatePureValue()

llvm::Expected< llvm::Value * > lookupOrTranslatePureValue ( Value value,
LLVM::ModuleTranslation & moduleTranslation,
llvm::IRBuilderBase & builder )
static

Look up the given value in the mapping, and if it's not there, translate its defining operation at the current builder insertion point. Only pure, regionless operations are supported because the same operation will later be translated again when the taskloop body itself is lowered.

Definition at line 3565 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::LLVM::ModuleTranslation::convertOperation(), mlir::LLVM::ModuleTranslation::forgetMapping(), mlir::Value::getDefiningOp(), mlir::Operation::getNumOperands(), mlir::Operation::getNumRegions(), mlir::Operation::getNumResults(), mlir::Operation::getOperands(), mlir::Operation::getResults(), mlir::isPure(), lookupOrTranslatePureValue(), mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapValue(), and result.

Referenced by computeTaskloopBounds(), and lookupOrTranslatePureValue().

◆ makeAtomicReductionGen()

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 1222 of file OpenMPToLLVMIRTranslation.cpp.

References atomicGen, inlineConvertOmpRegions(), lhs, mlir::LLVM::ModuleTranslation::mapValue(), and rhs.

◆ makeReductionGen()

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 1192 of file OpenMPToLLVMIRTranslation.cpp.

References inlineConvertOmpRegions(), lhs, mlir::LLVM::ModuleTranslation::mapValue(), result, and rhs.

Referenced by convertOmpSimd().

◆ makeRefDataPtrGen()

OwningDataPtrPtrReductionGen makeRefDataPtrGen ( omp::DeclareReductionOp decl,
llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation,
bool isByRef )
static

Create an OpenMPIRBuilder-compatible data_ptr_ptr reduction generator for the given reduction declaration.

The generator uses builder but ignores its insertion point. Returns null if there is no data_ptr_ptr region available in the reduction declaration.

Definition at line 1255 of file OpenMPToLLVMIRTranslation.cpp.

References inlineConvertOmpRegions(), mlir::LLVM::ModuleTranslation::mapValue(), and result.

◆ mapInitializationArgs()

template<typename T>
void mapInitializationArgs ( T loop,
LLVM::ModuleTranslation & moduleTranslation,
llvm::IRBuilderBase & builder,
SmallVectorImpl< omp::DeclareReductionOp > & reductionDecls,
DenseMap< Value, llvm::Value * > & reductionVariableMap,
unsigned i )
static

◆ mapParentWithMembers()

void mapParentWithMembers ( LLVM::ModuleTranslation & moduleTranslation,
llvm::IRBuilderBase & builder,
llvm::OpenMPIRBuilder & ompBuilder,
DataLayout & dl,
MapInfosTy & combinedInfo,
MapInfoData & mapData,
uint64_t mapDataIndex,
llvm::omp::OpenMPOffloadMappingFlags memberOfFlag,
TargetDirectiveEnumTy targetDirective )
static

◆ materializeRegionArgValue()

llvm::Value * materializeRegionArgValue ( llvm::IRBuilderBase & builder,
LLVM::ModuleTranslation & moduleTranslation,
BlockArgument regionArg,
llvm::Value * value )
static

◆ opIsInSingleThread()

bool opIsInSingleThread ( mlir::Operation * op)
static

This can't always be determined statically, but when we can, it is good to avoid generating compiler-added barriers which will deadlock the program.

Definition at line 2066 of file OpenMPToLLVMIRTranslation.cpp.

References mlir::Operation::getParentOp().

Referenced by copyFirstPrivateVars().

◆ popCancelFinalizationCB()

void popCancelFinalizationCB ( const ArrayRef< llvm::UncondBrInst * > cancelTerminators,
llvm::OpenMPIRBuilder & ompBuilder,
const llvm::OpenMPIRBuilder::InsertPointTy & afterIP )
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 2692 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by convertOmpTaskloopContextOp(), convertOmpTaskOp(), and convertOmpWsloop().

◆ processIndividualMap()

void processIndividualMap ( llvm::IRBuilderBase & builder,
llvm::OpenMPIRBuilder & ompBuilder,
MapInfoData & mapData,
size_t mapDataIdx,
MapInfosTy & combinedInfo,
TargetDirectiveEnumTy targetDirective,
llvm::omp::OpenMPOffloadMappingFlags memberOfFlag = llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_NONE,
bool isTargetParam = true,
int mapDataParentIdx = -1 )
static

This function handles the insertion of a single item of map data from MapInfoData into the OMPIRBuilder's MapInfo list. Utilising this function means the map being inserted can be treated as a non-parent map entity, if the memberOfFlag is set then the map being inserted is treated as a member map of a larger entity. The insertion into the MapInfo list of the OMPIRBuilder can vary based on a number of factors, such as if it's a ref_ptr or ref_ptee map, if it's a member of a record, what construct the map belongs to and the various map type bit flags that are set for the map.

Definition at line 7680 of file OpenMPToLLVMIRTranslation.cpp.

References checkIfPointerMap(), and convertClauseMapFlags().

Referenced by genMapInfos(), and processMapWithMembersOf().

◆ processMapWithMembersOf()

void processMapWithMembersOf ( LLVM::ModuleTranslation & moduleTranslation,
llvm::IRBuilderBase & builder,
llvm::OpenMPIRBuilder & ompBuilder,
DataLayout & dl,
MapInfosTy & combinedInfo,
MapInfoData & mapData,
uint64_t mapDataIndex,
TargetDirectiveEnumTy targetDirective )
static

◆ pushCancelFinalizationCB()

void pushCancelFinalizationCB ( SmallVectorImpl< llvm::UncondBrInst * > & cancelTerminators,
llvm::IRBuilderBase & llvmBuilder,
llvm::OpenMPIRBuilder & ompBuilder,
mlir::Operation * op,
llvm::omp::Directive cancelDirective )
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 2662 of file OpenMPToLLVMIRTranslation.cpp.

References constructIsCancellable().

Referenced by convertOmpTaskloopContextOp(), convertOmpTaskOp(), and convertOmpWsloop().

◆ setInsertPointForPossiblyEmptyBlock()

void setInsertPointForPossiblyEmptyBlock ( llvm::IRBuilderBase & builder,
llvm::BasicBlock * block = nullptr )
static

◆ sortMapIndices()

void sortMapIndices ( llvm::SmallVectorImpl< size_t > & indices,
omp::MapInfoOp mapInfo,
bool first = true )
static

Definition at line 7482 of file OpenMPToLLVMIRTranslation.cpp.

References ArrayAttr(), b, if(), and indices.

Referenced by getFirstOrLastMappedMemberPtr(), and mapParentWithMembers().

◆ storeAffinityEntry()

void storeAffinityEntry ( llvm::IRBuilderBase & builder,
llvm::OpenMPIRBuilder & ompBuilder,
llvm::Value * affinityList,
llvm::Value * index,
llvm::Value * addr,
llvm::Value * len )
static

Definition at line 2906 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by buildAffinityData(), and fillAffinityLocators().

Variable Documentation

◆ atomicGen

atomicGen

Definition at line 1641 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by makeAtomicReductionGen().

◆ nullptr

nullptr

Definition at line 1641 of file OpenMPToLLVMIRTranslation.cpp.

Referenced by mlir::detail::AttrOpBinder< AttrT >::AttrOpBinder(), mlir::spirv::BlockMergeInfo::BlockMergeInfo(), mlir::BlockRange::BlockRange(), mlir::CallGraph::CallGraph(), mlir::sparse_tensor::CodegenEnv::CodegenEnv(), mlir::detail::constant_op_binder< AttrT >::constant_op_binder(), mlir::AsmParser::CyclicParseReset::CyclicParseReset(), mlir::AsmPrinter::CyclicPrintReset::CyclicPrintReset(), DynamicMemRefType< T >::DynamicMemRefType(), DynamicMemRefType< T >::DynamicMemRefType(), mlir::python::MLIR_BINDINGS_PYTHON_DOMAIN::PyMlirContext::ErrorCapture::ErrorCapture(), executeGetOperandsResults(), mlir::ExecutionEngine::ExecutionEngine(), findPayloadRoot(), mlir::AsmParserState::getAttributeAliasDef(), mlir::AsmParserState::getBlockDef(), mlir::detail::DialectInterfaceCollectionBase::getInterfaceFor(), mlir::Liveness::getLiveness(), mlir::PassExecutionAction::getOp(), mlir::AsmParserState::getOpDef(), mlir::AsmParserState::getTypeAliasDef(), inlineConvertOmpRegions(), inlineOmpRegionCleanup(), mlir::detail::Interface< ConcreteType, Attribute, Traits, Attribute, AttributeTrait::TraitBase >::Interface(), mlir::detail::Interface< ConcreteType, Attribute, Traits, Attribute, AttributeTrait::TraitBase >::Interface(), mlir::detail::Interface< ConcreteType, Attribute, Traits, Attribute, AttributeTrait::TraitBase >::Interface(), mlir::detail::Interface< ConcreteType, Attribute, Traits, Attribute, AttributeTrait::TraitBase >::Interface(), mlir::Lexer::Lexer(), mlir::pdll::Lexer::Lexer(), mlir::sparse_tensor::LoopEmitter::locateLvlAtAffineAddress(), mlir::PassInfo::lookup(), mlir::PassPipelineInfo::lookup(), mlir::pdll::ods::Context::lookupDialect(), mlir::CallGraph::lookupNode(), makeArrayAttr(), makeDenseBoolArrayAttr(), makeDenseI64ArrayAttr(), mlir::affine::NestedPattern::NestedPattern(), mlir::Op< ConcreteType, Traits >::Op(), mlir::Op< ConcreteType, Traits >::Op(), mlir::OwningOpRef< OpTy >::OwningOpRef(), mlir::Pattern::Pattern(), mlir::ReductionNode::ReductionNode(), mlir::ShapedTypeComponents::ShapedTypeComponents(), mlir::ShapedTypeComponents::ShapedTypeComponents(), mlir::ShapedTypeComponents::ShapedTypeComponents(), mlir::ShapedTypeComponents::ShapedTypeComponents(), mlir::sparse_tensor::SparseIterator::SparseIterator(), mlir::detail::StringAttrStorage::StringAttrStorage(), mlir::spirv::detail::StructTypeStorage::StructTypeStorage(), mlir::pdl_to_pdl_interp::SuccessNode::SuccessNode(), and mlir::SuccessorRange::SuccessorRange().

◆ owningDataPtrPtrReductionGens

owningDataPtrPtrReductionGens[i]

Definition at line 1642 of file OpenMPToLLVMIRTranslation.cpp.

◆ owningReductionGens

owningReductionGens[i]