xref: /llvm-project/flang/test/Lower/OpenACC/acc-loop.f90 (revision 26d92826a5ed7894fb6d604c8e0e755daa50cdf7)
1d7ab38f8SValentin Clement! This test checks lowering of OpenACC loop directive.
2d7ab38f8SValentin Clement
358d50b0cSSlava Zakharin! RUN: bbc -fopenacc -emit-hlfir %s -o - | FileCheck %s
4d7ab38f8SValentin Clement
56e3dcd35SValentin Clement! CHECK-LABEL: acc.private.recipe @privatization_ref_10x10xf32 : !fir.ref<!fir.array<10x10xf32>> init {
6d2fddaefSValentin Clement! CHECK: ^bb0(%{{.*}}: !fir.ref<!fir.array<10x10xf32>>):
7d2fddaefSValentin Clement! CHECK: acc.yield %{{.*}} : !fir.ref<!fir.array<10x10xf32>>
8d2fddaefSValentin Clement! CHECK: }
9d2fddaefSValentin Clement
10d7ab38f8SValentin Clementprogram acc_loop
11d7ab38f8SValentin Clement
12d7ab38f8SValentin Clement  integer :: i, j
13d7ab38f8SValentin Clement  integer, parameter :: n = 10
14d7ab38f8SValentin Clement  real, dimension(n) :: a, b
15d7ab38f8SValentin Clement  real, dimension(n, n) :: c, d
16d7ab38f8SValentin Clement  integer :: gangNum = 8
1766546d94SValentin Clement  integer :: gangDim = 1
18d7ab38f8SValentin Clement  integer :: gangStatic = 8
19d7ab38f8SValentin Clement  integer :: vectorLength = 128
20d7ab38f8SValentin Clement  integer, parameter :: tileSize = 2
215e3faa05SRazvan Lupusoru  integer :: reduction_i
225e3faa05SRazvan Lupusoru  real :: reduction_r
23d7ab38f8SValentin Clement
24d7ab38f8SValentin Clement
25d7ab38f8SValentin Clement  !$acc loop
26d7ab38f8SValentin Clement  DO i = 1, n
27d7ab38f8SValentin Clement    a(i) = b(i)
28d7ab38f8SValentin Clement  END DO
29d7ab38f8SValentin Clement
306b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
31d7ab38f8SValentin Clement! CHECK:        acc.yield
325062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}{{$}}
33d7ab38f8SValentin Clement
34d7ab38f8SValentin Clement !$acc loop seq
35d7ab38f8SValentin Clement  DO i = 1, n
36d7ab38f8SValentin Clement    a(i) = b(i)
37d7ab38f8SValentin Clement  END DO
38d7ab38f8SValentin Clement
396b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
40d7ab38f8SValentin Clement! CHECK:        acc.yield
415062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>, seq = [#acc.device_type<none>]}
42d7ab38f8SValentin Clement
43d7ab38f8SValentin Clement  !$acc loop auto
44d7ab38f8SValentin Clement  DO i = 1, n
45d7ab38f8SValentin Clement    a(i) = b(i)
46d7ab38f8SValentin Clement  END DO
47d7ab38f8SValentin Clement
486b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
49d7ab38f8SValentin Clement! CHECK:        acc.yield
505062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {auto_ = [#acc.device_type<none>], inclusiveUpperbound = array<i1: true>}
51d7ab38f8SValentin Clement
52d7ab38f8SValentin Clement  !$acc loop independent
53d7ab38f8SValentin Clement  DO i = 1, n
54d7ab38f8SValentin Clement    a(i) = b(i)
55d7ab38f8SValentin Clement  END DO
56d7ab38f8SValentin Clement
576b42625bSValentin Clement (バレンタイン クレメン)! CHECK:      acc.loop private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
58d7ab38f8SValentin Clement! CHECK:        acc.yield
595062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>, independent = [#acc.device_type<none>]}
60d7ab38f8SValentin Clement
61d7ab38f8SValentin Clement  !$acc loop gang
62d7ab38f8SValentin Clement  DO i = 1, n
63d7ab38f8SValentin Clement    a(i) = b(i)
64d7ab38f8SValentin Clement  END DO
65d7ab38f8SValentin Clement
666b42625bSValentin Clement (バレンタイン クレメン)! CHECK:      acc.loop gang private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
67d7ab38f8SValentin Clement! CHECK:        acc.yield
685062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}
69d7ab38f8SValentin Clement
70d7ab38f8SValentin Clement  !$acc loop gang(num: 8)
71d7ab38f8SValentin Clement  DO i = 1, n
72d7ab38f8SValentin Clement    a(i) = b(i)
73d7ab38f8SValentin Clement  END DO
74d7ab38f8SValentin Clement
75d7ab38f8SValentin Clement! CHECK:      [[GANGNUM1:%.*]] = arith.constant 8 : i32
766b42625bSValentin Clement (バレンタイン クレメン)! CHECK-NEXT: acc.loop gang({num=[[GANGNUM1]] : i32}) private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
77d7ab38f8SValentin Clement! CHECK:        acc.yield
785062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}
79d7ab38f8SValentin Clement
80d7ab38f8SValentin Clement  !$acc loop gang(num: gangNum)
81d7ab38f8SValentin Clement  DO i = 1, n
82d7ab38f8SValentin Clement    a(i) = b(i)
83d7ab38f8SValentin Clement  END DO
84d7ab38f8SValentin Clement
85d7ab38f8SValentin Clement! CHECK:      [[GANGNUM2:%.*]] = fir.load %{{.*}} : !fir.ref<i32>
866b42625bSValentin Clement (バレンタイン クレメン)! CHECK-NEXT: acc.loop gang({num=[[GANGNUM2]] : i32}) private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
87d7ab38f8SValentin Clement! CHECK:        acc.yield
885062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}
89d7ab38f8SValentin Clement
90d7ab38f8SValentin Clement !$acc loop gang(num: gangNum, static: gangStatic)
91d7ab38f8SValentin Clement  DO i = 1, n
92d7ab38f8SValentin Clement    a(i) = b(i)
93d7ab38f8SValentin Clement  END DO
94d7ab38f8SValentin Clement
956b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop gang({num=%{{.*}} : i32, static=%{{.*}} : i32}) private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
96d7ab38f8SValentin Clement! CHECK:        acc.yield
975062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}
98d7ab38f8SValentin Clement
99d7ab38f8SValentin Clement  !$acc loop vector
100d7ab38f8SValentin Clement  DO i = 1, n
101d7ab38f8SValentin Clement    a(i) = b(i)
102d7ab38f8SValentin Clement  END DO
103d7ab38f8SValentin Clement
1046b42625bSValentin Clement (バレンタイン クレメン)! CHECK:      acc.loop vector private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
105d7ab38f8SValentin Clement! CHECK:        acc.yield
1065062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}
107d7ab38f8SValentin Clement
108d7ab38f8SValentin Clement  !$acc loop vector(128)
109d7ab38f8SValentin Clement  DO i = 1, n
110d7ab38f8SValentin Clement    a(i) = b(i)
111d7ab38f8SValentin Clement  END DO
112d7ab38f8SValentin Clement
113d7ab38f8SValentin Clement! CHECK: [[CONSTANT128:%.*]] = arith.constant 128 : i32
1146b42625bSValentin Clement (バレンタイン クレメン)! CHECK:      acc.loop vector([[CONSTANT128]] : i32) private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
115d7ab38f8SValentin Clement! CHECK:        acc.yield
116d7ab38f8SValentin Clement! CHECK-NEXT: }{{$}}
117d7ab38f8SValentin Clement
118d7ab38f8SValentin Clement  !$acc loop vector(vectorLength)
119d7ab38f8SValentin Clement  DO i = 1, n
120d7ab38f8SValentin Clement    a(i) = b(i)
121d7ab38f8SValentin Clement  END DO
122d7ab38f8SValentin Clement
123d7ab38f8SValentin Clement! CHECK:      [[VECTORLENGTH:%.*]] = fir.load %{{.*}} : !fir.ref<i32>
1246b42625bSValentin Clement (バレンタイン クレメン)! CHECK:      acc.loop vector([[VECTORLENGTH]] : i32) private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
125d7ab38f8SValentin Clement! CHECK:        acc.yield
1265062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}
127d7ab38f8SValentin Clement
128d7ab38f8SValentin Clement!$acc loop worker
129d7ab38f8SValentin Clement  DO i = 1, n
130d7ab38f8SValentin Clement    a(i) = b(i)
131d7ab38f8SValentin Clement  END DO
132d7ab38f8SValentin Clement
1336b42625bSValentin Clement (バレンタイン クレメン)! CHECK:      acc.loop worker private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
134d7ab38f8SValentin Clement! CHECK:        acc.yield
1355062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}
136d7ab38f8SValentin Clement
137d7ab38f8SValentin Clement  !$acc loop worker(128)
138d7ab38f8SValentin Clement  DO i = 1, n
139d7ab38f8SValentin Clement    a(i) = b(i)
140d7ab38f8SValentin Clement  END DO
141d7ab38f8SValentin Clement
142d7ab38f8SValentin Clement! CHECK: [[WORKER128:%.*]] = arith.constant 128 : i32
1436b42625bSValentin Clement (バレンタイン クレメン)! CHECK:      acc.loop worker([[WORKER128]] : i32) private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
144d7ab38f8SValentin Clement! CHECK:        acc.yield
1455062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}
146d7ab38f8SValentin Clement
147d7ab38f8SValentin Clement  !$acc loop private(c)
148d7ab38f8SValentin Clement  DO i = 1, n
149d7ab38f8SValentin Clement    a(i) = b(i)
150d7ab38f8SValentin Clement  END DO
151d7ab38f8SValentin Clement
1526b42625bSValentin Clement (バレンタイン クレメン)! CHECK:      acc.loop private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>, @privatization_ref_10x10xf32 -> %{{.*}} : !fir.ref<!fir.array<10x10xf32>>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
153d7ab38f8SValentin Clement! CHECK:        acc.yield
1545062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}
155d7ab38f8SValentin Clement
156d7ab38f8SValentin Clement  !$acc loop private(c, d)
157d7ab38f8SValentin Clement  DO i = 1, n
158d7ab38f8SValentin Clement    a(i) = b(i)
159d7ab38f8SValentin Clement  END DO
160d7ab38f8SValentin Clement
1616b42625bSValentin Clement (バレンタイン クレメン)! CHECK:      acc.loop private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>, @privatization_ref_10x10xf32 -> %{{.*}} : !fir.ref<!fir.array<10x10xf32>>, @privatization_ref_10x10xf32 -> %{{.*}} : !fir.ref<!fir.array<10x10xf32>>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
162d7ab38f8SValentin Clement! CHECK:        acc.yield
1635062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}
164d7ab38f8SValentin Clement
165d7ab38f8SValentin Clement  !$acc loop private(c) private(d)
166d7ab38f8SValentin Clement  DO i = 1, n
167d7ab38f8SValentin Clement    a(i) = b(i)
168d7ab38f8SValentin Clement  END DO
169d7ab38f8SValentin Clement
1706b42625bSValentin Clement (バレンタイン クレメン)! CHECK:      acc.loop private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>, @privatization_ref_10x10xf32 -> %{{.*}} : !fir.ref<!fir.array<10x10xf32>>, @privatization_ref_10x10xf32 -> %{{.*}} : !fir.ref<!fir.array<10x10xf32>>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
171d7ab38f8SValentin Clement! CHECK:        acc.yield
1725062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}
173d7ab38f8SValentin Clement
174d7ab38f8SValentin Clement  !$acc loop tile(2)
175d7ab38f8SValentin Clement  DO i = 1, n
176d7ab38f8SValentin Clement    a(i) = b(i)
177d7ab38f8SValentin Clement  END DO
1785062a178SValentin Clement (バレンタイン クレメン)
179d7ab38f8SValentin Clement! CHECK:      [[TILESIZE:%.*]] = arith.constant 2 : i32
1806b42625bSValentin Clement (バレンタイン クレメン)! CHECK:      acc.loop {{.*}} tile({[[TILESIZE]] : i32}) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
181d7ab38f8SValentin Clement! CHECK:        acc.yield
1825062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}
183d7ab38f8SValentin Clement
184d7ab38f8SValentin Clement !$acc loop tile(*)
185d7ab38f8SValentin Clement  DO i = 1, n
186d7ab38f8SValentin Clement    a(i) = b(i)
187d7ab38f8SValentin Clement  END DO
188d7ab38f8SValentin Clement! CHECK:      [[TILESIZEM1:%.*]] = arith.constant -1 : i32
1896b42625bSValentin Clement (バレンタイン クレメン)! CHECK:      acc.loop {{.*}} tile({[[TILESIZEM1]] : i32}) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
190d7ab38f8SValentin Clement! CHECK:        acc.yield
1915062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}
192d7ab38f8SValentin Clement
193d7ab38f8SValentin Clement  !$acc loop tile(2, 2)
194d7ab38f8SValentin Clement  DO i = 1, n
195d7ab38f8SValentin Clement    DO j = 1, n
196d7ab38f8SValentin Clement      c(i, j) = d(i, j)
197d7ab38f8SValentin Clement    END DO
198d7ab38f8SValentin Clement  END DO
199d7ab38f8SValentin Clement
200d7ab38f8SValentin Clement! CHECK:      [[TILESIZE1:%.*]] = arith.constant 2 : i32
201d7ab38f8SValentin Clement! CHECK:      [[TILESIZE2:%.*]] = arith.constant 2 : i32
2026b42625bSValentin Clement (バレンタイン クレメン)! CHECK:      acc.loop {{.*}} tile({[[TILESIZE1]] : i32, [[TILESIZE2]] : i32}) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
203d7ab38f8SValentin Clement! CHECK:        acc.yield
2045062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}
205d7ab38f8SValentin Clement
206d7ab38f8SValentin Clement  !$acc loop tile(tileSize)
207d7ab38f8SValentin Clement  DO i = 1, n
208d7ab38f8SValentin Clement    a(i) = b(i)
209d7ab38f8SValentin Clement  END DO
210d7ab38f8SValentin Clement
2116b42625bSValentin Clement (バレンタイン クレメン)! CHECK:      acc.loop {{.*}} tile({%{{.*}} : i32}) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
212d7ab38f8SValentin Clement! CHECK:        acc.yield
2135062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}
214d7ab38f8SValentin Clement
215d7ab38f8SValentin Clement  !$acc loop tile(tileSize, tileSize)
216d7ab38f8SValentin Clement  DO i = 1, n
217d7ab38f8SValentin Clement    DO j = 1, n
218d7ab38f8SValentin Clement      c(i, j) = d(i, j)
219d7ab38f8SValentin Clement    END DO
220d7ab38f8SValentin Clement  END DO
221d7ab38f8SValentin Clement
2226b42625bSValentin Clement (バレンタイン クレメン)! CHECK:      acc.loop {{.*}} tile({%{{.*}} : i32, %{{.*}} : i32}) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
223d7ab38f8SValentin Clement! CHECK:        acc.yield
2245062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}
225d7ab38f8SValentin Clement
226d7ab38f8SValentin Clement  !$acc loop collapse(2)
227d7ab38f8SValentin Clement  DO i = 1, n
228d7ab38f8SValentin Clement    DO j = 1, n
229d7ab38f8SValentin Clement      c(i, j) = d(i, j)
230d7ab38f8SValentin Clement    END DO
231d7ab38f8SValentin Clement  END DO
232d7ab38f8SValentin Clement
2336b42625bSValentin Clement (バレンタイン クレメン)! CHECK:      acc.loop {{.*}} control(%arg0 : i32, %arg1 : i32) = (%{{.*}} : i32, i32) to (%{{.*}} : i32, i32) step (%{{.*}} : i32, i32) {
2345062a178SValentin Clement (バレンタイン クレメン)! CHECK:        fir.store %arg0 to %{{.*}} : !fir.ref<i32>
2355062a178SValentin Clement (バレンタイン クレメン)! CHECK:        fir.store %arg1 to %{{.*}} : !fir.ref<i32>
236d7ab38f8SValentin Clement! CHECK:        acc.yield
2375062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {collapse = [2], collapseDeviceType = [#acc.device_type<none>], inclusiveUpperbound = array<i1: true, true>}
238d7ab38f8SValentin Clement
239d7ab38f8SValentin Clement  !$acc loop
240d7ab38f8SValentin Clement  DO i = 1, n
241d7ab38f8SValentin Clement    !$acc loop
242d7ab38f8SValentin Clement    DO j = 1, n
243d7ab38f8SValentin Clement      c(i, j) = d(i, j)
244d7ab38f8SValentin Clement    END DO
245d7ab38f8SValentin Clement  END DO
246d7ab38f8SValentin Clement
2476b42625bSValentin Clement (バレンタイン クレメン)! CHECK:      acc.loop {{.*}} control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
2486b42625bSValentin Clement (バレンタイン クレメン)! CHECK:          acc.loop {{.*}} control(%arg1 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
249d7ab38f8SValentin Clement! CHECK:            acc.yield
2505062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT:   } attributes {inclusiveUpperbound = array<i1: true>}
251d7ab38f8SValentin Clement! CHECK:        acc.yield
2525062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}
253d7ab38f8SValentin Clement
2545e3faa05SRazvan Lupusoru  !$acc loop reduction(+:reduction_r) reduction(*:reduction_i)
2555e3faa05SRazvan Lupusoru  do i = 1, n
2565e3faa05SRazvan Lupusoru    reduction_r = reduction_r + a(i)
2575e3faa05SRazvan Lupusoru    reduction_i = 1
2585e3faa05SRazvan Lupusoru  end do
2595e3faa05SRazvan Lupusoru
2606b42625bSValentin Clement (バレンタイン クレメン)! CHECK:      acc.loop private(@privatization_ref_i32 -> %{{.*}} : !fir.ref<i32>) reduction(@reduction_add_ref_f32 -> %{{.*}} : !fir.ref<f32>, @reduction_mul_ref_i32 -> %{{.*}} : !fir.ref<i32>) control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
2615e3faa05SRazvan Lupusoru! CHECK:        acc.yield
2625062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}
2635e3faa05SRazvan Lupusoru
26466546d94SValentin Clement !$acc loop gang(dim: gangDim, static: gangStatic)
26566546d94SValentin Clement  DO i = 1, n
26666546d94SValentin Clement    a(i) = b(i)
26766546d94SValentin Clement  END DO
26866546d94SValentin Clement
2696b42625bSValentin Clement (バレンタイン クレメン)! CHECK: acc.loop gang({dim=%{{.*}}, static=%{{.*}} : i32}) {{.*}} control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
27066546d94SValentin Clement! CHECK:        acc.yield
2715062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}
27266546d94SValentin Clement
27366546d94SValentin Clement  !$acc loop gang(dim: 1)
27466546d94SValentin Clement  DO i = 1, n
27566546d94SValentin Clement    a(i) = b(i)
27666546d94SValentin Clement  END DO
27766546d94SValentin Clement
2786b42625bSValentin Clement (バレンタイン クレメン)! CHECK:      acc.loop gang({dim={{.*}} : i32}) {{.*}} control(%arg0 : i32) = (%{{.*}} : i32) to (%{{.*}} : i32) step (%{{.*}} : i32) {
27966546d94SValentin Clement! CHECK:        acc.yield
2805062a178SValentin Clement (バレンタイン クレメン)! CHECK-NEXT: } attributes {inclusiveUpperbound = array<i1: true>}
28166546d94SValentin Clement
2828bc676c2SValentin Clement (バレンタイン クレメン)  !$acc loop
2838bc676c2SValentin Clement (バレンタイン クレメン)  DO i = 1, n
2848bc676c2SValentin Clement (バレンタイン クレメン)    !$acc cache(b)
2858bc676c2SValentin Clement (バレンタイン クレメン)    a(i) = b(i)
2868bc676c2SValentin Clement (バレンタイン クレメン)  END DO
2878bc676c2SValentin Clement (バレンタイン クレメン)
2888bc676c2SValentin Clement (バレンタイン クレメン)! CHECK: %[[CACHE:.*]] = acc.cache varPtr(%{{.*}} : !fir.ref<!fir.array<10xf32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<10xf32>> {name = "b"}
2895062a178SValentin Clement (バレンタイン クレメン)! CHECK: acc.loop {{.*}} cache(%[[CACHE]] : !fir.ref<!fir.array<10xf32>>)
2908bc676c2SValentin Clement (バレンタイン クレメン)
291bc323460SValentin Clement (バレンタイン クレメン)  !$acc loop
292bc323460SValentin Clement (バレンタイン クレメン)  do 100 i=0, n
293bc323460SValentin Clement (バレンタイン クレメン)  100 continue
294bc323460SValentin Clement (バレンタイン クレメン)! CHECK: acc.loop
295bc323460SValentin Clement (バレンタイン クレメン)
29640f5f905SValentin Clement (バレンタイン クレメン)  !$acc loop gang device_type(nvidia) gang(8)
29740f5f905SValentin Clement (バレンタイン クレメン)  DO i = 1, n
29840f5f905SValentin Clement (バレンタイン クレメン)  END DO
29940f5f905SValentin Clement (バレンタイン クレメン)
30040f5f905SValentin Clement (バレンタイン クレメン)! CHECK: acc.loop gang([#acc.device_type<none>], {num=%c8{{.*}} : i32} [#acc.device_type<nvidia>])
30140f5f905SValentin Clement (バレンタイン クレメン)
302b8967e00SValentin Clement (バレンタイン クレメン)  !$acc loop device_type(nvidia, default) gang
303b8967e00SValentin Clement (バレンタイン クレメン)  DO i = 1, n
304b8967e00SValentin Clement (バレンタイン クレメン)  END DO
305b8967e00SValentin Clement (バレンタイン クレメン)
30616d25832SValentin Clement! CHECK: acc.loop gang([#acc.device_type<nvidia>, #acc.device_type<default>])
307b8967e00SValentin Clement (バレンタイン クレメン)
308d7ab38f8SValentin Clementend program
309e99c8aefSValentin Clement (バレンタイン クレメン)
310e99c8aefSValentin Clement (バレンタイン クレメン)subroutine sub1(i, j, k)
311e99c8aefSValentin Clement (バレンタイン クレメン)  integer :: i,j,k
312e99c8aefSValentin Clement (バレンタイン クレメン)  integer :: a(i,j,k)
313e99c8aefSValentin Clement (バレンタイン クレメン)  !$acc parallel loop
314e99c8aefSValentin Clement (バレンタイン クレメン)  do concurrent (i=1:10,j=1:100,k=1:200)
315e99c8aefSValentin Clement (バレンタイン クレメン)    a(i,j,k) = a(i,j,k) + 1
316e99c8aefSValentin Clement (バレンタイン クレメン)  end do
317e99c8aefSValentin Clement (バレンタイン クレメン)end subroutine
318e99c8aefSValentin Clement (バレンタイン クレメン)
319e99c8aefSValentin Clement (バレンタイン クレメン)! CHECK: func.func @_QPsub1
320*26d92826Skhaki3! CHECK: acc.parallel
321e99c8aefSValentin Clement (バレンタイン クレメン)! CHECK: %[[DC_K:.*]] = fir.alloca i32 {bindc_name = "k"}
322e99c8aefSValentin Clement (バレンタイン クレメン)! CHECK: %[[DC_J:.*]] = fir.alloca i32 {bindc_name = "j"}
323e99c8aefSValentin Clement (バレンタイン クレメン)! CHECK: %[[DC_I:.*]] = fir.alloca i32 {bindc_name = "i"}
324e99c8aefSValentin Clement (バレンタイン クレメン)! CHECK: %[[P_I:.*]] = acc.private varPtr(%[[DC_I]] : !fir.ref<i32>) -> !fir.ref<i32> {implicit = true, name = ""}
325e99c8aefSValentin Clement (バレンタイン クレメン)! CHECK: %[[P_J:.*]] = acc.private varPtr(%[[DC_J]] : !fir.ref<i32>) -> !fir.ref<i32> {implicit = true, name = ""}
326e99c8aefSValentin Clement (バレンタイン クレメン)! CHECK: %[[P_K:.*]] = acc.private varPtr(%[[DC_K]] : !fir.ref<i32>) -> !fir.ref<i32> {implicit = true, name = ""}
32714e17ea1SRazvan Lupusoru! CHECK: acc.loop combined(parallel) private(@privatization_ref_i32 -> %[[P_I]] : !fir.ref<i32>, @privatization_ref_i32 -> %[[P_J]] : !fir.ref<i32>, @privatization_ref_i32 -> %[[P_K]] : !fir.ref<i32>) control(%{{.*}} : i32, %{{.*}} : i32, %{{.*}} : i32) = (%c1{{.*}}, %c1{{.*}}, %c1{{.*}} : i32, i32, i32) to (%c10{{.*}}, %c100{{.*}}, %c200{{.*}} : i32, i32, i32)  step (%c1{{.*}}, %c1{{.*}}, %c1{{.*}} : i32, i32, i32)
328e99c8aefSValentin Clement (バレンタイン クレメン)! CHECK: } attributes {inclusiveUpperbound = array<i1: true, true, true>}
329