|
MLIR 24.0.0git
|
#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 llvm::Expected< llvm::Value * > | getPrivateDataAddress (llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, omp::PrivateClauseOp privatizer, llvm::Value *var) |
| Returns the address of the data in var, via the data_address region. | |
| 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 ®ion, StringRef blockName, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, SmallVectorImpl< llvm::PHINode * > *continuationBlockPHIs=nullptr) |
| Converts the given region that appears within an OpenMP dialect operation to LLVM IR, creating a branch from the sourceBlock to the entry block of the region, and a branch from any block with an successor-less OpenMP terminator to continuationBlock. | |
| static llvm::omp::ProcBindKind | getProcBindKind (omp::ClauseProcBindKind kind) |
| Convert ProcBindKind from MLIR-generated enum to LLVM enum. | |
| static LogicalResult | convertOmpDispatch (Operation &opInst, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
| Convert 'dispatch' operation into LLVM IR. | |
| 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 ®ion, StringRef blockName, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, SmallVectorImpl< llvm::Value * > *continuationBlockArgs=nullptr) |
| Translates the blocks contained in the given region and appends them to at the current insertion point of builder. | |
| 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< bool > | getIsByRef (std::optional< ArrayRef< bool > > attr) |
| template<typename OP> | |
| static LogicalResult | allocAndInitializeReductionVars (OP op, ArrayRef< BlockArgument > reductionArgs, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, llvm::OpenMPIRBuilder::InsertPointTy &allocaIP, SmallVectorImpl< omp::DeclareReductionOp > &reductionDecls, SmallVectorImpl< llvm::Value * > &privateReductionVariables, DenseMap< Value, llvm::Value * > &reductionVariableMap, llvm::ArrayRef< bool > isByRef) |
| static llvm::Value * | findAssociatedValue (Value privateVar, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, llvm::DenseMap< Value, Value > *mappedPrivateVars=nullptr) |
| Return the llvm::Value * corresponding to the privateVar that is being privatized. 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) |
| static LogicalResult | convertAllocatorVars (Operation &op, ValueRange allocatorVars, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, PrivateVarsInfo &privateVarsInfo) |
| template<typename T> | |
| static llvm::Expected< llvm::BasicBlock * > | allocatePrivateVars (T op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation, PrivateVarsInfo &privateVarsInfo, llvm::OpenMPIRBuilder::InsertPointTy &allocaIP, llvm::DenseMap< Value, Value > *mappedPrivateVars=nullptr, std::optional< llvm::OpenMPIRBuilder::InsertPointTy > allocatorIP=std::nullopt) |
| 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 | opMightBeSafeForBarriers (mlir::Operation *op) |
| A compiler-generated barrier is unsafe when only part of the current team can reach it. This cannot always be determined statically (e.g. across a function call), but the enclosing OpenMP constructs can rule it out. | |
| static LogicalResult | emitPrivatizationBarrier (mlir::Operation *op, llvm::IRBuilderBase &builder, LLVM::ModuleTranslation &moduleTranslation) |
| static LogicalResult | completePrivateVars (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 | completePrivateVars (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, llvm::BasicBlock *afterBB) |
| 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::Region &iteratorRegion, 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 Operation * | getGlobalOpFromValue (Value value) |
| static Value | getBaseValueForTypeLookup (Value value) |
| static llvm::Type * | getAllocatedLlvmTypeForVariable (Value var, Value baseVar, LLVM::ModuleTranslation &moduleTranslation) |
| static std::optional< llvm::Value * > | getDynamicAllocatedSize (Value var, Value baseVar, LLVM::ModuleTranslation &moduleTranslation, llvm::IRBuilderBase &builder, const llvm::DataLayout &dataLayout) |
| 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 bool | isPrivatizeableAttachMap (omp::ClauseMapFlags mapType) |
| 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 StringRef | getMapClauseName (omp::MapInfoOp mapOp) |
| 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, bool &isByteOffset) |
| 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 llvm::Value * | getSourceLocIdentFromOp (llvm::IRBuilderBase &builder, llvm::OpenMPIRBuilder &ompBuilder, Operation *op) |
| 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_t > | extractConstInteger (Value value) |
If the given value is defined by an llvm.mlir.constant operation and it is of an integer type, return its value. | |
| 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] | |
| using IteratorStoreEntryTy |
Definition at line 3172 of file OpenMPToLLVMIRTranslation.cpp.
|
static |
Definition at line 1857 of file OpenMPToLLVMIRTranslation.cpp.
References allocReductionVars(), and success().
Referenced by convertOmpDistribute(), convertOmpScope(), convertOmpSections(), and convertOmpTeams().
|
static |
Allocate and initialize delayed private variables. Returns the basic block which comes after all of these allocations. llvm::Value * for each of these private variables are populated in llvmPrivateVars.
Definition at line 2069 of file OpenMPToLLVMIRTranslation.cpp.
References PrivateVarsInfo::allocatorPrivates, mlir::omp::allocaUsesRequireSharedMem(), PrivateVarsInfo::blockArgs, PrivateVarsInfo::convertedAllocators, mlir::LLVM::ModuleTranslation::convertType(), mlir::LLVM::ModuleTranslation::getLLVMModule(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), PrivateVarsInfo::llvmVars, PrivateVarsInfo::mlirVars, mlir::omp::opInSharedDeviceContext(), and PrivateVarsInfo::privatizers.
Referenced by convertOmpDistribute(), convertOmpParallel(), convertOmpScope(), convertOmpSimd(), convertOmpTarget(), and convertOmpWsloop().
|
static |
Allocate space for privatized reduction variables.
deferredStores contains information to create store operations which needs to be inserted after all allocas
Definition at line 1443 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().
|
static |
Apply a #pragma omp fuse / !$omp fuse transformation using the OpenMPIRBuilder.
Definition at line 5765 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::invalidateOmpLoop(), mlir::LLVM::ModuleTranslation::lookupOMPLoop(), mlir::LLVM::ModuleTranslation::mapOmpLoop(), and success().
|
static |
Apply a #pragma omp tile / !$omp tile transformation using the OpenMPIRBuilder.
Definition at line 5726 of file OpenMPToLLVMIRTranslation.cpp.
References genLoop(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::invalidateOmpLoop(), mlir::LLVM::ModuleTranslation::lookupOMPLoop(), mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapOmpLoop(), and success().
|
static |
Apply a #pragma omp unroll full / !$omp unroll full transformation using the OpenMPIRBuilder.
Definition at line 5684 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::invalidateOmpLoop(), mlir::LLVM::ModuleTranslation::lookupOMPLoop(), and success().
|
static |
Apply a #pragma omp unroll / "!$omp unroll" transformation using the OpenMPIRBuilder.
Definition at line 5665 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::invalidateOmpLoop(), mlir::LLVM::ModuleTranslation::lookupOMPLoop(), and success().
|
static |
Apply a #pragma omp unroll partial / !$omp unroll partial transformation using the OpenMPIRBuilder.
Definition at line 5703 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::invalidateOmpLoop(), mlir::LLVM::ModuleTranslation::lookupOMPLoop(), and success().
|
static |
Definition at line 3220 of file OpenMPToLLVMIRTranslation.cpp.
References fillAffinityLocators(), fillIteratorLoop(), findAllocInsertPoints(), mlir::LLVM::ModuleTranslation::getLLVMModule(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::lookupValue(), and storeAffinityEntry().
Referenced by convertOmpTaskOp().
|
static |
Definition at line 3341 of file OpenMPToLLVMIRTranslation.cpp.
References buildDependDataLocator(), convertDependKind(), fillIteratorLoop(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and mlir::LLVM::ModuleTranslation::lookupValue().
Referenced by convertOmpTarget(), convertOmpTaskOp(), and convertOmpTaskwaitOp().
|
static |
Definition at line 2815 of file OpenMPToLLVMIRTranslation.cpp.
References convertDependKind(), and mlir::LLVM::ModuleTranslation::lookupValue().
Referenced by buildDependData().
|
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 7847 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::lookupValue().
Referenced by createAlteredByCaptureMap().
|
static |
If op is of the given type parameter, return it casted to that type. Otherwise, if its immediate parent operation (or some other higher-level parent, if immediateParent is false) is of that type, return that parent casted to the given type.
If op is null or neither it or its parent(s) are of the specified type, return a null operation.
Definition at line 9369 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Operation::getParentOfType(), and mlir::Operation::getParentOp().
Referenced by initTargetDefaultAttrs(), and initTargetRuntimeAttrs().
|
static |
Definition at line 7341 of file OpenMPToLLVMIRTranslation.cpp.
References isDeclareTargetLink().
Referenced by createAlteredByCaptureMap(), getSizeInBytes(), mapParentWithMembers(), and processIndividualMap().
|
static |
Check whether translation to LLVM IR for the given operation is currently supported.
If not, descriptive diagnostics will be emitted to let users know this is a not-yet-implemented feature.
Definition at line 435 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Operation::emitError(), mlir::Operation::emitWarning(), mlir::Region::empty(), mlir::Region::front(), mlir::Block::getArgument(), mlir::Operation::getName(), mlir::omp::getOpenMPVersionAttribute(), mlir::Operation::getParentOfType(), mlir::Operation::getRegion(), mlir::Value::getType(), mlir::DataLayout::getTypeSizeInBits(), mlir::SymbolTable::lookupNearestSymbolFrom(), result, and success().
Referenced by convertOmpAtomicCapture(), convertOmpAtomicCompare(), convertOmpAtomicRead(), convertOmpAtomicUpdate(), convertOmpAtomicWrite(), convertOmpCancel(), convertOmpCancellationPoint(), convertOmpCritical(), convertOmpDispatch(), convertOmpDistribute(), convertOmpGroupprivate(), convertOmpLoopNest(), convertOmpMasked(), convertOmpMaster(), convertOmpOrdered(), convertOmpOrderedRegion(), convertOmpParallel(), convertOmpScope(), convertOmpSections(), convertOmpSimd(), convertOmpSingle(), convertOmpTarget(), convertOmpTargetData(), convertOmpTaskgroupOp(), convertOmpTaskloopContextOp(), convertOmpTaskloopWrapperOp(), convertOmpTaskOp(), convertOmpTaskwaitOp(), convertOmpTeams(), convertOmpThreadprivate(), convertOmpWsloop(), and emitUserDefinedMapper().
|
static |
Definition at line 2330 of file OpenMPToLLVMIRTranslation.cpp.
References PrivateVarsInfo::allocatorPrivates, mlir::omp::allocaUsesRequireSharedMem(), PrivateVarsInfo::blockArgs, mlir::LLVM::ModuleTranslation::convertType(), mlir::emitError(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), inlineOmpRegionCleanup(), PrivateVarsInfo::llvmVars, mlir::omp::opInSharedDeviceContext(), PrivateVarsInfo::privatizers, setInsertPointForPossiblyEmptyBlock(), and success().
Referenced by convertOmpDistribute(), convertOmpParallel(), convertOmpScope(), convertOmpSimd(), convertOmpTarget(), convertOmpTaskloopContextOp(), convertOmpTaskOp(), and convertOmpWsloop().
|
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 1146 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Operation::emitError(), mlir::SymbolTable::lookupNearestSymbolFrom(), and success().
Referenced by convertOmpTaskloopContextOp(), and convertOmpTaskOp().
|
static |
Definition at line 7535 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpTarget(), convertOmpTargetData(), and emitUserDefinedMapper().
|
static |
Populates reductions with reduction declarations used in the given op.
Definition at line 1124 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::SymbolTable::lookupNearestSymbolFrom().
Referenced by convertOmpDistribute(), convertOmpParallel(), convertOmpScope(), convertOmpSections(), convertOmpSimd(), convertOmpTeams(), convertOmpWsloop(), and getReductionDataSize().
|
static |
Definition at line 2246 of file OpenMPToLLVMIRTranslation.cpp.
References emitPrivatizationBarrier(), mlir::LLVM::ModuleTranslation::forgetMapping(), inlineConvertOmpRegions(), mlir::LLVM::ModuleTranslation::mapValue(), materializeRegionArgValue(), setInsertPointForPossiblyEmptyBlock(), and success().
Referenced by completePrivateVars(), convertOmpDistribute(), convertOmpParallel(), convertOmpScope(), convertOmpTarget(), convertOmpTaskloopContextOp(), convertOmpTaskOp(), and convertOmpWsloop().
|
static |
Definition at line 2308 of file OpenMPToLLVMIRTranslation.cpp.
References completePrivateVars().
|
static |
Definition at line 3813 of file OpenMPToLLVMIRTranslation.cpp.
References lookupOrTranslatePureValue().
Referenced by convertOmpTaskloopContextOp().
Returns true if the construct contains omp.cancel or omp.cancellation_point.
Definition at line 2371 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::WalkResult::advance(), mlir::WalkResult::interrupt(), and mlir::Operation::walk().
Referenced by convertOmpParallel(), convertOmpSections(), and pushCancelFinalizationCB().
|
static |
Definition at line 10589 of file OpenMPToLLVMIRTranslation.cpp.
References getAllocatedLlvmTypeForVariable(), getBaseValueForTypeLookup(), getDynamicAllocatedSize(), mlir::LLVM::ModuleTranslation::getLLVMModule(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::remapAllValuesWith(), and success().
|
static |
Definition at line 10668 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Operation::emitError(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::lookupValue(), and success().
|
static |
Definition at line 2040 of file OpenMPToLLVMIRTranslation.cpp.
References PrivateVarsInfo::convertedAllocators, mlir::Operation::emitError(), mlir::LLVM::ModuleTranslation::lookupValue(), and success().
Referenced by convertOmpParallel(), and convertOmpScope().
|
static |
Definition at line 10578 of file OpenMPToLLVMIRTranslation.cpp.
References getAllocationSize(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::mapValue(), and success().
|
static |
Convert an Atomic Ordering attribute to llvm::AtomicOrdering.
Definition at line 5810 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpAtomicCapture(), convertOmpAtomicCompare(), convertOmpAtomicRead(), convertOmpAtomicUpdate(), convertOmpAtomicWrite(), and getAtomicCompareFailureOrdering().
|
static |
Converts an LLVM dialect binary operation to the corresponding enum value for atomicrmw supported binary operation.
Definition at line 5894 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpAtomicCapture(), and convertOmpAtomicUpdate().
|
static |
Definition at line 6960 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpCancel(), and convertOmpCancellationPoint().
|
static |
Definition at line 7473 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by createAlteredByCaptureMap(), and processIndividualMap().
|
static |
Definition at line 10122 of file OpenMPToLLVMIRTranslation.cpp.
References convertToCaptureClauseKind(), convertToDeviceClauseKind(), mlir::LocationAttr::findInstanceOf(), mlir::LLVM::ModuleTranslation::getFileSystem(), mlir::LLVM::ModuleTranslation::getLLVMModule(), mlir::Operation::getLoc(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::Operation::getParentOfType(), mlir::LLVM::ModuleTranslation::lookupFunction(), mlir::SymbolTable::Private, and success().
|
static |
Definition at line 2797 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by buildDependData(), and buildDependDataLocator().
|
static |
Helper to extract the OMPAtomicCompareOp from a floating-point comparison predicate. Returns std::nullopt for unsupported predicates.
Definition at line 6038 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by extractAtomicComparePattern().
|
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 9082 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Operation::emitOpError(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and success().
|
static |
Definition at line 10735 of file OpenMPToLLVMIRTranslation.cpp.
References getAllocationSize(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::lookupValue(), and success().
|
static |
Helper to extract the OMPAtomicCompareOp from an integer comparison predicate. Returns std::nullopt for unsupported predicates.
Definition at line 6020 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by extractAtomicComparePattern().
|
static |
Definition at line 3115 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::detail::connectPHINodes(), mlir::LLVM::ModuleTranslation::convertBlock(), mlir::Region::front(), mlir::Block::getArgument(), mlir::getBlocksSortedByDominance(), mlir::Region::hasOneBlock(), mlir::LLVM::ModuleTranslation::lookupBlock(), mlir::LLVM::ModuleTranslation::mapBlock(), and mlir::LLVM::ModuleTranslation::mapValue().
Referenced by fillIteratorLoop().
|
static |
Definition at line 6313 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Block::begin(), checkImplementationStatus(), AtomicComparePatternInfo::compareOp, convertAtomicOrdering(), convertBinOpToAtomic(), mlir::LLVM::ModuleTranslation::convertBlock(), mlir::LLVM::ModuleTranslation::convertOperation(), mlir::LLVM::ModuleTranslation::convertType(), AtomicComparePatternInfo::dVal, emitComplexAtomicCmpXchg(), AtomicComparePatternInfo::eVal, extractAtomicComparePattern(), extractAtomicControlFlags(), findAllocInsertPoints(), mlir::Region::front(), mlir::Block::getArgument(), getAtomicCompareFailureOrdering(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::Operation::getOperand(), mlir::Operation::getOperands(), mlir::Operation::getRegion(), mlir::Block::getTerminator(), mlir::Value::getType(), handleError(), AtomicComparePatternInfo::isSigned, AtomicComparePatternInfo::isXBinopExpr, mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapBlock(), mlir::LLVM::ModuleTranslation::mapValue(), success(), and mlir::Block::without_terminator().
|
static |
Converts an omp.atomic.compare operation to LLVM IR.
if (x == e) x = d The region contains a comparison + select pattern: ^bb0(xval: T): cmp = llvm.icmp/fcmp <pred> xval, e : T sel = llvm.select cmp, d, xval : i1, T omp.yield(sel : T)
From MLIR extract: 1) comparison operator 2) expected value (e) 3) desired value (d) These are passed to OpenMPIRBuilder::createAtomicCompare which generates the actual cmpxchg / atomicrmw instruction.
Definition at line 6761 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), AtomicComparePatternInfo::compareOp, convertAtomicOrdering(), mlir::LLVM::ModuleTranslation::convertOperation(), mlir::LLVM::ModuleTranslation::convertType(), detectComplexCompareEq(), AtomicComparePatternInfo::dVal, ComplexComparePattern::eAggregate, emitComplexAtomicCmpXchg(), AtomicComparePatternInfo::eVal, extractAtomicComparePattern(), mlir::Region::front(), mlir::Block::getArgument(), getAtomicCompareFailureOrdering(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::Operation::getOperands(), mlir::Block::getOperations(), mlir::Block::getTerminator(), mlir::Value::getType(), handleError(), ComplexComparePattern::isComplex, ComplexComparePattern::isNE, AtomicComparePatternInfo::isSigned, AtomicComparePatternInfo::isXBinopExpr, ComplexComparePattern::isXBinopExpr, mlir::LLVM::ModuleTranslation::lookupValue(), success(), and mlir::Block::without_terminator().
|
static |
Convert omp.atomic.read operation to LLVM IR.
Definition at line 5843 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertAtomicOrdering(), mlir::LLVM::ModuleTranslation::convertType(), findAllocInsertPoints(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::lookupValue(), and success().
|
static |
Converts an OpenMP atomic update operation using OpenMPIRBuilder.
Definition at line 5934 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Block::begin(), checkImplementationStatus(), convertAtomicOrdering(), convertBinOpToAtomic(), mlir::LLVM::ModuleTranslation::convertBlock(), mlir::LLVM::ModuleTranslation::convertType(), extractAtomicControlFlags(), findAllocInsertPoints(), mlir::Region::front(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::Operation::getOperand(), mlir::Operation::getOperands(), mlir::Operation::getRegion(), mlir::Block::getTerminator(), handleError(), mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapBlock(), mlir::LLVM::ModuleTranslation::mapValue(), and success().
|
static |
Converts an omp.atomic.write operation to LLVM IR.
Definition at line 5870 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertAtomicOrdering(), mlir::LLVM::ModuleTranslation::convertType(), findAllocInsertPoints(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::lookupValue(), and success().
|
static |
Definition at line 6976 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertCancellationConstructType(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), mlir::LLVM::ModuleTranslation::lookupValue(), and success().
|
static |
Definition at line 7003 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertCancellationConstructType(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), and success().
|
static |
Convert an omp.canonical_loop to LLVM-IR.
Definition at line 5622 of file OpenMPToLLVMIRTranslation.cpp.
References convertOmpOpRegions(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapOmpLoop(), mlir::LLVM::ModuleTranslation::mapValue(), and success().
|
static |
Converts an OpenMP 'critical' operation into LLVM IR using OpenMPIRBuilder.
Definition at line 1013 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertOmpOpRegions(), mlir::LLVM::ModuleTranslation::getLLVMContext(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), mlir::SymbolTable::lookupNearestSymbolFrom(), and success().
|
static |
Convert 'dispatch' operation into LLVM IR.
Definition at line 914 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertOmpOpRegions(), handleError(), result, and success().
|
static |
Process teams op reduction in distribute if the reduction is contained in this specific distribute op.
Definition at line 8938 of file OpenMPToLLVMIRTranslation.cpp.
References allocAndInitializeReductionVars(), allocatePrivateVars(), checkImplementationStatus(), cleanupPrivateVars(), collectReductionDecls(), completePrivateVars(), convertOmpOpRegions(), createReductionsAndCleanup(), findAllocInsertPoints(), findCurrentLoopInfo(), getDistributeCapturingTeamsReduction(), getIsByRef(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::Operation::getParentOfType(), handleError(), initPrivateVars(), PrivateVarsInfo::llvmVars, mlir::LLVM::ModuleTranslation::lookupValue(), PrivateVarsInfo::mlirVars, PrivateVarsInfo::privatizers, and success().
|
static |
Converts an OpenMP groupprivate operation into LLVM IR.
Definition at line 10747 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), mlir::LLVM::ModuleTranslation::convertType(), mlir::Operation::emitError(), mlir::Operation::emitWarning(), mlir::LLVM::ModuleTranslation::getLLVMModule(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::Operation::getResult(), mlir::LLVM::ModuleTranslation::lookupGlobal(), mlir::SymbolTable::lookupNearestSymbolFrom(), mlir::LLVM::ModuleTranslation::mapValue(), and success().
|
static |
Definition at line 4756 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::lookupValue(), and success().
|
static |
Definition at line 4711 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::lookupValue(), and success().
|
static |
Definition at line 4784 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::lookupValue(), and success().
|
static |
Converts an OpenMP loop nest into LLVM IR using OpenMPIRBuilder.
Definition at line 5496 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertOmpOpRegions(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), mlir::WalkResult::interrupt(), mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapValue(), mlir::LLVM::ModuleTranslation::stackWalk(), success(), and mlir::tile().
|
static |
Converts an OpenMP 'masked' operation into LLVM IR using OpenMPIRBuilder.
Definition at line 932 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertOmpOpRegions(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), mlir::LLVM::ModuleTranslation::lookupValue(), and success().
|
static |
Converts an OpenMP 'master' operation into LLVM IR using OpenMPIRBuilder.
Definition at line 977 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertOmpOpRegions(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), and success().
|
static |
Converts the given region that appears within an OpenMP dialect operation to LLVM IR, creating a branch from the sourceBlock to the entry block of the region, and a branch from any block with an successor-less OpenMP terminator to continuationBlock.
Populates continuationBlockPHIs with the PHI nodes of the continuation block if provided.
Definition at line 774 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::detail::connectPHINodes(), mlir::LLVM::ModuleTranslation::convertBlock(), mlir::LLVM::ModuleTranslation::convertType(), mlir::LLVM::ModuleTranslation::forgetMapping(), mlir::Region::getBlocks(), mlir::getBlocksSortedByDominance(), mlir::Operation::getNumOperands(), mlir::Operation::getOperand(), mlir::Region::getParentOp(), mlir::LLVM::ModuleTranslation::lookupBlock(), mlir::LLVM::ModuleTranslation::lookupValue(), and mlir::LLVM::ModuleTranslation::mapBlock().
Referenced by convertOmpCanonicalLoopOp(), convertOmpCritical(), convertOmpDispatch(), convertOmpDistribute(), convertOmpLoopNest(), convertOmpMasked(), convertOmpMaster(), convertOmpOrderedRegion(), convertOmpParallel(), convertOmpScope(), convertOmpSections(), convertOmpSimd(), convertOmpSingle(), convertOmpTarget(), convertOmpTaskgroupOp(), convertOmpTaskloopContextOp(), convertOmpTaskloopWrapperOp(), convertOmpTaskOp(), convertOmpTeams(), convertOmpWsloop(), and inlineConvertOmpRegions().
|
static |
Converts an OpenMP 'ordered' operation into LLVM IR using OpenMPIRBuilder.
Definition at line 1360 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), findAllocInsertPoints(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::lookupValues(), and success().
|
static |
Converts an OpenMP 'ordered_region' operation into LLVM IR using OpenMPIRBuilder.
Definition at line 1393 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertOmpOpRegions(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), and success().
|
static |
Converts the OpenMP parallel operation to LLVM IR.
Definition at line 5071 of file OpenMPToLLVMIRTranslation.cpp.
References allocatePrivateVars(), allocReductionVars(), checkImplementationStatus(), cleanupPrivateVars(), collectReductionDecls(), completePrivateVars(), constructIsCancellable(), convertAllocatorVars(), convertOmpOpRegions(), emitTaskReductionInitCall(), emitTaskReductionModifierFini(), findAllocInsertPoints(), getIsByRef(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), getProcBindKind(), handleError(), initPrivateVars(), inlineOmpRegionCleanup(), PrivateVarsInfo::llvmVars, mlir::LLVM::ModuleTranslation::lookupValue(), PrivateVarsInfo::mlirVars, owningReductionGens, PrivateVarsInfo::privatizers, and success().
|
static |
Converts an OpenMP scope construct into LLVM IR.
Definition at line 2532 of file OpenMPToLLVMIRTranslation.cpp.
References allocAndInitializeReductionVars(), allocatePrivateVars(), checkImplementationStatus(), cleanupPrivateVars(), collectReductionDecls(), completePrivateVars(), convertAllocatorVars(), convertOmpOpRegions(), createReductionsAndCleanup(), findAllocInsertPoints(), getIsByRef(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), initPrivateVars(), PrivateVarsInfo::llvmVars, PrivateVarsInfo::mlirVars, and PrivateVarsInfo::privatizers.
|
static |
Definition at line 2402 of file OpenMPToLLVMIRTranslation.cpp.
References allocAndInitializeReductionVars(), mlir::Region::begin(), checkImplementationStatus(), collectReductionDecls(), constructIsCancellable(), convertOmpOpRegions(), createReductionsAndCleanup(), emitTaskReductionInitCall(), emitTaskReductionModifierFini(), findAllocInsertPoints(), mlir::Region::getArguments(), getIsByRef(), mlir::Region::getNumArguments(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::Operation::getRegion(), handleError(), mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapValue(), and success().
|
static |
Converts an OpenMP simd loop into LLVM IR using OpenMPIRBuilder.
Definition at line 5299 of file OpenMPToLLVMIRTranslation.cpp.
References PrivateVarsInfo::addLinearVars(), allocatePrivateVars(), allocReductionVars(), checkImplementationStatus(), cleanupPrivateVars(), collectReductionDecls(), convertOmpOpRegions(), convertOrderKind(), mlir::LLVM::ModuleTranslation::convertType(), findAllocInsertPoints(), findCurrentLoopInfo(), getIsByRef(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), initPrivateVars(), inlineOmpRegionCleanup(), PrivateVarsInfo::llvmVars, mlir::LLVM::ModuleTranslation::lookupValue(), makeReductionGen(), PrivateVarsInfo::numPrivateVars, and PrivateVarsInfo::privatizers.
|
static |
Converts an OpenMP single construct into LLVM IR using OpenMPIRBuilder.
Definition at line 2634 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertOmpOpRegions(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), mlir::LLVM::ModuleTranslation::lookupFunction(), mlir::SymbolTable::lookupNearestSymbolFrom(), mlir::LLVM::ModuleTranslation::lookupValue(), and success().
|
static |
Definition at line 9658 of file OpenMPToLLVMIRTranslation.cpp.
References allocatePrivateVars(), buildDependData(), checkImplementationStatus(), cleanupPrivateVars(), collectMapDataFromMapOperands(), completePrivateVars(), convertOmpOpRegions(), mlir::LLVM::ModuleTranslation::convertType(), createDeviceArgumentAccessor(), findAllocInsertPoints(), findPrivatizer(), genMapInfos(), mlir::Value::getDefiningOp(), getDynGroupprivateFallbackType(), mlir::LLVM::ModuleTranslation::getFileSystem(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), getOrCreateUserDefinedMapperFunc(), mlir::Operation::getParentOfType(), getSourceLocIdentFromOp(), getTargetEntryUniqueInfo(), handleError(), initPrivateVars(), initTargetDefaultAttrs(), initTargetRuntimeAttrs(), PrivateVarsInfo::llvmVars, mlir::LLVM::ModuleTranslation::lookupFunction(), mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapValue(), PrivateVarsInfo::mlirVars, PrivateVarsInfo::privatizers, and success().
|
static |
Definition at line 8683 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), collectMapDataFromMapOperands(), mlir::Operation::emitOpError(), findAllocInsertPoints(), genMapInfos(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), getOrCreateUserDefinedMapperFunc(), mlir::Operation::getParentOfType(), getSourceLocIdentFromOp(), handleError(), inlineConvertOmpRegions(), mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapValue(), result, and success().
|
static |
Converts an OpenMP taskgroup construct into LLVM IR using OpenMPIRBuilder.
Definition at line 4628 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertOmpOpRegions(), emitTaskReductionInitCall(), findAllocInsertPoints(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), mlir::SymbolTable::lookupNearestSymbolFrom(), mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapValue(), and success().
|
static |
Definition at line 3926 of file OpenMPToLLVMIRTranslation.cpp.
References PrivateVarsInfo::blockArgs, checkImplementationStatus(), cleanupPrivateVars(), collectAndValidateTaskloopRedDecls(), completePrivateVars(), computeTaskloopBounds(), convertOmpOpRegions(), mlir::LLVM::ModuleTranslation::convertType(), emitTaskReductionInitCall(), findAllocInsertPoints(), findCurrentLoopInfo(), mlir::LLVM::ModuleTranslation::getLLVMModule(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::Value::getType(), handleError(), initPrivateVar(), PrivateVarsInfo::llvmVars, mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapValue(), materializeRegionArgValue(), PrivateVarsInfo::mlirVars, popCancelFinalizationCB(), PrivateVarsInfo::privatizers, pushCancelFinalizationCB(), setInsertPointForPossiblyEmptyBlock(), and success().
|
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 3740 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), convertOmpOpRegions(), handleError(), and success().
|
static |
Converts an OpenMP task construct into LLVM IR using OpenMPIRBuilder.
Definition at line 3427 of file OpenMPToLLVMIRTranslation.cpp.
References PrivateVarsInfo::blockArgs, buildAffinityData(), buildDependData(), checkImplementationStatus(), cleanupPrivateVars(), collectAndValidateTaskloopRedDecls(), completePrivateVars(), convertOmpOpRegions(), mlir::LLVM::ModuleTranslation::convertType(), findAllocInsertPoints(), mlir::LLVM::ModuleTranslation::getLLVMModule(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), initPrivateVar(), PrivateVarsInfo::llvmVars, mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapValue(), PrivateVarsInfo::mlirVars, popCancelFinalizationCB(), PrivateVarsInfo::privatizers, pushCancelFinalizationCB(), setInsertPointForPossiblyEmptyBlock(), and success().
|
static |
Definition at line 4809 of file OpenMPToLLVMIRTranslation.cpp.
References buildDependData(), checkImplementationStatus(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and success().
|
static |
Definition at line 2717 of file OpenMPToLLVMIRTranslation.cpp.
References allocAndInitializeReductionVars(), checkImplementationStatus(), collectReductionDecls(), convertOmpOpRegions(), createReductionsAndCleanup(), findAllocInsertPoints(), getDistributeCapturingTeamsReduction(), getIsByRef(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), mlir::LLVM::ModuleTranslation::lookupValue(), and success().
|
static |
Converts an OpenMP Threadprivate operation into LLVM IR using OpenMPIRBuilder.
Definition at line 7029 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), mlir::Operation::emitError(), mlir::Value::getDefiningOp(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::Operation::getOperand(), mlir::Operation::getResult(), mlir::LLVM::ModuleTranslation::lookupGlobal(), mlir::LLVM::ModuleTranslation::mapValue(), success(), and mlir::LLVM::ModuleTranslation::symbolTable().
|
static |
Converts an OpenMP workshare loop into LLVM IR using OpenMPIRBuilder.
Definition at line 4832 of file OpenMPToLLVMIRTranslation.cpp.
References PrivateVarsInfo::addLinearVars(), allocatePrivateVars(), allocReductionVars(), checkImplementationStatus(), cleanupPrivateVars(), collectReductionDecls(), completePrivateVars(), convertOmpOpRegions(), createReductionsAndCleanup(), emitTaskReductionInitCall(), emitTaskReductionModifierFini(), findAllocInsertPoints(), findCurrentLoopInfo(), getIsByRef(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::Operation::getParentOp(), handleError(), initPrivateVars(), PrivateVarsInfo::llvmVars, mlir::LLVM::ModuleTranslation::lookupValue(), PrivateVarsInfo::mlirVars, PrivateVarsInfo::numPrivateVars, popCancelFinalizationCB(), PrivateVarsInfo::privatizers, and pushCancelFinalizationCB().
|
static |
Convert Order attribute to llvm::omp::OrderKind.
Definition at line 5287 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpSimd().
|
static |
Definition at line 10552 of file OpenMPToLLVMIRTranslation.cpp.
References getAllocationSize(), mlir::LLVM::ModuleTranslation::getLLVMModule(), getOmpTargetAlloc(), mlir::LLVM::ModuleTranslation::lookupValue(), mlir::LLVM::ModuleTranslation::mapValue(), and success().
|
static |
Definition at line 10712 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::getLLVMModule(), getOmpTargetFree(), mlir::LLVM::ModuleTranslation::lookupValue(), and success().
|
static |
Definition at line 7078 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertDeclareTargetAttr().
|
static |
Definition at line 7062 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertDeclareTargetAttr().
|
static |
Definition at line 8447 of file OpenMPToLLVMIRTranslation.cpp.
References calculateBoundsOffset(), checkIfPointerMap(), convertClauseMapFlags(), findAllocInsertPoints(), and mlir::LLVM::ModuleTranslation::getOpenMPBuilder().
Referenced by genMapInfos().
|
static |
Definition at line 9170 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::omp::allocaUsesRequireSharedMem(), mlir::LLVM::TypeToLLVMIRTranslator::getPreferredAlignment(), and mlir::omp::opInSharedDeviceContext().
Referenced by convertOmpTarget().
|
static |
Definition at line 1773 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::convertType(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), inlineOmpRegionCleanup(), mlir::omp::opInSharedDeviceContext(), owningReductionGens, result, and success().
Referenced by convertOmpDistribute(), convertOmpScope(), convertOmpSections(), convertOmpTeams(), and convertOmpWsloop().
|
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 6074 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Block::getArgument(), mlir::Value::getDefiningOp(), mlir::Operation::getOperand(), mlir::Block::getOperations(), and result.
Referenced by convertOmpAtomicCompare(), and extractAtomicComparePattern().
|
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 6111 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpAtomicCapture(), and convertOmpAtomicCompare().
|
static |
Definition at line 2234 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), handleError(), opMightBeSafeForBarriers(), and success().
Referenced by completePrivateVars().
|
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 4446 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().
|
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 4505 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().
|
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 4396 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().
|
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 4609 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::getLLVMModule(), and mlir::LLVM::ModuleTranslation::getOpenMPBuilder().
Referenced by convertOmpParallel(), convertOmpSections(), and convertOmpWsloop().
|
static |
Definition at line 8603 of file OpenMPToLLVMIRTranslation.cpp.
References checkImplementationStatus(), collectMapDataFromMapOperands(), mlir::LLVM::ModuleTranslation::convertBlock(), mlir::LLVM::ModuleTranslation::convertType(), mlir::LLVM::ModuleTranslation::forgetMapping(), genMapInfos(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), getOrCreateUserDefinedMapperFunc(), mlir::LLVM::ModuleTranslation::lookupFunction(), mlir::LLVM::ModuleTranslation::mapBlock(), mlir::LLVM::ModuleTranslation::mapFunction(), and mlir::LLVM::ModuleTranslation::mapValue().
Referenced by getOrCreateUserDefinedMapperFunc().
|
static |
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.
Definition at line 6208 of file OpenMPToLLVMIRTranslation.cpp.
References AtomicComparePatternInfo::compareOp, convertFCmpPredicateToAtomicCompareOp(), convertICmpPredicateToAtomicCompareOp(), detectComplexCompareEq(), AtomicComparePatternInfo::dVal, AtomicComparePatternInfo::eVal, mlir::Block::getArgument(), mlir::Operation::getOperand(), mlir::Block::getOperations(), ComplexComparePattern::isComplex, AtomicComparePatternInfo::isSigned, AtomicComparePatternInfo::isXBinopExpr, result, and success().
Referenced by convertOmpAtomicCapture(), and convertOmpAtomicCompare().
|
static |
Definition at line 5916 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpAtomicCapture(), and convertOmpAtomicUpdate().
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 9384 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Value::getDefiningOp().
Referenced by initTargetDefaultAttrs().
|
static |
Follow uses of host_eval-defined block arguments of the given omp.target operation and populate output variables with their corresponding host value (i.e. operand evaluated outside of the target region), based on their uses inside of the target region.
Loop bounds and steps are only optionally populated, if output vectors are provided.
Definition at line 9302 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Operation::getUsers().
Referenced by initTargetDefaultAttrs(), and initTargetRuntimeAttrs().
|
static |
Definition at line 3099 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::lookupValue(), and storeAffinityEntry().
Referenced by buildAffinityData().
|
static |
Definition at line 3176 of file OpenMPToLLVMIRTranslation.cpp.
References convertIteratorRegion(), mlir::LLVM::ModuleTranslation::forgetMapping(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and handleError().
Referenced by buildAffinityData(), and buildDependData().
|
static |
Find the insertion point for allocas given the current insertion point for normal operations in the builder.
Definition at line 692 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::WalkResult::interrupt(), mlir::LLVM::ModuleTranslation::stackWalk(), and mlir::WalkResult::wasInterrupted().
Referenced by buildAffinityData(), convertOmpAtomicCapture(), convertOmpAtomicRead(), convertOmpAtomicUpdate(), convertOmpAtomicWrite(), convertOmpDistribute(), convertOmpOrdered(), convertOmpParallel(), convertOmpScope(), convertOmpSections(), convertOmpSimd(), convertOmpTarget(), convertOmpTargetData(), convertOmpTaskgroupOp(), convertOmpTaskloopContextOp(), convertOmpTaskOp(), convertOmpTeams(), convertOmpWsloop(), and createAlteredByCaptureMap().
|
static |
Return the llvm::Value * corresponding to the privateVar that is being privatized. It isn't always as simple as looking up moduleTranslation with privateVar. For instance, in case of an allocatable, the descriptor for the allocatable is privatized. This descriptor is mapped using an MapInfoOp. So, this function will return a pointer to the llvm::Value corresponding to the block argument for the mapped descriptor.
Definition at line 1890 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::convertType(), mlir::Value::getType(), and mlir::LLVM::ModuleTranslation::lookupValue().
Referenced by initPrivateVar().
|
static |
Find the loop information structure for the loop nest being translated.
It will return a null value unless called from the translation function for a loop wrapper operation after successfully translating its body.
Definition at line 759 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::WalkResult::interrupt(), and mlir::LLVM::ModuleTranslation::stackWalk().
Referenced by convertOmpDistribute(), convertOmpSimd(), convertOmpTaskloopContextOp(), and convertOmpWsloop().
|
static |
Looks up from the operation from and returns the PrivateClauseOp with name symbolName.
Definition at line 420 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::SymbolTable::lookupNearestSymbolFrom().
Referenced by PrivateVarsInfo::addLinearVars(), and convertOmpTarget().
|
static |
Definition at line 8524 of file OpenMPToLLVMIRTranslation.cpp.
References createAlteredByCaptureMap(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), processIndividualMap(), and processMapWithMembersOf().
Referenced by convertOmpTarget(), convertOmpTargetData(), and emitUserDefinedMapper().
|
static |
Definition at line 7128 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::convertType(), mlir::Value::getDefiningOp(), getGlobalOpFromValue(), mlir::Value::getType(), and mlir::LLVM::ModuleTranslation::lookupValue().
Referenced by convertAllocateDirOp().
| llvm::Value * getAllocationSize | ( | llvm::IRBuilderBase & | builder, |
| LLVM::ModuleTranslation & | moduleTranslation, | ||
| omp::TargetAllocMemOp | op ) |
Definition at line 10533 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::convertType(), mlir::LLVM::ModuleTranslation::getLLVMModule(), and mlir::LLVM::ModuleTranslation::lookupValue().
|
static |
Definition at line 10512 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::convertType(), mlir::LLVM::ModuleTranslation::getLLVMModule(), and mlir::LLVM::ModuleTranslation::lookupValue().
Referenced by convertAllocSharedMemOp(), convertFreeSharedMemOp(), and convertTargetAllocMemOp().
|
static |
Definition at line 7326 of file OpenMPToLLVMIRTranslation.cpp.
References getArrayElementSizeInBits(), and mlir::DataLayout::getTypeSizeInBits().
Referenced by getArrayElementSizeInBits(), and getSizeInBytes().
|
static |
Definition at line 7939 of file OpenMPToLLVMIRTranslation.cpp.
References ArrayAttr().
Referenced by getOverlappedMembers().
|
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 5834 of file OpenMPToLLVMIRTranslation.cpp.
References convertAtomicOrdering().
Referenced by convertOmpAtomicCapture(), and convertOmpAtomicCompare().
Definition at line 7104 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Value::getDefiningOp(), mlir::OperationName::getIdentifier(), mlir::Operation::getName(), mlir::Operation::getNumOperands(), and mlir::Operation::getOperand().
Referenced by convertAllocateDirOp().
|
static |
Definition at line 7182 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::SymbolTable::Private.
Referenced by getRefPtrIfDeclareTarget().
|
static |
Definition at line 2677 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::WalkResult::interrupt(), and mlir::WalkResult::skip().
Referenced by convertOmpDistribute(), and convertOmpTeams().
|
static |
Definition at line 7151 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::convertType(), mlir::Value::getDefiningOp(), and mlir::LLVM::ModuleTranslation::lookupValue().
Referenced by convertAllocateDirOp().
|
static |
Definition at line 9642 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpTarget().
|
static |
Definition at line 7813 of file OpenMPToLLVMIRTranslation.cpp.
References ArrayAttr(), indices, and sortMapIndices().
Referenced by mapParentWithMembers().
Definition at line 7093 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Value::getDefiningOp(), and mlir::Operation::getOperand().
Referenced by getAllocatedLlvmTypeForVariable(), getRefPtrIfDeclareTarget(), isDeclareTargetLink(), and isDeclareTargetTo().
Definition at line 1849 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpDistribute(), convertOmpParallel(), convertOmpScope(), convertOmpSections(), convertOmpSimd(), convertOmpTeams(), and convertOmpWsloop().
|
static |
Definition at line 7529 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by mapParentWithMembers().
|
static |
Definition at line 7761 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by mapParentWithMembers(), and processMapWithMembersOf().
|
static |
Definition at line 10498 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertTargetAllocMemOp().
|
static |
Definition at line 10699 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertTargetFreeMemOp().
|
static |
Definition at line 8574 of file OpenMPToLLVMIRTranslation.cpp.
References emitUserDefinedMapper(), mlir::LLVM::ModuleTranslation::getLLVMModule(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), mlir::LLVM::ModuleTranslation::lookupFunction(), and mlir::LLVM::ModuleTranslation::mapFunction().
Referenced by convertOmpTarget(), convertOmpTargetData(), and emitUserDefinedMapper().
|
static |
Definition at line 7948 of file OpenMPToLLVMIRTranslation.cpp.
References ArrayAttr(), and getAsIntegers().
Referenced by mapParentWithMembers().
|
static |
Returns the address of the data in var, via the data_address region.
Definition at line 1938 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Region::empty(), inlineConvertOmpRegions(), mlir::LLVM::ModuleTranslation::mapValue(), materializeRegionArgValue(), and setInsertPointForPossiblyEmptyBlock().
|
static |
Convert ProcBindKind from MLIR-generated enum to LLVM enum.
Definition at line 898 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpParallel().
|
static |
Definition at line 9402 of file OpenMPToLLVMIRTranslation.cpp.
References collectReductionDecls(), mlir::Operation::getContext(), mlir::Operation::getParentOfType(), and getTypeByteSize().
Referenced by initTargetDefaultAttrs().
|
static |
Definition at line 7235 of file OpenMPToLLVMIRTranslation.cpp.
References getDeclareTargetRefPtrSuffix(), mlir::LLVM::ModuleTranslation::getFileSystem(), getGlobalOpFromValue(), mlir::LLVM::ModuleTranslation::getLLVMModule(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), isDeclareTargetLink(), and isDeclareTargetTo().
|
static |
Definition at line 7375 of file OpenMPToLLVMIRTranslation.cpp.
References checkIfPointerMap(), getArrayElementSizeInBits(), mlir::DataLayout::getTypeSizeInBits(), and mlir::LLVM::ModuleTranslation::lookupValue().
|
static |
Definition at line 8668 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::createSourceLocStrFromLocation(), mlir::LocationAttr::findInstanceOf(), and mlir::Operation::getLoc().
Referenced by convertOmpTarget(), and convertOmpTargetData().
|
static |
Definition at line 9114 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpTarget().
|
static |
Definition at line 9395 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::DataLayout::getTypeSizeInBits().
Referenced by getReductionDataSize().
|
static |
Definition at line 669 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Operation::emitError(), result, and success().
Referenced by convertOmpAtomicCapture(), convertOmpAtomicCompare(), convertOmpAtomicUpdate(), convertOmpCancel(), convertOmpCancellationPoint(), convertOmpCritical(), convertOmpDispatch(), convertOmpDistribute(), convertOmpLoopNest(), convertOmpMasked(), convertOmpMaster(), convertOmpOrderedRegion(), convertOmpParallel(), convertOmpScope(), convertOmpSections(), convertOmpSimd(), convertOmpSingle(), convertOmpTarget(), convertOmpTargetData(), convertOmpTaskgroupOp(), convertOmpTaskloopContextOp(), convertOmpTaskloopWrapperOp(), convertOmpTaskOp(), convertOmpTeams(), convertOmpWsloop(), createReductionsAndCleanup(), emitPrivatizationBarrier(), fillIteratorLoop(), handleError(), and inlineConvertOmpRegions().
|
static |
Definition at line 683 of file OpenMPToLLVMIRTranslation.cpp.
References handleError(), result, and success().
|
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 1961 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().
|
static |
Version of initPrivateVar which looks up the nonPrivateVar from mlirPrivVar.
Definition at line 1996 of file OpenMPToLLVMIRTranslation.cpp.
References findAssociatedValue(), and initPrivateVar().
|
static |
Definition at line 2009 of file OpenMPToLLVMIRTranslation.cpp.
References PrivateVarsInfo::blockArgs, initPrivateVar(), PrivateVarsInfo::llvmVars, mlir::LLVM::ModuleTranslation::mapValue(), PrivateVarsInfo::mlirVars, PrivateVarsInfo::privatizers, and setInsertPointForPossiblyEmptyBlock().
Referenced by convertOmpDistribute(), convertOmpParallel(), convertOmpScope(), convertOmpSimd(), convertOmpTarget(), and convertOmpWsloop().
|
static |
Populate default MinTeams, MaxTeams and MaxThreads to their default values as stated by the corresponding clauses, if constant.
These default values must be set before the creation of the outlined LLVM function for the target region, so that they can be used to initialize the corresponding global ConfigurationEnvironmentTy structure.
Definition at line 9434 of file OpenMPToLLVMIRTranslation.cpp.
References castOrGetParentOfType(), extractConstInteger(), extractHostEvalClauses(), getReductionDataSize(), and result.
Referenced by convertOmpTarget().
|
static |
Gather LLVM runtime values for all clauses evaluated in the host that are passed to the kernel invocation.
This function must be called only when compiling for the host. Also, it will only provide correct results if it's called after the body of targetOp has been fully generated.
Definition at line 9561 of file OpenMPToLLVMIRTranslation.cpp.
References castOrGetParentOfType(), extractHostEvalClauses(), mlir::LLVM::ModuleTranslation::getOpenMPBuilder(), and mlir::LLVM::ModuleTranslation::lookupValue().
Referenced by convertOmpTarget().
|
static |
Translates the blocks contained in the given region and appends them to at the current insertion point of builder.
The operations of the entry block are appended to the current insertion block. If set, continuationBlockArgs is populated with translated values that correspond to the values omp.yield'ed from the region.
Definition at line 1180 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(), completePrivateVars(), convertOmpTargetData(), emitTaskReductionCombFn(), emitTaskReductionInitFn(), getPrivateDataAddress(), initPrivateVar(), inlineOmpRegionCleanup(), makeAtomicReductionGen(), makeReductionGen(), and makeRefDataPtrGen().
|
static |
handling of DeclareReductionOp's cleanup region
Definition at line 1734 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::convertType(), mlir::LLVM::ModuleTranslation::forgetMapping(), mlir::Block::front(), mlir::Block::getArgument(), mlir::Value::getType(), inlineConvertOmpRegions(), mlir::LLVM::ModuleTranslation::mapValue(), nullptr, and success().
Referenced by cleanupPrivateVars(), convertOmpParallel(), convertOmpSimd(), and createReductionsAndCleanup().
Definition at line 7203 of file OpenMPToLLVMIRTranslation.cpp.
References getGlobalOpFromValue().
Referenced by checkIfPointerMap(), and getRefPtrIfDeclareTarget().
Definition at line 7216 of file OpenMPToLLVMIRTranslation.cpp.
References getGlobalOpFromValue().
Referenced by getRefPtrIfDeclareTarget().
Definition at line 10476 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Operation::getParentOfType().
|
static |
Definition at line 7359 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by processIndividualMap(), and processMapWithMembersOf().
|
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 3764 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().
|
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 1301 of file OpenMPToLLVMIRTranslation.cpp.
References atomicGen, inlineConvertOmpRegions(), and mlir::LLVM::ModuleTranslation::mapValue().
|
static |
Create an OpenMPIRBuilder-compatible reduction generator for the given reduction declaration.
The generator uses builder but ignores its insertion point.
Definition at line 1271 of file OpenMPToLLVMIRTranslation.cpp.
References inlineConvertOmpRegions(), mlir::LLVM::ModuleTranslation::mapValue(), and result.
Referenced by convertOmpSimd().
|
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 1334 of file OpenMPToLLVMIRTranslation.cpp.
References inlineConvertOmpRegions(), mlir::LLVM::ModuleTranslation::mapValue(), and result.
|
static |
Map input arguments to reduction initialization region.
Definition at line 1524 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::convertType(), mlir::Region::front(), mlir::Block::getNumArguments(), mlir::Value::getType(), mlir::LLVM::ModuleTranslation::lookupValue(), and mlir::LLVM::ModuleTranslation::mapValue().
|
static |
Definition at line 8120 of file OpenMPToLLVMIRTranslation.cpp.
References checkIfPointerMap(), mlir::LLVM::ModuleTranslation::convertType(), mlir::LLVM::createMappingInformation(), getFirstOrLastMappedMemberPtr(), getMapClauseName(), getMapDataMemberIdx(), getOverlappedMembers(), and sortMapIndices().
Referenced by processMapWithMembersOf().
|
static |
Definition at line 1922 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::LLVM::ModuleTranslation::convertType(), and mlir::Value::getType().
Referenced by completePrivateVars(), convertOmpTaskloopContextOp(), and getPrivateDataAddress().
|
static |
A compiler-generated barrier is unsafe when only part of the current team can reach it. This cannot always be determined statically (e.g. across a function call), but the enclosing OpenMP constructs can rule it out.
Definition at line 2218 of file OpenMPToLLVMIRTranslation.cpp.
References mlir::Operation::getParentOp().
Referenced by emitPrivatizationBarrier().
|
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 2867 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpTaskloopContextOp(), convertOmpTaskOp(), and convertOmpWsloop().
|
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 8004 of file OpenMPToLLVMIRTranslation.cpp.
References checkIfPointerMap(), convertClauseMapFlags(), and isPrivatizeableAttachMap().
Referenced by genMapInfos(), and processMapWithMembersOf().
|
static |
Definition at line 8362 of file OpenMPToLLVMIRTranslation.cpp.
References getMapDataMemberIdx(), isPrivatizeableAttachMap(), mapParentWithMembers(), and processIndividualMap().
Referenced by genMapInfos().
|
static |
Shared implementation of a callback which adds a termiator for the new block created for the branch taken when an openmp construct is cancelled. The terminator is saved in cancelTerminators. This callback is invoked only if there is cancellation inside of the taskgroup body. The terminator will need to be fixed to branch to the correct block to cleanup the construct.
Definition at line 2837 of file OpenMPToLLVMIRTranslation.cpp.
References constructIsCancellable().
Referenced by convertOmpTaskloopContextOp(), convertOmpTaskOp(), and convertOmpWsloop().
|
static |
Definition at line 1556 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by cleanupPrivateVars(), completePrivateVars(), convertOmpTaskloopContextOp(), convertOmpTaskOp(), getPrivateDataAddress(), and initPrivateVars().
|
static |
Definition at line 7768 of file OpenMPToLLVMIRTranslation.cpp.
References ArrayAttr(), b, if(), and indices.
Referenced by getFirstOrLastMappedMemberPtr(), and mapParentWithMembers().
|
static |
Definition at line 3077 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by buildAffinityData(), and fillAffinityLocators().
| atomicGen |
Definition at line 1722 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by makeAtomicReductionGen().
| nullptr |
Definition at line 1722 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(), mlir::acc::findCorrespondingDataExit(), findPayloadRoot(), mlir::AsmParserState::getAttributeAliasDef(), mlir::AsmParserState::getBlockDef(), mlir::impl::GpuNVVMAttachTargetBase< DerivedT >::getDependentDialects(), mlir::impl::GpuXeVMAttachTargetBase< DerivedT >::getDependentDialects(), 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(), performActions(), 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[i] |
Definition at line 1723 of file OpenMPToLLVMIRTranslation.cpp.
| owningReductionGens[i] |
Definition at line 1721 of file OpenMPToLLVMIRTranslation.cpp.
Referenced by convertOmpParallel(), and createReductionsAndCleanup().