[Mlir-commits] [mlir] 804b997 - [mlir][openacc] Introduce acc.declare operation
Valentin Clement
llvmlistbot at llvm.org
Mon Aug 21 08:30:14 PDT 2023
Author: Valentin Clement
Date: 2023-08-21T08:30:07-07:00
New Revision: 804b9979c5220a21355225ca9da6f0c17e1c8da7
URL: https://github.com/llvm/llvm-project/commit/804b9979c5220a21355225ca9da6f0c17e1c8da7
DIFF: https://github.com/llvm/llvm-project/commit/804b9979c5220a21355225ca9da6f0c17e1c8da7.diff
LOG: [mlir][openacc] Introduce acc.declare operation
The acc.declare operation represent the implicit
region of variable in the declare directive in the function
(and subroutine in fortran).
Reviewed By: razvanlupusoru
Differential Revision: https://reviews.llvm.org/D158314
Added:
Modified:
mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td
mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp
mlir/test/Dialect/OpenACC/ops.mlir
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td b/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td
index a901522749f8d5..6532123fa1f78a 100644
--- a/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td
+++ b/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td
@@ -1332,6 +1332,36 @@ def OpenACC_GlobalDestructorOp : OpenACC_Op<"global_dtor",
let hasVerifier = 0;
}
+def OpenACC_DeclareOp : OpenACC_Op<"declare", [RecursiveMemoryEffects]> {
+ let summary = "declare implicit region";
+
+ let description = [{
+ The "acc.declare" operation represents an implicit declare region in
+ function (and subroutine in Fortran).
+
+ Example:
+
+ ```mlir
+ %pa = acc.present varPtr(%a : memref<10x10xf32>) -> memref<10x10xf32>
+ acc.declare dataOperands(%pa: memref<10x10xf32>) {
+ // implicit region
+ }
+ ```
+ }];
+
+ let arguments = (ins
+ Variadic<OpenACC_PointerLikeTypeInterface>:$dataClauseOperands);
+
+ let regions = (region AnyRegion:$region);
+
+ let assemblyFormat = [{
+ `dataOperands` `(` $dataClauseOperands `:` type($dataClauseOperands) `)`
+ $region attr-dict-with-keyword
+ }];
+
+ let hasVerifier = 1;
+}
+
//===----------------------------------------------------------------------===//
// 2.15.1 Routine Directive
//===----------------------------------------------------------------------===//
diff --git a/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp b/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp
index b67e9e2e7d1110..8b0126fccd05ed 100644
--- a/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp
+++ b/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp
@@ -1037,6 +1037,14 @@ LogicalResult acc::DeclareExitOp::verify() {
return checkDeclareOperands(*this, this->getDataClauseOperands());
}
+//===----------------------------------------------------------------------===//
+// DeclareOp
+//===----------------------------------------------------------------------===//
+
+LogicalResult acc::DeclareOp::verify() {
+ return checkDeclareOperands(*this, this->getDataClauseOperands());
+}
+
//===----------------------------------------------------------------------===//
// RoutineOp
//===----------------------------------------------------------------------===//
diff --git a/mlir/test/Dialect/OpenACC/ops.mlir b/mlir/test/Dialect/OpenACC/ops.mlir
index 789ef8474acb6e..13989f9e28df03 100644
--- a/mlir/test/Dialect/OpenACC/ops.mlir
+++ b/mlir/test/Dialect/OpenACC/ops.mlir
@@ -1674,3 +1674,24 @@ func.func @acc_func() -> () {
// CHECK-LABEL: func.func @acc_func
// CHECK: "test.openacc_dummy_op"() {acc.declare_action = #acc.declare_action<postAlloc = @_QMacc_declareFacc_declare_allocateEa_acc_declare_update_desc_post_alloc>}
+
+// -----
+
+func.func @compute3(%a: memref<10x10xf32>, %b: memref<10x10xf32>, %c: memref<10xf32>, %d: memref<10xf32>) {
+ %lb = arith.constant 0 : index
+ %st = arith.constant 1 : index
+ %c10 = arith.constant 10 : index
+ %numGangs = arith.constant 10 : i64
+ %numWorkers = arith.constant 10 : i64
+
+ %pa = acc.present varPtr(%a : memref<10x10xf32>) -> memref<10x10xf32>
+ %pb = acc.present varPtr(%b : memref<10x10xf32>) -> memref<10x10xf32>
+ %pc = acc.present varPtr(%c : memref<10xf32>) -> memref<10xf32>
+ %pd = acc.present varPtr(%d : memref<10xf32>) -> memref<10xf32>
+ acc.declare dataOperands(%pa, %pb, %pc, %pd: memref<10x10xf32>, memref<10x10xf32>, memref<10xf32>, memref<10xf32>) {
+ }
+ return
+}
+
+// CHECK-LABEL: func.func @compute3
+// CHECK: acc.declare dataOperands(
More information about the Mlir-commits
mailing list