xref: /llvm-project/flang/test/Lower/OpenMP/target-spmd.f90 (revision 8fe11a26ae8f12622ddec83a7b80637080843a8b)
1! RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s
2
3! CHECK-LABEL: func.func @_QPdistribute_parallel_do_generic() {
4subroutine distribute_parallel_do_generic()
5  ! CHECK: omp.target
6  ! CHECK-NOT: host_eval({{.*}})
7  ! CHECK-SAME: {
8  !$omp target
9  !$omp teams
10  !$omp distribute parallel do
11  do i = 1, 10
12    call foo(i)
13  end do
14  !$omp end distribute parallel do
15  call bar() !< Prevents this from being SPMD.
16  !$omp end teams
17  !$omp end target
18
19  ! CHECK: omp.target
20  ! CHECK-NOT: host_eval({{.*}})
21  ! CHECK-SAME: {
22  !$omp target teams
23  !$omp distribute parallel do
24  do i = 1, 10
25    call foo(i)
26  end do
27  !$omp end distribute parallel do
28  call bar() !< Prevents this from being SPMD.
29  !$omp end target teams
30
31  ! CHECK: omp.target
32  ! CHECK-NOT: host_eval({{.*}})
33  ! CHECK-SAME: {
34  !$omp target teams
35  !$omp distribute parallel do
36  do i = 1, 10
37    call foo(i)
38  end do
39  !$omp end distribute parallel do
40
41  !$omp distribute parallel do
42  do i = 1, 10
43    call foo(i)
44  end do
45  !$omp end distribute parallel do
46  !$omp end target teams
47end subroutine distribute_parallel_do_generic
48
49! CHECK-LABEL: func.func @_QPdistribute_parallel_do_spmd() {
50subroutine distribute_parallel_do_spmd()
51  ! CHECK: omp.target
52  ! CHECK-SAME: host_eval({{.*}})
53  !$omp target
54  !$omp teams
55  !$omp distribute parallel do
56  do i = 1, 10
57    call foo(i)
58  end do
59  !$omp end distribute parallel do
60  !$omp end teams
61  !$omp end target
62
63  ! CHECK: omp.target
64  ! CHECK-SAME: host_eval({{.*}})
65  !$omp target teams
66  !$omp distribute parallel do
67  do i = 1, 10
68    call foo(i)
69  end do
70  !$omp end distribute parallel do
71  !$omp end target teams
72end subroutine distribute_parallel_do_spmd
73
74! CHECK-LABEL: func.func @_QPdistribute_parallel_do_simd_generic() {
75subroutine distribute_parallel_do_simd_generic()
76  ! CHECK: omp.target
77  ! CHECK-NOT: host_eval({{.*}})
78  ! CHECK-SAME: {
79  !$omp target
80  !$omp teams
81  !$omp distribute parallel do simd
82  do i = 1, 10
83    call foo(i)
84  end do
85  !$omp end distribute parallel do simd
86  call bar() !< Prevents this from being SPMD.
87  !$omp end teams
88  !$omp end target
89
90  ! CHECK: omp.target
91  ! CHECK-NOT: host_eval({{.*}})
92  ! CHECK-SAME: {
93  !$omp target teams
94  !$omp distribute parallel do simd
95  do i = 1, 10
96    call foo(i)
97  end do
98  !$omp end distribute parallel do simd
99  call bar() !< Prevents this from being SPMD.
100  !$omp end target teams
101
102  ! CHECK: omp.target
103  ! CHECK-NOT: host_eval({{.*}})
104  ! CHECK-SAME: {
105  !$omp target teams
106  !$omp distribute parallel do simd
107  do i = 1, 10
108    call foo(i)
109  end do
110  !$omp end distribute parallel do simd
111
112  !$omp distribute parallel do simd
113  do i = 1, 10
114    call foo(i)
115  end do
116  !$omp end distribute parallel do simd
117  !$omp end target teams
118end subroutine distribute_parallel_do_simd_generic
119
120! CHECK-LABEL: func.func @_QPdistribute_parallel_do_simd_spmd() {
121subroutine distribute_parallel_do_simd_spmd()
122  ! CHECK: omp.target
123  ! CHECK-SAME: host_eval({{.*}})
124  !$omp target
125  !$omp teams
126  !$omp distribute parallel do simd
127  do i = 1, 10
128    call foo(i)
129  end do
130  !$omp end distribute parallel do simd
131  !$omp end teams
132  !$omp end target
133
134  ! CHECK: omp.target
135  ! CHECK-SAME: host_eval({{.*}})
136  !$omp target teams
137  !$omp distribute parallel do simd
138  do i = 1, 10
139    call foo(i)
140  end do
141  !$omp end distribute parallel do simd
142  !$omp end target teams
143end subroutine distribute_parallel_do_simd_spmd
144
145! CHECK-LABEL: func.func @_QPteams_distribute_parallel_do_spmd() {
146subroutine teams_distribute_parallel_do_spmd()
147  ! CHECK: omp.target
148  ! CHECK-SAME: host_eval({{.*}})
149  !$omp target
150  !$omp teams distribute parallel do
151  do i = 1, 10
152    call foo(i)
153  end do
154  !$omp end teams distribute parallel do
155  !$omp end target
156end subroutine teams_distribute_parallel_do_spmd
157
158! CHECK-LABEL: func.func @_QPteams_distribute_parallel_do_simd_spmd() {
159subroutine teams_distribute_parallel_do_simd_spmd()
160  ! CHECK: omp.target
161  ! CHECK-SAME: host_eval({{.*}})
162  !$omp target
163  !$omp teams distribute parallel do simd
164  do i = 1, 10
165    call foo(i)
166  end do
167  !$omp end teams distribute parallel do simd
168  !$omp end target
169end subroutine teams_distribute_parallel_do_simd_spmd
170
171! CHECK-LABEL: func.func @_QPtarget_teams_distribute_parallel_do_spmd() {
172subroutine target_teams_distribute_parallel_do_spmd()
173  ! CHECK: omp.target
174  ! CHECK-SAME: host_eval({{.*}})
175  !$omp target teams distribute parallel do
176  do i = 1, 10
177    call foo(i)
178  end do
179  !$omp end target teams distribute parallel do
180end subroutine target_teams_distribute_parallel_do_spmd
181
182! CHECK-LABEL: func.func @_QPtarget_teams_distribute_parallel_do_simd_spmd() {
183subroutine target_teams_distribute_parallel_do_simd_spmd()
184  ! CHECK: omp.target
185  ! CHECK-SAME: host_eval({{.*}})
186  !$omp target teams distribute parallel do simd
187  do i = 1, 10
188    call foo(i)
189  end do
190  !$omp end target teams distribute parallel do simd
191end subroutine target_teams_distribute_parallel_do_simd_spmd
192