[Mlir-commits] [mlir] f7d92d4 - [mlir][openacc] Use new private representation in acc.serial
Valentin Clement
llvmlistbot at llvm.org
Mon May 22 09:50:44 PDT 2023
Author: Valentin Clement
Date: 2023-05-22T09:50:34-07:00
New Revision: f7d92d45a875a252848df741dcb089d4cb89af3e
URL: https://github.com/llvm/llvm-project/commit/f7d92d45a875a252848df741dcb089d4cb89af3e
DIFF: https://github.com/llvm/llvm-project/commit/f7d92d45a875a252848df741dcb089d4cb89af3e.diff
LOG: [mlir][openacc] Use new private representation in acc.serial
Update acc.serial private operands list to use the new design
introduced in D150622.
Test in flang/test/Lower/OpenACC/acc-parallel.f90 and
flang/test/Lower/OpenACC/acc-parallel-loop.f90 are temporarly
disabled and will be enabled with updated lowering in the next
patch.
Depends on D150971
Reviewed By: razvanlupusoru
Differential Revision: https://reviews.llvm.org/D150972
Added:
Modified:
flang/test/Lower/OpenACC/acc-serial-loop.f90
flang/test/Lower/OpenACC/acc-serial.f90
mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td
mlir/test/Dialect/OpenACC/ops.mlir
Removed:
################################################################################
diff --git a/flang/test/Lower/OpenACC/acc-serial-loop.f90 b/flang/test/Lower/OpenACC/acc-serial-loop.f90
index 673a90f567087..968fd2e5e4b27 100644
--- a/flang/test/Lower/OpenACC/acc-serial-loop.f90
+++ b/flang/test/Lower/OpenACC/acc-serial-loop.f90
@@ -358,18 +358,19 @@ subroutine acc_serial_loop
! CHECK: acc.yield
! CHECK-NEXT: }{{$}}
- !$acc serial loop private(a) firstprivate(b)
- DO i = 1, n
- a(i) = b(i)
- END DO
-
-! CHECK: acc.serial firstprivate(%[[B]] : !fir.ref<!fir.array<10xf32>>) private(%[[A]] : !fir.ref<!fir.array<10xf32>>) {
-! CHECK: acc.loop private(%[[A]] : !fir.ref<!fir.array<10xf32>>) {
-! CHECK: fir.do_loop
-! CHECK: acc.yield
-! CHECK-NEXT: }{{$}}
-! CHECK: acc.yield
-! CHECK-NEXT: }{{$}}
+! TODO: update when lowering is updated to new private design
+! !$acc serial loop private(a) firstprivate(b)
+! DO i = 1, n
+! a(i) = b(i)
+! END DO
+
+! TODO: acc.serial firstprivate(%[[B]] : !fir.ref<!fir.array<10xf32>>) private(%[[A]] : !fir.ref<!fir.array<10xf32>>) {
+! TODO: acc.loop private(%[[A]] : !fir.ref<!fir.array<10xf32>>) {
+! TODO: fir.do_loop
+! TODO: acc.yield
+! TODO-NEXT: }{{$}}
+! TODO: acc.yield
+! TODO-NEXT: }{{$}}
!$acc serial loop seq
DO i = 1, n
diff --git a/flang/test/Lower/OpenACC/acc-serial.f90 b/flang/test/Lower/OpenACC/acc-serial.f90
index 96ecf80f28cd5..ab0593608a5b4 100644
--- a/flang/test/Lower/OpenACC/acc-serial.f90
+++ b/flang/test/Lower/OpenACC/acc-serial.f90
@@ -231,11 +231,12 @@ subroutine acc_serial
! CHECK: acc.detach accPtr(%[[ATTACH_D]] : !fir.ptr<f32>) {dataClause = 10 : i64, name = "d"}
! CHECK: acc.detach accPtr(%[[ATTACH_E]] : !fir.ptr<f32>) {dataClause = 10 : i64, name = "e"}
- !$acc serial private(a) firstprivate(b) private(c)
- !$acc end serial
+! TODO: update when lowering is updated to new private design
+! !$acc serial private(a) firstprivate(b) private(c)
+! !$acc end serial
-! CHECK: acc.serial firstprivate(%[[B]] : !fir.ref<!fir.array<10x10xf32>>) private(%[[A]], %[[C]] : !fir.ref<!fir.array<10x10xf32>>, !fir.ref<!fir.array<10x10xf32>>) {
-! CHECK: acc.yield
-! CHECK-NEXT: }{{$}}
+! TODO: acc.serial firstprivate(%[[B]] : !fir.ref<!fir.array<10x10xf32>>) private(%[[A]], %[[C]] : !fir.ref<!fir.array<10x10xf32>>, !fir.ref<!fir.array<10x10xf32>>) {
+! TODO: acc.yield
+! TODO-NEXT: }{{$}}
end subroutine
diff --git a/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td b/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td
index 4cc91177e5a0b..6d1ea0fc43cc7 100644
--- a/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td
+++ b/mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td
@@ -704,7 +704,8 @@ def OpenACC_SerialOp : OpenACC_Op<"serial",
UnitAttr:$selfAttr,
OptionalAttr<OpenACC_ReductionOperatorAttr>:$reductionOp,
Variadic<AnyType>:$reductionOperands,
- Variadic<AnyType>:$gangPrivateOperands,
+ Variadic<OpenACC_PointerLikeTypeInterface>:$gangPrivateOperands,
+ OptionalAttr<SymbolRefArrayAttr>:$privatizations,
Variadic<AnyType>:$gangFirstPrivateOperands,
Variadic<OpenACC_PointerLikeTypeInterface>:$dataClauseOperands,
OptionalAttr<DefaultValueAttr>:$defaultAttr);
@@ -725,7 +726,9 @@ def OpenACC_SerialOp : OpenACC_Op<"serial",
| `async` `(` $async `:` type($async) `)`
| `firstprivate` `(` $gangFirstPrivateOperands `:`
type($gangFirstPrivateOperands) `)`
- | `private` `(` $gangPrivateOperands `:` type($gangPrivateOperands) `)`
+ | `private` `(` custom<PrivatizationList>(
+ $gangPrivateOperands, type($gangPrivateOperands), $privatizations)
+ `)`
| `wait` `(` $waitOperands `:` type($waitOperands) `)`
| `self` `(` $selfCond `)`
| `if` `(` $ifCond `)`
diff --git a/mlir/test/Dialect/OpenACC/ops.mlir b/mlir/test/Dialect/OpenACC/ops.mlir
index c0498f99119fc..407b2d9f4d84f 100644
--- a/mlir/test/Dialect/OpenACC/ops.mlir
+++ b/mlir/test/Dialect/OpenACC/ops.mlir
@@ -490,7 +490,25 @@ func.func @testparallelop(%a: memref<10xf32>, %b: memref<10xf32>, %c: memref<10x
// -----
-// -----
+acc.private.recipe @privatization_memref_10_f32 : memref<10xf32> init {
+^bb0(%arg0: memref<10xf32>):
+ %0 = memref.alloc() : memref<10xf32>
+ acc.yield %0 : memref<10xf32>
+} destroy {
+^bb0(%arg0: memref<10xf32>):
+ memref.dealloc %arg0 : memref<10xf32>
+ acc.terminator
+}
+
+acc.private.recipe @privatization_memref_10_10_f32 : memref<10x10xf32> init {
+^bb0(%arg0: memref<10x10xf32>):
+ %0 = memref.alloc() : memref<10x10xf32>
+ acc.yield %0 : memref<10x10xf32>
+} destroy {
+^bb0(%arg0: memref<10x10xf32>):
+ memref.dealloc %arg0 : memref<10x10xf32>
+ acc.terminator
+}
func.func @testserialop(%a: memref<10xf32>, %b: memref<10xf32>, %c: memref<10x10xf32>) -> () {
%i64value = arith.constant 1 : i64
@@ -510,7 +528,7 @@ func.func @testserialop(%a: memref<10xf32>, %b: memref<10xf32>, %c: memref<10x10
}
acc.serial wait(%i64value, %i32value, %idxValue : i64, i32, index) {
}
- acc.serial private(%a, %c : memref<10xf32>, memref<10x10xf32>) firstprivate(%b: memref<10xf32>) {
+ acc.serial private(@privatization_memref_10_f32 -> %a : memref<10xf32>, @privatization_memref_10_10_f32 -> %c : memref<10x10xf32>) firstprivate(%b: memref<10xf32>) {
}
acc.serial {
} attributes {defaultAttr = #acc<defaultvalue none>}
@@ -546,7 +564,7 @@ func.func @testserialop(%a: memref<10xf32>, %b: memref<10xf32>, %c: memref<10x10
// CHECK-NEXT: }
// CHECK: acc.serial wait([[I64VALUE]], [[I32VALUE]], [[IDXVALUE]] : i64, i32, index) {
// CHECK-NEXT: }
-// CHECK: acc.serial firstprivate([[ARGB]] : memref<10xf32>) private([[ARGA]], [[ARGC]] : memref<10xf32>, memref<10x10xf32>) {
+// CHECK: acc.serial firstprivate([[ARGB]] : memref<10xf32>) private(@privatization_memref_10_f32 -> [[ARGA]] : memref<10xf32>, @privatization_memref_10_10_f32 -> [[ARGC]] : memref<10x10xf32>) {
// CHECK-NEXT: }
// CHECK: acc.serial {
// CHECK-NEXT: } attributes {defaultAttr = #acc<defaultvalue none>}
More information about the Mlir-commits
mailing list