[flang-commits] [flang] 369da84 - [flang][cuda] Allow assumed-size declaration for SHARED variable (#130833)

via flang-commits flang-commits at lists.llvm.org
Thu Mar 13 11:06:21 PDT 2025


Author: Valentin Clement (バレンタイン クレメン)
Date: 2025-03-13T11:06:17-07:00
New Revision: 369da8421c2f70df3391b97a117b83961687b70d

URL: https://github.com/llvm/llvm-project/commit/369da8421c2f70df3391b97a117b83961687b70d
DIFF: https://github.com/llvm/llvm-project/commit/369da8421c2f70df3391b97a117b83961687b70d.diff

LOG: [flang][cuda] Allow assumed-size declaration for SHARED variable (#130833)

Avoid triggering an assertion for shared variable using the assumed-size
syntax.

```
attributes(global) subroutine sharedstar()
  real, shared :: s(*) ! ok. dynamic shared memory.
end subroutine
```

Added: 
    flang/test/Lower/CUDA/cuda-shared01.cuf

Modified: 
    flang/include/flang/Lower/BoxAnalyzer.h
    flang/include/flang/Semantics/tools.h

Removed: 
    


################################################################################
diff  --git a/flang/include/flang/Lower/BoxAnalyzer.h b/flang/include/flang/Lower/BoxAnalyzer.h
index 8eca7d66a71bf..cd9037360a56b 100644
--- a/flang/include/flang/Lower/BoxAnalyzer.h
+++ b/flang/include/flang/Lower/BoxAnalyzer.h
@@ -403,8 +403,9 @@ class BoxAnalyzer : public fir::details::matcher<BoxAnalyzer> {
                 continue;
               }
             } else if (subs.ubound().isStar()) {
-              assert(Fortran::semantics::IsNamedConstant(sym) &&
-                     "expect implied shape constant");
+              assert(Fortran::semantics::IsNamedConstant(sym) ||
+                     Fortran::semantics::IsCUDAShared(sym) &&
+                         "expect implied shape constant");
               shapes.push_back(fir::SequenceType::getUnknownExtent());
               continue;
             }

diff  --git a/flang/include/flang/Semantics/tools.h b/flang/include/flang/Semantics/tools.h
index 16fd8d158b0e0..31dfad098f3a7 100644
--- a/flang/include/flang/Semantics/tools.h
+++ b/flang/include/flang/Semantics/tools.h
@@ -222,6 +222,16 @@ inline bool HasCUDAAttr(const Symbol &sym) {
   return false;
 }
 
+inline bool IsCUDAShared(const Symbol &sym) {
+  if (const auto *details{sym.GetUltimate().detailsIf<ObjectEntityDetails>()}) {
+    if (details->cudaDataAttr() &&
+        *details->cudaDataAttr() == common::CUDADataAttr::Shared) {
+      return true;
+    }
+  }
+  return false;
+}
+
 inline bool NeedCUDAAlloc(const Symbol &sym) {
   if (IsDummy(sym)) {
     return false;

diff  --git a/flang/test/Lower/CUDA/cuda-shared01.cuf b/flang/test/Lower/CUDA/cuda-shared01.cuf
new file mode 100644
index 0000000000000..a4603bed1f0ed
--- /dev/null
+++ b/flang/test/Lower/CUDA/cuda-shared01.cuf
@@ -0,0 +1,9 @@
+
+! RUN: bbc -emit-hlfir -fcuda %s -o - | FileCheck %s
+
+attributes(global) subroutine sharedstar()
+  real, shared :: s(*) ! ok. dynamic shared memory.
+end subroutine
+
+! CHECK-LABEL: func.func @_QPsharedstar()
+! CHECK: hlfir.declare %{{.*}}(%{{.*}}) {data_attr = #cuf.cuda<shared>, uniq_name = "_QFsharedstarEs"} : (!fir.ref<!fir.array<?xf32>>, !fir.shape<1>) -> (!fir.box<!fir.array<?xf32>>, !fir.ref<!fir.array<?xf32>>)


        


More information about the flang-commits mailing list