diff options
author | harishch4 <harishcse44@gmail.com> | 2024-06-28 08:03:57 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-28 08:03:57 +0530 |
commit | 874b880fce8522b06c6cf73a76612a844e2eaf1b (patch) | |
tree | 44a824561d07dded97a17f796defb6165e51c529 /mlir/lib | |
parent | d16b21b17d13ecd88a068bb803df43e53d3b04ba (diff) | |
download | llvm-874b880fce8522b06c6cf73a76612a844e2eaf1b.zip llvm-874b880fce8522b06c6cf73a76612a844e2eaf1b.tar.gz llvm-874b880fce8522b06c6cf73a76612a844e2eaf1b.tar.bz2 |
[MLIR][OpenMP] Lowering support for Order clause in SIMD directive (#96866)
Diffstat (limited to 'mlir/lib')
-rw-r--r-- | mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp index eabc4b3..6754a5c 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp @@ -1460,6 +1460,18 @@ convertOmpParallel(omp::ParallelOp opInst, llvm::IRBuilderBase &builder, return bodyGenStatus; } +/// Convert Order attribute to llvm::omp::OrderKind. +static llvm::omp::OrderKind +convertOrderKind(std::optional<omp::ClauseOrderKind> o) { + if (!o) + return llvm::omp::OrderKind::OMP_ORDER_unknown; + switch (*o) { + case omp::ClauseOrderKind::Concurrent: + return llvm::omp::OrderKind::OMP_ORDER_concurrent; + } + llvm_unreachable("Unknown ClauseOrderKind kind"); +} + /// Converts an OpenMP simd loop into LLVM IR using OpenMPIRBuilder. static LogicalResult convertOmpSimd(Operation &opInst, llvm::IRBuilderBase &builder, @@ -1539,11 +1551,12 @@ convertOmpSimd(Operation &opInst, llvm::IRBuilderBase &builder, safelen = builder.getInt64(safelenVar.value()); llvm::MapVector<llvm::Value *, llvm::Value *> alignedVars; - ompBuilder->applySimd( - loopInfo, alignedVars, - simdOp.getIfExpr() ? moduleTranslation.lookupValue(simdOp.getIfExpr()) - : nullptr, - llvm::omp::OrderKind::OMP_ORDER_unknown, simdlen, safelen); + llvm::omp::OrderKind order = convertOrderKind(simdOp.getOrderVal()); + ompBuilder->applySimd(loopInfo, alignedVars, + simdOp.getIfExpr() + ? moduleTranslation.lookupValue(simdOp.getIfExpr()) + : nullptr, + order, simdlen, safelen); builder.restoreIP(afterIP); return success(); |