aboutsummaryrefslogtreecommitdiff
path: root/mlir/lib
diff options
context:
space:
mode:
authorharishch4 <harishcse44@gmail.com>2024-06-28 08:03:57 +0530
committerGitHub <noreply@github.com>2024-06-28 08:03:57 +0530
commit874b880fce8522b06c6cf73a76612a844e2eaf1b (patch)
tree44a824561d07dded97a17f796defb6165e51c529 /mlir/lib
parentd16b21b17d13ecd88a068bb803df43e53d3b04ba (diff)
downloadllvm-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.cpp23
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();