[flang-commits] [flang] 939bdae - [flang][openacc] Attach attribute only when there is an exit operation
    Valentin Clement via flang-commits 
    flang-commits at lists.llvm.org
       
    Wed Aug 16 13:10:48 PDT 2023
    
    
  
Author: Valentin Clement
Date: 2023-08-16T13:10:43-07:00
New Revision: 939bdaec18c9f22ac52809fea5a1ab0301a90f02
URL: https://github.com/llvm/llvm-project/commit/939bdaec18c9f22ac52809fea5a1ab0301a90f02
DIFF: https://github.com/llvm/llvm-project/commit/939bdaec18c9f22ac52809fea5a1ab0301a90f02.diff
LOG: [flang][openacc] Attach attribute only when there is an exit operation
Not all declare clause have an exit operation attach to them and
therefore no dealloc function generated. Attach
the pre/post deallocation attribute only for the clauses that have
an exit operation.
Reviewed By: razvanlupusoru
Differential Revision: https://reviews.llvm.org/D158106
Added: 
    
Modified: 
    flang/lib/Lower/OpenACC.cpp
Removed: 
    
################################################################################
diff  --git a/flang/lib/Lower/OpenACC.cpp b/flang/lib/Lower/OpenACC.cpp
index d2c42cf2b76621..d2db10c0d0cb5c 100644
--- a/flang/lib/Lower/OpenACC.cpp
+++ b/flang/lib/Lower/OpenACC.cpp
@@ -3048,6 +3048,14 @@ void Fortran::lower::attachDeclarePostAllocAction(
 void Fortran::lower::attachDeclarePreDeallocAction(
     AbstractConverter &converter, fir::FirOpBuilder &builder,
     mlir::Value beginOpValue, const Fortran::semantics::Symbol &sym) {
+  if (!sym.test(Fortran::semantics::Symbol::Flag::AccCreate) &&
+      !sym.test(Fortran::semantics::Symbol::Flag::AccCopyIn) &&
+      !sym.test(Fortran::semantics::Symbol::Flag::AccCopyInReadOnly) &&
+      !sym.test(Fortran::semantics::Symbol::Flag::AccCopy) &&
+      !sym.test(Fortran::semantics::Symbol::Flag::AccCopyOut) &&
+      !sym.test(Fortran::semantics::Symbol::Flag::AccDeviceResident))
+    return;
+
   std::stringstream fctName;
   fctName << converter.mangleName(sym) << declarePreDeallocSuffix.str();
   beginOpValue.getDefiningOp()->setAttr(
@@ -3062,6 +3070,14 @@ void Fortran::lower::attachDeclarePreDeallocAction(
 void Fortran::lower::attachDeclarePostDeallocAction(
     AbstractConverter &converter, fir::FirOpBuilder &builder,
     const Fortran::semantics::Symbol &sym) {
+  if (!sym.test(Fortran::semantics::Symbol::Flag::AccCreate) &&
+      !sym.test(Fortran::semantics::Symbol::Flag::AccCopyIn) &&
+      !sym.test(Fortran::semantics::Symbol::Flag::AccCopyInReadOnly) &&
+      !sym.test(Fortran::semantics::Symbol::Flag::AccCopy) &&
+      !sym.test(Fortran::semantics::Symbol::Flag::AccCopyOut) &&
+      !sym.test(Fortran::semantics::Symbol::Flag::AccDeviceResident))
+    return;
+
   std::stringstream fctName;
   fctName << converter.mangleName(sym) << declarePostDeallocSuffix.str();
   mlir::Operation &op = builder.getInsertionBlock()->back();
        
    
    
More information about the flang-commits
mailing list