blob: e38474a68747fb49e5a4a5c68b33e062697b702a [file] [log] [blame]
! Tests `do concurrent` mapping when mapped value(s) depend on values defined
! outside the target region; e.g. the size of the array is dynamic. This needs
! to be handled by localizing these region outsiders by either cloning them in
! the region or in case we cannot do that, map them and use the mapped values.
! RUN: %flang_fc1 -emit-hlfir -fopenmp -fdo-concurrent-to-openmp=device %s -o - \
! RUN: | FileCheck %s
subroutine foo(n)
implicit none
integer :: n
integer :: i
integer, dimension(n) :: a
do concurrent(i=1:10)
a(i) = i
end do
end subroutine
! CHECK-DAG: %[[I_DECL:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QFfooEi"}
! CHECK-DAG: %[[A_DECL:.*]]:2 = hlfir.declare %{{.*}}(%{{.*}}) {uniq_name = "_QFfooEa"}
! CHECK-DAG: %[[I_MAP:.*]] = omp.map.info var_ptr(%[[I_DECL]]#1 : {{.*}}) {{.*}} {name = "_QFfooEi"}
! CHECK-DAG: %[[A_MAP:.*]] = omp.map.info var_ptr(%[[A_DECL]]#1 : {{.*}}) {{.*}} {name = "_QFfooEa"}
! CHECK-DAG: %[[N_MAP:.*]] = omp.map.info var_ptr(%{{.*}} : {{.*}}) {{.*}} {name = "_QFfooEa.extent.dim0"}
! CHECK: omp.target
! CHECK-SAME: map_entries(
! CHECK-SAME: %{{[[:alnum:]]+}} -> %{{[^,]+}},
! CHECK-SAME: %{{[[:alnum:]]+}} -> %{{[^,]+}},
! CHECK-SAME: %{{[[:alnum:]]+}} -> %{{[^,]+}},
! CHECK-SAME: %[[I_MAP]] -> %[[I_ARG:arg[0-9]*]],
! CHECK-SAME: %[[A_MAP]] -> %[[A_ARG:arg[0-9]*]],
! CHECK-SAME: %[[N_MAP]] -> %[[N_ARG:arg[0-9]*]] : {{.*}})
! CHECK-SAME: {{.*}} {
! CHECK-DAG: %{{.*}} = hlfir.declare %[[I_ARG]]
! CHECK-DAG: %{{.*}} = hlfir.declare %[[A_ARG]]
! CHECK-DAG: %{{.*}} = fir.load %[[N_ARG]]
! CHECK: omp.terminator
! CHECK: }