[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