Skip to content

Commit f865620

Browse files
authored
[flang][cuda] Do not lower device target in porgram as global (#120126)
As it was done in #102512, do not create global for arrays declared in program unit with cuda data attribute.
1 parent 1751914 commit f865620

File tree

2 files changed

+4
-1
lines changed

2 files changed

+4
-1
lines changed

flang/lib/Evaluate/tools.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1719,7 +1719,8 @@ bool IsSaved(const Symbol &original) {
17191719
return false;
17201720
} else if (scopeKind == Scope::Kind::Module ||
17211721
(scopeKind == Scope::Kind::MainProgram &&
1722-
(symbol.attrs().test(Attr::TARGET) || evaluate::IsCoarray(symbol)))) {
1722+
(symbol.attrs().test(Attr::TARGET) || evaluate::IsCoarray(symbol)) &&
1723+
Fortran::evaluate::CanCUDASymbolHaveSaveAttr(symbol))) {
17231724
// 8.5.16p4
17241725
// In main programs, implied SAVE matters only for pointer
17251726
// initialization targets and coarrays.

flang/test/Lower/CUDA/cuda-program-global.cuf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ program test
77
integer, device :: a(10)
88
integer, unified :: u(10)
99
integer, allocatable, pinned :: p(:)
10+
real, device, target :: t(10)
1011
integer :: b(10)
1112
integer :: i
1213
print*,i
@@ -18,6 +19,7 @@ end
1819
! CHECK: %[[ALLOCA:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFEi"}
1920
! CHECK: hlfir.declare %[[ALLOCA]] {uniq_name = "_QFEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
2021
! CHECK: cuf.alloc !fir.box<!fir.heap<!fir.array<?xi32>>> {bindc_name = "p", data_attr = #cuf.cuda<pinned>, uniq_name = "_QFEp"} -> !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>
22+
! CHECK: cuf.alloc !fir.array<10xf32> {bindc_name = "t", data_attr = #cuf.cuda<device>, uniq_name = "_QFEt"} -> !fir.ref<!fir.array<10xf32>>
2123

2224
! CHECK-NOT: fir.global internal @_QFEa {data_attr = #cuf.cuda<device>} : !fir.array<10xi32> {{{$}}
2325
! CHECK: fir.global internal @_QFEb : !fir.array<10xi32> {{{$}}

0 commit comments

Comments
 (0)