Skip to content

Commit 4394a0c

Browse files
authored
[flang][cuda] Fix detection of implicit data transfer with a global (llvm#152604)
1 parent b8195e3 commit 4394a0c

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

flang/lib/Evaluate/tools.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1129,7 +1129,7 @@ struct CollectCudaSymbolsHelper : public SetTraverse<CollectCudaSymbolsHelper,
11291129
CollectCudaSymbolsHelper() : Base{*this} {}
11301130
using Base::operator();
11311131
semantics::UnorderedSymbolSet operator()(const Symbol &symbol) const {
1132-
return {symbol};
1132+
return {symbol.GetUltimate()};
11331133
}
11341134
// Overload some of the operator() to filter out the symbols that are not
11351135
// of interest for CUDA data transfer logic.

flang/test/Lower/CUDA/cuda-data-transfer.cuf

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ module mod1
1313

1414
integer, device, dimension(11:20) :: cdev
1515

16+
real(kind=8), device, allocatable, dimension(:) :: p
17+
1618
contains
1719
function dev1(a)
1820
integer, device :: a(:)
@@ -456,3 +458,19 @@ end
456458
! CHECK: %[[M:.*]]:2 = hlfir.declare %4 {data_attr = #cuf.cuda<managed>, uniq_name = "_QFsub24Em"} : (!fir.ref<f32>) -> (!fir.ref<f32>, !fir.ref<f32>)
457459
! CHECK: %[[D1:.*]] = hlfir.designate %[[D]]#0 (%c1{{.*}}) : (!fir.ref<!fir.array<4xf32>>, index) -> !fir.ref<f32>
458460
! CHECK: cuf.data_transfer %[[D1]] to %[[M]]#0 {transfer_kind = #cuf.cuda_transfer<device_device>} : !fir.ref<f32>, !fir.ref<f32>
461+
462+
subroutine sub25()
463+
use mod1
464+
integer :: i
465+
real(8) :: c
466+
467+
do i = 1, 10
468+
c = c + p(i)
469+
end do
470+
end
471+
472+
! CHECK-LABEL: func.func @_QPsub25()
473+
! CHECK: fir.allocmem !fir.array<?xf64>, %15#1 {bindc_name = ".tmp", uniq_name = ""}
474+
! CHECK: cuf.data_transfer %{{.*}} to %{{.*}} {transfer_kind = #cuf.cuda_transfer<device_host>} : !fir.ref<!fir.box<!fir.heap<!fir.array<?xf64>>>>, !fir.box<!fir.array<?xf64>>
475+
! CHECK: hlfir.assign %{{.*}} to %{{.*}} : f64, !fir.ref<f64>
476+
! CHECK: fir.freemem %{{.*}} : !fir.heap<!fir.array<?xf64>>

0 commit comments

Comments
 (0)