summaryrefslogtreecommitdiff
path: root/flang/test/Transforms/DoConcurrent/map_shape_info.f90
blob: 95bfc236888d13f1b15d260306b0819b96a7c52a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
! Tests mapping of a basic `do concurrent` loop to
! `!$omp target teams distribute parallel do`.
! RUN: %flang_fc1 -emit-hlfir -fopenmp -fdo-concurrent-to-openmp=device %s -o - \
! RUN:   | FileCheck %s

program do_concurrent_shape
    implicit none
    integer :: a(10, 20)
    integer :: i, j

    do concurrent (i=1:10, j=1:20)
        a(i, j) = i * j
    end do
end program do_concurrent_shape

! CHECK: fir.store %{{c10.*}} to %[[DIM0_EXT:.*]] : !fir.ref<index>
! CHECK: fir.store %{{c20.*}} to %[[DIM1_EXT:.*]] : !fir.ref<index>

! CHECK: omp.map.info
! CHECK: omp.map.info
! CHECK: omp.map.info

! CHECK: omp.map.info
! CHECK: omp.map.info
! CHECK: omp.map.info

! CHECK: omp.map.info
! CHECK: omp.map.info
! CHECK: omp.map.info

! CHECK: %[[DIM0_EXT_MAP:.*]] = omp.map.info
! CHECK-SAME:   var_ptr(%[[DIM0_EXT]] : !fir.ref<index>, index)
! CHECK-SAME:   map_clauses(implicit)
! CHECK-SAME:   capture(ByCopy) -> !fir.ref<index> {name = "_QFEa.extent.dim0"}

! CHECK: %[[DIM1_EXT_MAP:.*]] = omp.map.info
! CHECK-SAME:   var_ptr(%[[DIM1_EXT]] : !fir.ref<index>, index)
! CHECK-SAME:   map_clauses(implicit)
! CHECK-SAME:   capture(ByCopy) -> !fir.ref<index> {name = "_QFEa.extent.dim1"}

! CHECK: omp.target host_eval({{.*}}) map_entries(
! CHECK-SAME:   %{{[^[:space:]]+}} -> %{{[^,]+}},
! CHECK-SAME:   %{{[^[:space:]]+}} -> %{{[^,]+}},
! CHECK-SAME:   %{{[^[:space:]]+}} -> %{{[^,]+}},
! CHECK-SAME:   %{{[^[:space:]]+}} -> %{{[^,]+}},
! CHECK-SAME:   %{{[^[:space:]]+}} -> %{{[^,]+}},
! CHECK-SAME:   %{{[^[:space:]]+}} -> %{{[^,]+}},
! CHECK-SAME:   %{{[^[:space:]]+}} -> %{{[^,]+}},
! CHECK-SAME:   %{{[^[:space:]]+}} -> %{{[^,]+}},
! CHECK-SAME:   %{{[^[:space:]]+}} -> %{{[^,]+}},
! CHECK-SAME:   %[[DIM0_EXT_MAP]] -> %[[DIM0_EXT_ARG:[^,]+]],
! CHECK-SAME:   %[[DIM1_EXT_MAP]] -> %[[DIM1_EXT_ARG:[^,]+]] : {{.*}})

! CHECK-DAG:    %[[DIM0_EXT_DEV:.*]] = fir.load %[[DIM0_EXT_ARG]]
! CHECK-DAG:    %[[DIM1_EXT_DEV:.*]] = fir.load %[[DIM1_EXT_ARG]]

! CHECK:        %[[SHAPE:.*]] = fir.shape %[[DIM0_EXT_DEV]], %[[DIM1_EXT_DEV]]
! CHECK:        %{{.*}}:2 = hlfir.declare %{{.*}}(%[[SHAPE]]) {uniq_name = "_QFEa"}

subroutine do_concurrent_shape_shift
    implicit none
    integer :: a(2:10)
    integer :: i

    do concurrent (i=1:10)
        a(i) = i
    end do
end subroutine do_concurrent_shape_shift

! CHECK: fir.store %{{c2.*}} to %[[DIM0_STRT:.*]] : !fir.ref<index>
! CHECK: fir.store %{{c9.*}} to %[[DIM0_EXT:.*]] : !fir.ref<index>

! CHECK: omp.map.info
! CHECK: omp.map.info
! CHECK: omp.map.info

! CHECK: omp.map.info
! CHECK: omp.map.info

! CHECK: %[[DIM0_STRT_MAP:.*]] = omp.map.info
! CHECK-SAME:   var_ptr(%[[DIM0_STRT]] : !fir.ref<index>, index)
! CHECK-SAME:   map_clauses(implicit)
! CHECK-SAME:   capture(ByCopy) -> !fir.ref<index> {name = "_QF{{.*}}Ea.start_idx.dim0"}

! CHECK: %[[DIM0_EXT_MAP:.*]] = omp.map.info
! CHECK-SAME:   var_ptr(%[[DIM0_EXT]] : !fir.ref<index>, index)
! CHECK-SAME:   map_clauses(implicit)
! CHECK-SAME:   capture(ByCopy) -> !fir.ref<index> {name = "_QF{{.*}}Ea.extent.dim0"}

! CHECK: omp.target host_eval({{.*}}) map_entries(
! CHECK-SAME:   %{{[^[:space:]]+}} -> %{{[^,]+}},
! CHECK-SAME:   %{{[^[:space:]]+}} -> %{{[^,]+}},
! CHECK-SAME:   %{{[^[:space:]]+}} -> %{{[^,]+}},
! CHECK-SAME:   %{{[^[:space:]]+}} -> %{{[^,]+}},
! CHECK-SAME:   %{{[^[:space:]]+}} -> %{{[^,]+}},
! CHECK-SAME:   %[[DIM0_STRT_MAP]] -> %[[DIM0_STRT_ARG:[^,]+]],
! CHECK-SAME:   %[[DIM0_EXT_MAP]] -> %[[DIM0_EXT_ARG:[^,]+]] : {{.*}})

! CHECK-DAG:    %[[DIM0_STRT_DEV:.*]] = fir.load %[[DIM0_STRT_ARG]]
! CHECK-DAG:    %[[DIM0_EXT_DEV:.*]] = fir.load %[[DIM0_EXT_ARG]]

! CHECK:        %[[SHAPE_SHIFT:.*]] = fir.shape_shift %[[DIM0_STRT_DEV]], %[[DIM0_EXT_DEV]]
! CHECK:        %{{.*}}:2 = hlfir.declare %{{.*}}(%[[SHAPE_SHIFT]]) {uniq_name = "_QF{{.*}}Ea"}