[flang][cuda] Add data attribute to program globals (#92610)

This commit is contained in:
Valentin Clement (バレンタイン クレメン)
2024-05-17 20:56:10 -07:00
committed by GitHub
parent faf39f45e3
commit 702198fc9a
2 changed files with 23 additions and 1 deletions

View File

@@ -656,7 +656,10 @@ static void instantiateGlobal(Fortran::lower::AbstractConverter &converter,
// Emit only a declaration if the global does not exist.
global = declareGlobal(converter, var, globalName, linkage);
} else {
global = defineGlobal(converter, var, globalName, linkage);
cuf::DataAttributeAttr dataAttr =
Fortran::lower::translateSymbolCUFDataAttribute(builder.getContext(),
sym);
global = defineGlobal(converter, var, globalName, linkage, dataAttr);
}
auto addrOf = builder.create<fir::AddrOfOp>(loc, global.resultType(),
global.getSymbol());

View File

@@ -0,0 +1,19 @@
! RUN: bbc -emit-hlfir -fcuda %s -o - | FileCheck %s
! Test lowering of program local variable that are global
program test
integer, device :: a(10)
integer :: b(10)
integer :: i
print*,i
end
! CHECK-LABEL: func.func @_QQmain()
! CHECK: fir.address_of(@_QFEa) : !fir.ref<!fir.array<10xi32>>
! CHECK: fir.address_of(@_QFEb) : !fir.ref<!fir.array<10xi32>>
! CHECK: %[[ALLOCA:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFEi"}
! CHECK: hlfir.declare %[[ALLOCA]] {uniq_name = "_QFEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
! CHECK: fir.global internal @_QFEa {data_attr = #cuf.cuda<device>} : !fir.array<10xi32> {{{$}}
! CHECK: fir.global internal @_QFEb : !fir.array<10xi32> {{{$}}