[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