[flang-commits] [flang] 90da688 - [flang][openacc] Avoid creation of duplicate global ctor (#71846)
via flang-commits
flang-commits at lists.llvm.org
Thu Nov 9 12:57:34 PST 2023
Author: Valentin Clement (バレンタイン クレメン)
Date: 2023-11-09T12:57:30-08:00
New Revision: 90da688baccbedc448a79144b475db7ec482efdf
URL: https://github.com/llvm/llvm-project/commit/90da688baccbedc448a79144b475db7ec482efdf
DIFF: https://github.com/llvm/llvm-project/commit/90da688baccbedc448a79144b475db7ec482efdf.diff
LOG: [flang][openacc] Avoid creation of duplicate global ctor (#71846)
PR #70698 relax the duplication rule in acc declare clauses. This lead
to potential duplicate creation of the global constructor/destructor.
This patch make sure to not generate a duplicate ctor/dtor.
Added:
Modified:
flang/lib/Lower/OpenACC.cpp
flang/test/Lower/OpenACC/HLFIR/acc-declare.f90
Removed:
################################################################################
diff --git a/flang/lib/Lower/OpenACC.cpp b/flang/lib/Lower/OpenACC.cpp
index 1c045b4273e2607..f13fb41d2baffe7 100644
--- a/flang/lib/Lower/OpenACC.cpp
+++ b/flang/lib/Lower/OpenACC.cpp
@@ -2906,6 +2906,11 @@ static void genGlobalCtors(Fortran::lower::AbstractConverter &converter,
std::stringstream asFortran;
asFortran << name->symbol->name().ToString();
+ if (builder.getModule()
+ .lookupSymbol<mlir::acc::GlobalConstructorOp>(
+ declareGlobalCtorName.str()))
+ return;
+
if (!globalOp) {
if (Fortran::semantics::FindEquivalenceSet(*name->symbol)) {
for (Fortran::semantics::EquivalenceObject eqObj :
diff --git a/flang/test/Lower/OpenACC/HLFIR/acc-declare.f90 b/flang/test/Lower/OpenACC/HLFIR/acc-declare.f90
index 6ebdd39802fef0f..7670cd654bf6fd7 100644
--- a/flang/test/Lower/OpenACC/HLFIR/acc-declare.f90
+++ b/flang/test/Lower/OpenACC/HLFIR/acc-declare.f90
@@ -304,3 +304,12 @@ module acc_declare_equivalent2
! ALL: acc.delete accPtr(%[[DEVICEPTR]] : !fir.ref<!fir.array<40xi8>>) {dataClause = #acc<data_clause acc_create>, name = "v2", structured = false}
! ALL: acc.terminator
! ALL: }
+
+module acc_declare_allocatable_test2
+ integer, allocatable :: data1(:)
+ integer, allocatable :: data2(:)
+ !$acc declare create(data1, data2, data1)
+end module
+
+! ALL-LABEL: acc.global_ctor @_QMacc_declare_allocatable_test2Edata1_acc_ctor
+! ALL-LABEL: acc.global_ctor @_QMacc_declare_allocatable_test2Edata2_acc_ctor
More information about the flang-commits
mailing list