105 lines · plain
1! Tests mapping of a basic `do concurrent` loop to2! `!$omp target teams distribute parallel do`.3! RUN: %flang_fc1 -emit-hlfir -fopenmp -fdo-concurrent-to-openmp=device %s -o - \4! RUN: | FileCheck %s5 6program do_concurrent_shape7 implicit none8 integer :: a(10, 20)9 integer :: i, j10 11 do concurrent (i=1:10, j=1:20)12 a(i, j) = i * j13 end do14end program do_concurrent_shape15 16! CHECK: fir.store %{{c10.*}} to %[[DIM0_EXT:.*]] : !fir.ref<index>17! CHECK: fir.store %{{c20.*}} to %[[DIM1_EXT:.*]] : !fir.ref<index>18 19! CHECK: omp.map.info20! CHECK: omp.map.info21! CHECK: omp.map.info22 23! CHECK: omp.map.info24! CHECK: omp.map.info25! CHECK: omp.map.info26 27! CHECK: omp.map.info28! CHECK: omp.map.info29! CHECK: omp.map.info30 31! CHECK: %[[DIM0_EXT_MAP:.*]] = omp.map.info32! CHECK-SAME: var_ptr(%[[DIM0_EXT]] : !fir.ref<index>, index)33! CHECK-SAME: map_clauses(implicit)34! CHECK-SAME: capture(ByCopy) -> !fir.ref<index> {name = "_QFEa.extent.dim0"}35 36! CHECK: %[[DIM1_EXT_MAP:.*]] = omp.map.info37! CHECK-SAME: var_ptr(%[[DIM1_EXT]] : !fir.ref<index>, index)38! CHECK-SAME: map_clauses(implicit)39! CHECK-SAME: capture(ByCopy) -> !fir.ref<index> {name = "_QFEa.extent.dim1"}40 41! CHECK: omp.target host_eval({{.*}}) map_entries(42! CHECK-SAME: %{{[^[:space:]]+}} -> %{{[^,]+}},43! CHECK-SAME: %{{[^[:space:]]+}} -> %{{[^,]+}},44! CHECK-SAME: %{{[^[:space:]]+}} -> %{{[^,]+}},45! CHECK-SAME: %{{[^[:space:]]+}} -> %{{[^,]+}},46! CHECK-SAME: %{{[^[:space:]]+}} -> %{{[^,]+}},47! CHECK-SAME: %{{[^[:space:]]+}} -> %{{[^,]+}},48! CHECK-SAME: %{{[^[:space:]]+}} -> %{{[^,]+}},49! CHECK-SAME: %{{[^[:space:]]+}} -> %{{[^,]+}},50! CHECK-SAME: %{{[^[:space:]]+}} -> %{{[^,]+}},51! CHECK-SAME: %[[DIM0_EXT_MAP]] -> %[[DIM0_EXT_ARG:[^,]+]],52! CHECK-SAME: %[[DIM1_EXT_MAP]] -> %[[DIM1_EXT_ARG:[^,]+]] : {{.*}})53 54! CHECK-DAG: %[[DIM0_EXT_DEV:.*]] = fir.load %[[DIM0_EXT_ARG]]55! CHECK-DAG: %[[DIM1_EXT_DEV:.*]] = fir.load %[[DIM1_EXT_ARG]]56 57! CHECK: %[[SHAPE:.*]] = fir.shape %[[DIM0_EXT_DEV]], %[[DIM1_EXT_DEV]]58! CHECK: %{{.*}}:2 = hlfir.declare %{{.*}}(%[[SHAPE]]) {uniq_name = "_QFEa"}59 60subroutine do_concurrent_shape_shift61 implicit none62 integer :: a(2:10)63 integer :: i64 65 do concurrent (i=1:10)66 a(i) = i67 end do68end subroutine do_concurrent_shape_shift69 70! CHECK: fir.store %{{c2.*}} to %[[DIM0_STRT:.*]] : !fir.ref<index>71! CHECK: fir.store %{{c9.*}} to %[[DIM0_EXT:.*]] : !fir.ref<index>72 73! CHECK: omp.map.info74! CHECK: omp.map.info75! CHECK: omp.map.info76 77! CHECK: omp.map.info78! CHECK: omp.map.info79 80! CHECK: %[[DIM0_STRT_MAP:.*]] = omp.map.info81! CHECK-SAME: var_ptr(%[[DIM0_STRT]] : !fir.ref<index>, index)82! CHECK-SAME: map_clauses(implicit)83! CHECK-SAME: capture(ByCopy) -> !fir.ref<index> {name = "_QF{{.*}}Ea.start_idx.dim0"}84 85! CHECK: %[[DIM0_EXT_MAP:.*]] = omp.map.info86! CHECK-SAME: var_ptr(%[[DIM0_EXT]] : !fir.ref<index>, index)87! CHECK-SAME: map_clauses(implicit)88! CHECK-SAME: capture(ByCopy) -> !fir.ref<index> {name = "_QF{{.*}}Ea.extent.dim0"}89 90! CHECK: omp.target host_eval({{.*}}) map_entries(91! CHECK-SAME: %{{[^[:space:]]+}} -> %{{[^,]+}},92! CHECK-SAME: %{{[^[:space:]]+}} -> %{{[^,]+}},93! CHECK-SAME: %{{[^[:space:]]+}} -> %{{[^,]+}},94! CHECK-SAME: %{{[^[:space:]]+}} -> %{{[^,]+}},95! CHECK-SAME: %{{[^[:space:]]+}} -> %{{[^,]+}},96! CHECK-SAME: %[[DIM0_STRT_MAP]] -> %[[DIM0_STRT_ARG:[^,]+]],97! CHECK-SAME: %[[DIM0_EXT_MAP]] -> %[[DIM0_EXT_ARG:[^,]+]] : {{.*}})98 99! CHECK-DAG: %[[DIM0_STRT_DEV:.*]] = fir.load %[[DIM0_STRT_ARG]]100! CHECK-DAG: %[[DIM0_EXT_DEV:.*]] = fir.load %[[DIM0_EXT_ARG]]101 102! CHECK: %[[SHAPE_SHIFT:.*]] = fir.shape_shift %[[DIM0_STRT_DEV]], %[[DIM0_EXT_DEV]]103! CHECK: %{{.*}}:2 = hlfir.declare %{{.*}}(%[[SHAPE_SHIFT]]) {uniq_name = "_QF{{.*}}Ea"}104 105