Skip to content

Commit 702198f

Browse files
authored
[flang][cuda] Add data attribute to program globals (#92610)
1 parent faf39f4 commit 702198f

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

flang/lib/Lower/ConvertVariable.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -656,7 +656,10 @@ static void instantiateGlobal(Fortran::lower::AbstractConverter &converter,
656656
// Emit only a declaration if the global does not exist.
657657
global = declareGlobal(converter, var, globalName, linkage);
658658
} else {
659-
global = defineGlobal(converter, var, globalName, linkage);
659+
cuf::DataAttributeAttr dataAttr =
660+
Fortran::lower::translateSymbolCUFDataAttribute(builder.getContext(),
661+
sym);
662+
global = defineGlobal(converter, var, globalName, linkage, dataAttr);
660663
}
661664
auto addrOf = builder.create<fir::AddrOfOp>(loc, global.resultType(),
662665
global.getSymbol());
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
! RUN: bbc -emit-hlfir -fcuda %s -o - | FileCheck %s
2+
3+
! Test lowering of program local variable that are global
4+
5+
program test
6+
integer, device :: a(10)
7+
integer :: b(10)
8+
integer :: i
9+
print*,i
10+
end
11+
12+
! CHECK-LABEL: func.func @_QQmain()
13+
! CHECK: fir.address_of(@_QFEa) : !fir.ref<!fir.array<10xi32>>
14+
! CHECK: fir.address_of(@_QFEb) : !fir.ref<!fir.array<10xi32>>
15+
! CHECK: %[[ALLOCA:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFEi"}
16+
! CHECK: hlfir.declare %[[ALLOCA]] {uniq_name = "_QFEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
17+
18+
! CHECK: fir.global internal @_QFEa {data_attr = #cuf.cuda<device>} : !fir.array<10xi32> {{{$}}
19+
! CHECK: fir.global internal @_QFEb : !fir.array<10xi32> {{{$}}

0 commit comments

Comments
 (0)