[flang-commits] [flang] 3c356ee - [flang][openacc] Support variable from equivalence in data clauses (#71434)
via flang-commits
flang-commits at lists.llvm.org
Mon Nov 6 15:49:45 PST 2023
Author: Valentin Clement (バレンタイン クレメン)
Date: 2023-11-06T15:49:40-08:00
New Revision: 3c356eef31ab309466c198de3915037b068d8861
URL: https://github.com/llvm/llvm-project/commit/3c356eef31ab309466c198de3915037b068d8861
DIFF: https://github.com/llvm/llvm-project/commit/3c356eef31ab309466c198de3915037b068d8861.diff
LOG: [flang][openacc] Support variable from equivalence in data clauses (#71434)
The value for a var in an equivalence is represented by a `fir.ptr`.
Support this type in the recipe creation.
Added:
Modified:
flang/lib/Lower/OpenACC.cpp
flang/test/Lower/OpenACC/acc-private.f90
Removed:
################################################################################
diff --git a/flang/lib/Lower/OpenACC.cpp b/flang/lib/Lower/OpenACC.cpp
index 27b262f95356750..2337beb80dc979d 100644
--- a/flang/lib/Lower/OpenACC.cpp
+++ b/flang/lib/Lower/OpenACC.cpp
@@ -724,7 +724,7 @@ mlir::Type getTypeFromBounds(llvm::SmallVector<mlir::Value> &bounds,
if (shape.empty() || shape.size() != bounds.size())
return ty;
auto newSeqTy = fir::SequenceType::get(shape, seqTy.getEleTy());
- if (mlir::isa<fir::ReferenceType>(ty))
+ if (mlir::isa<fir::ReferenceType, fir::PointerType>(ty))
return fir::ReferenceType::get(newSeqTy);
return newSeqTy;
}
diff --git a/flang/test/Lower/OpenACC/acc-private.f90 b/flang/test/Lower/OpenACC/acc-private.f90
index 80b474b348c1c2c..7ec8e345fd3af34 100644
--- a/flang/test/Lower/OpenACC/acc-private.f90
+++ b/flang/test/Lower/OpenACC/acc-private.f90
@@ -3,6 +3,15 @@
! RUN: bbc -fopenacc -emit-fir %s -o - | FileCheck %s --check-prefixes=CHECK,FIR
! RUN: bbc -fopenacc -emit-hlfir %s -o - | FileCheck %s --check-prefixes=CHECK,HLFIR
+! CHECK-LABEL: acc.private.recipe @privatization_ref_10xf32 : !fir.ref<!fir.array<10xf32>> init {
+! HLFIR: ^bb0(%[[ARG0:.*]]: !fir.ref<!fir.array<10xf32>>):
+! HLFIR: %[[C10:.*]] = arith.constant 10 : index
+! HLFIR: %[[SHAPE:.*]] = fir.shape %[[C10]] : (index) -> !fir.shape<1>
+! HLFIR: %[[ALLOCA:.*]] = fir.alloca !fir.array<10xf32>
+! HLFIR: %[[DECLARE:.*]]:2 = hlfir.declare %[[ALLOCA]](%[[SHAPE]]) {uniq_name = "acc.private.init"} : (!fir.ref<!fir.array<10xf32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>)
+! HLFIR: acc.yield %[[DECLARE]]#0 : !fir.ref<!fir.array<10xf32>>
+! CHECK: }
+
! CHECK-LABEL: acc.firstprivate.recipe @firstprivatization_ref_UxUx2xi32 : !fir.ref<!fir.array<?x?x2xi32>> init {
! CHECK: ^bb0(%[[ARG0:.*]]: !fir.ref<!fir.array<?x?x2xi32>>, %[[ARG1:.*]]: index, %[[ARG2:.*]]: index, %[[ARG3:.*]]: index):
! HLFIR: %[[SHAPE:.*]] = fir.shape %[[ARG1]], %[[ARG2]], %[[ARG3]] : (index, index, index) -> !fir.shape<3>
@@ -363,3 +372,17 @@ subroutine acc_firstprivate_dynamic_extent(a, n)
end subroutine
! CHECK: acc.parallel firstprivate(@firstprivatization_ref_UxUx2xi32 -> %{{.*}} : !fir.ref<!fir.array<?x?x2xi32>>)
+
+module acc_declare_equivalent
+ integer, parameter :: n = 10
+ real :: v1(n)
+ real :: v2(n)
+ equivalence(v1(1), v2(1))
+contains
+ subroutine sub1()
+ !$acc parallel private(v2)
+ !$acc end parallel
+ end subroutine
+end module
+
+! CHECK: acc.parallel private(@privatization_ref_10xf32 -> %{{.*}} : !fir.ref<!fir.array<10xf32>>)
More information about the flang-commits
mailing list