|
1 | 1 | ! RUN: bbc -emit-hlfir -fcuda %s -o - | FileCheck %s |
2 | 2 |
|
| 3 | +! Check for implicit data transfer of managed variable |
| 4 | + |
3 | 5 | subroutine testr2(N1,N2) |
4 | 6 | real(4), managed :: ai4(N1,N2) |
5 | 7 | real(4), allocatable :: bRefi4(:) |
6 | 8 |
|
7 | 9 | integer :: i1, i2 |
8 | 10 |
|
9 | | - do i2 = 1, N2 |
10 | | - do i1 = 1, N1 |
11 | | - ai4(i1,i2) = i1 + N1*(i2-1) |
12 | | - enddo |
13 | | - enddo |
14 | | - |
15 | | - allocate(bRefi4 (N1)) |
| 11 | + allocate(bRefi4(N1)) |
16 | 12 | do i1 = 1, N1 |
17 | 13 | bRefi4(i1) = (ai4(i1,1)+ai4(i1,N2))*N2/2 |
18 | 14 | enddo |
19 | 15 | deallocate(bRefi4) |
20 | 16 |
|
21 | 17 | end subroutine |
22 | 18 |
|
23 | | -!CHECK-LABEL: func.func @_QPtestr2 |
24 | | -!CHECK: %[[ALLOC:.*]] = cuf.alloc !fir.array<?x?xf32>, %{{.*}}, %{{.*}} : index, index {bindc_name = "ai4", data_attr = #cuf.cuda<managed>, uniq_name = "_QFtestr2Eai4"} -> !fir.ref<!fir.array<?x?xf32>> |
25 | | -!CHECK: %[[DECLARE:.*]]:2 = hlfir.declare %[[ALLOC]](%{{.*}}) {data_attr = #cuf.cuda<managed>, uniq_name = "_QFtestr2Eai4"} : (!fir.ref<!fir.array<?x?xf32>>, !fir.shape<2>) -> (!fir.box<!fir.array<?x?xf32>>, !fir.ref<!fir.array<?x?xf32>>) |
26 | | -!CHECK: %[[DEST:.*]] = hlfir.designate %[[DECLARE]]#0 (%{{.*}}, %{{.*}}) : (!fir.box<!fir.array<?x?xf32>>, i64, i64) -> !fir.ref<f32> |
27 | | -!CHECK: cuf.data_transfer %{{.*}}#0 to %[[DEST]] {transfer_kind = #cuf.cuda_transfer<host_device>} : !fir.ref<f32>, !fir.ref<f32> |
| 19 | +! CHECK-LABEL: func.func @_QPtestr2 |
| 20 | +! CHECK: %[[MANAGED:.*]]:2 = hlfir.declare %22(%23) {data_attr = #cuf.cuda<managed>, uniq_name = "_QFtestr2Eai4"} : (!fir.ref<!fir.array<?x?xf32>>, !fir.shape<2>) -> (!fir.box<!fir.array<?x?xf32>>, !fir.ref<!fir.array<?x?xf32>>) |
| 21 | +! CHECK: %[[TMP:.*]] = fir.allocmem !fir.array<?x?xf32>, %16, %21 {bindc_name = ".tmp", uniq_name = ""} |
| 22 | +! CHECK: %[[TMP_DECL:.*]]:2 = hlfir.declare %[[TMP]](%{{.*}}) {uniq_name = ".tmp"} : (!fir.heap<!fir.array<?x?xf32>>, !fir.shape<2>) -> (!fir.box<!fir.array<?x?xf32>>, !fir.heap<!fir.array<?x?xf32>>) |
| 23 | +! CHECK: cuf.data_transfer %[[MANAGED]]#1 to %[[TMP_DECL]]#0 {transfer_kind = #cuf.cuda_transfer<device_host>} : !fir.ref<!fir.array<?x?xf32>>, !fir.box<!fir.array<?x?xf32>> |
0 commit comments