[Mlir-commits] [mlir] [OPENACC] Added custom builder for acc::ParallelOp (PR #98191)
Vijay Kandiah
llvmlistbot at llvm.org
Tue Jul 9 10:10:51 PDT 2024
https://github.com/VijayKandiah created https://github.com/llvm/llvm-project/pull/98191
This change adds a custom builder for `acc::ParallelOp`. This enables users to only specify the operands they would need for their `acc::ParallelOp` while building it. They can specify nothing to create an empty `acc.parallel`, or all of the 11 operands listed [here](https://mlir.llvm.org/docs/Dialects/OpenACCDialect/#operands-27), or anywhere in between following the specified order in this custom builder. Unspecified operands are left empty. Additionally, users can later set the optional attributes such as `numGangsDeviceType` using the available attribute setters for `acc::ParallelOp`.
>From c995c78dac496905c40a44fe876ff3aa1f223a91 Mon Sep 17 00:00:00 2001
From: Vijay Kandiah <vkandiah at genoa1.pgi.net>
Date: Tue, 9 Jul 2024 10:01:22 -0700
Subject: [PATCH] [OPENACC] Added custom builder for acc::ParallelOp
---
.../mlir/Dialect/OpenACC/OpenACCOps.td | 14 +++++++++
mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp | 29 +++++++++++++++++--
2 files changed, 41 insertions(+), 2 deletions(-)
diff --git a/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td b/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td
index dc255e772841c..148bed62aa8f2 100644
--- a/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td
+++ b/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td
@@ -1121,6 +1121,20 @@ def OpenACC_ParallelOp : OpenACC_Op<"parallel",
let regions = (region AnyRegion:$region);
+ let builders = [
+ OpBuilder<(ins
+ CArg<"mlir::ValueRange", "{}">:$numGangs,
+ CArg<"mlir::ValueRange", "{}">:$numWorkers,
+ CArg<"mlir::ValueRange", "{}">:$vectorLength,
+ CArg<"mlir::ValueRange", "{}">:$asyncOperands,
+ CArg<"mlir::ValueRange", "{}">:$waitOperands,
+ CArg<"mlir::Value", "{}">:$ifCond,
+ CArg<"mlir::Value", "{}">:$selfCond,
+ CArg<"mlir::ValueRange", "{}">:$reductionOperands,
+ CArg<"mlir::ValueRange", "{}">:$gangPrivateOperands,
+ CArg<"mlir::ValueRange", "{}">:$gangFirstPrivateOperands,
+ CArg<"mlir::ValueRange", "{}">:$dataClauseOperands)>];
+
let extraClassDeclaration = [{
/// The number of data operands.
unsigned getNumDataOperands();
diff --git a/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp b/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp
index 01305898f252d..c3c6dffd5ae49 100644
--- a/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp
+++ b/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp
@@ -905,6 +905,31 @@ mlir::Value ParallelOp::getWaitDevnum(mlir::acc::DeviceType deviceType) {
deviceType);
}
+void ParallelOp::build(mlir::OpBuilder &odsBuilder,
+ mlir::OperationState &odsState,
+ mlir::ValueRange numGangs, mlir::ValueRange numWorkers,
+ mlir::ValueRange vectorLength,
+ mlir::ValueRange asyncOperands,
+ mlir::ValueRange waitOperands, mlir::Value ifCond,
+ mlir::Value selfCond, mlir::ValueRange reductionOperands,
+ mlir::ValueRange gangPrivateOperands,
+ mlir::ValueRange gangFirstPrivateOperands,
+ mlir::ValueRange dataClauseOperands) {
+
+ ParallelOp::build(
+ odsBuilder, odsState, asyncOperands, /*asyncOperandsDeviceType=*/nullptr,
+ /*asyncOnly=*/nullptr, waitOperands, /*waitOperandsSegments=*/nullptr,
+ /*waitOperandsDeviceType=*/nullptr, /*hasWaitDevnum=*/nullptr,
+ /*waitOnly=*/nullptr, numGangs, /*numGangsSegments=*/nullptr,
+ /*numGangsDeviceType=*/nullptr, numWorkers,
+ /*numWorkersDeviceType=*/nullptr, vectorLength,
+ /*vectorLengthDeviceType=*/nullptr, ifCond, selfCond,
+ /*selfAttr=*/nullptr, reductionOperands, /*reductionRecipes=*/nullptr,
+ gangPrivateOperands, /*privatizations=*/nullptr, gangFirstPrivateOperands,
+ /*firstprivatizations=*/nullptr, dataClauseOperands,
+ /*defaultAttr=*/nullptr, /*combined=*/nullptr);
+}
+
static ParseResult parseNumGangs(
mlir::OpAsmParser &parser,
llvm::SmallVectorImpl<mlir::OpAsmParser::UnresolvedOperand> &operands,
@@ -2085,8 +2110,8 @@ void printLoopControl(OpAsmPrinter &p, Operation *op, Region ®ion,
llvm::interleaveComma(regionArgs, p,
[&p](Value v) { p << v << " : " << v.getType(); });
p << ") = (" << lowerbound << " : " << lowerboundType << ") to ("
- << upperbound << " : " << upperboundType << ") "
- << " step (" << steps << " : " << stepType << ") ";
+ << upperbound << " : " << upperboundType << ") " << " step (" << steps
+ << " : " << stepType << ") ";
}
p.printRegion(region, /*printEntryBlockArgs=*/false);
}
More information about the Mlir-commits
mailing list