xref: /llvm-project/flang/test/Lower/OpenMP/loop-compound.f90 (revision 2f245875b2f71272e6d7a78b4aed5be81109e9b9)
1d62ff719SSergio Afonso! This test checks lowering of OpenMP compound (combined and composite) loop
2d62ff719SSergio Afonso! constructs.
3d62ff719SSergio Afonso
4d62ff719SSergio Afonso! RUN: bbc -fopenmp -emit-hlfir %s -o - | FileCheck %s
5d62ff719SSergio Afonso! RUN: %flang_fc1 -fopenmp -emit-hlfir %s -o - | FileCheck %s
6d62ff719SSergio Afonso
7d62ff719SSergio Afonsoprogram main
8*2f245875SKareem Ergawy  integer :: i,j
9d62ff719SSergio Afonso
10d62ff719SSergio Afonso  ! TODO When composite constructs are supported add:
11d62ff719SSergio Afonso  ! - TASKLOOP SIMD
12918ac629SSergio Afonso
13918ac629SSergio Afonso  ! ----------------------------------------------------------------------------
149c8ce5faSSergio Afonso  ! DISTRIBUTE PARALLEL DO
159c8ce5faSSergio Afonso  ! ----------------------------------------------------------------------------
169c8ce5faSSergio Afonso  !$omp teams
179c8ce5faSSergio Afonso
189c8ce5faSSergio Afonso  ! CHECK: omp.parallel
199c8ce5faSSergio Afonso  ! CHECK: omp.distribute
209c8ce5faSSergio Afonso  ! CHECK-NEXT: omp.wsloop
219c8ce5faSSergio Afonso  ! CHECK-NEXT: omp.loop_nest
229c8ce5faSSergio Afonso  !$omp distribute parallel do
239c8ce5faSSergio Afonso  do i = 1, 10
249c8ce5faSSergio Afonso  end do
259c8ce5faSSergio Afonso  !$omp end distribute parallel do
269c8ce5faSSergio Afonso
279c8ce5faSSergio Afonso  !$omp end teams
289c8ce5faSSergio Afonso
299c8ce5faSSergio Afonso  ! ----------------------------------------------------------------------------
3057726c44SSergio Afonso  ! DISTRIBUTE PARALLEL DO SIMD
3157726c44SSergio Afonso  ! ----------------------------------------------------------------------------
3257726c44SSergio Afonso  !$omp teams
3357726c44SSergio Afonso
3457726c44SSergio Afonso  ! CHECK: omp.parallel
3557726c44SSergio Afonso  ! CHECK: omp.distribute
3657726c44SSergio Afonso  ! CHECK-NEXT: omp.wsloop
3757726c44SSergio Afonso  ! CHECK-NEXT: omp.simd
3857726c44SSergio Afonso  ! CHECK-NEXT: omp.loop_nest
3957726c44SSergio Afonso  !$omp distribute parallel do simd
4057726c44SSergio Afonso  do i = 1, 10
4157726c44SSergio Afonso  end do
4257726c44SSergio Afonso  !$omp end distribute parallel do simd
4357726c44SSergio Afonso
4457726c44SSergio Afonso  !$omp end teams
4557726c44SSergio Afonso
4657726c44SSergio Afonso  ! ----------------------------------------------------------------------------
47918ac629SSergio Afonso  ! DISTRIBUTE SIMD
48918ac629SSergio Afonso  ! ----------------------------------------------------------------------------
49918ac629SSergio Afonso  !$omp teams
50918ac629SSergio Afonso
51918ac629SSergio Afonso  ! CHECK: omp.distribute
52918ac629SSergio Afonso  ! CHECK-NEXT: omp.simd
53918ac629SSergio Afonso  ! CHECK-NEXT: omp.loop_nest
54918ac629SSergio Afonso  !$omp distribute simd
55918ac629SSergio Afonso  do i = 1, 10
56918ac629SSergio Afonso  end do
57918ac629SSergio Afonso  !$omp end distribute simd
58918ac629SSergio Afonso
59918ac629SSergio Afonso  !$omp end teams
60d62ff719SSergio Afonso
61d62ff719SSergio Afonso  ! ----------------------------------------------------------------------------
62d62ff719SSergio Afonso  ! DO SIMD
63d62ff719SSergio Afonso  ! ----------------------------------------------------------------------------
64d62ff719SSergio Afonso  ! CHECK: omp.wsloop
6552d2d820SSergio Afonso  ! CHECK-NEXT: omp.simd
66d62ff719SSergio Afonso  ! CHECK-NEXT: omp.loop_nest
67d62ff719SSergio Afonso  !$omp do simd
68d62ff719SSergio Afonso  do i = 1, 10
69d62ff719SSergio Afonso  end do
70d62ff719SSergio Afonso  !$omp end do simd
71d62ff719SSergio Afonso
72d62ff719SSergio Afonso  ! ----------------------------------------------------------------------------
73d62ff719SSergio Afonso  ! PARALLEL DO SIMD
74d62ff719SSergio Afonso  ! ----------------------------------------------------------------------------
75d62ff719SSergio Afonso  ! CHECK: omp.parallel
76d62ff719SSergio Afonso  ! CHECK: omp.wsloop
7752d2d820SSergio Afonso  ! CHECK-NEXT: omp.simd
78d62ff719SSergio Afonso  ! CHECK-NEXT: omp.loop_nest
79d62ff719SSergio Afonso  !$omp parallel do simd
80d62ff719SSergio Afonso  do i = 1, 10
81d62ff719SSergio Afonso  end do
82d62ff719SSergio Afonso  !$omp end parallel do simd
83d62ff719SSergio Afonso
84d62ff719SSergio Afonso  ! ----------------------------------------------------------------------------
85d62ff719SSergio Afonso  ! PARALLEL DO
86d62ff719SSergio Afonso  ! ----------------------------------------------------------------------------
87d62ff719SSergio Afonso  ! CHECK: omp.parallel
88d62ff719SSergio Afonso  ! CHECK: omp.wsloop
89d62ff719SSergio Afonso  ! CHECK-NEXT: omp.loop_nest
90d62ff719SSergio Afonso  !$omp parallel do
91d62ff719SSergio Afonso  do i = 1, 10
92d62ff719SSergio Afonso  end do
93d62ff719SSergio Afonso  !$omp end parallel do
94d62ff719SSergio Afonso
95d62ff719SSergio Afonso  ! ----------------------------------------------------------------------------
96d62ff719SSergio Afonso  ! TARGET PARALLEL DO SIMD
97d62ff719SSergio Afonso  ! ----------------------------------------------------------------------------
98d62ff719SSergio Afonso  ! CHECK: omp.target
99d62ff719SSergio Afonso  ! CHECK: omp.parallel
100d62ff719SSergio Afonso  ! CHECK: omp.wsloop
10152d2d820SSergio Afonso  ! CHECK-NEXT: omp.simd
102d62ff719SSergio Afonso  ! CHECK-NEXT: omp.loop_nest
103d62ff719SSergio Afonso  !$omp target parallel do simd
104d62ff719SSergio Afonso  do i = 1, 10
105d62ff719SSergio Afonso  end do
106d62ff719SSergio Afonso  !$omp end target parallel do simd
107d62ff719SSergio Afonso
108d62ff719SSergio Afonso  ! ----------------------------------------------------------------------------
109d62ff719SSergio Afonso  ! TARGET PARALLEL DO
110d62ff719SSergio Afonso  ! ----------------------------------------------------------------------------
111d62ff719SSergio Afonso  ! CHECK: omp.target
112d62ff719SSergio Afonso  ! CHECK: omp.parallel
113d62ff719SSergio Afonso  ! CHECK: omp.wsloop
114d62ff719SSergio Afonso  ! CHECK-NEXT: omp.loop_nest
115d62ff719SSergio Afonso  !$omp target parallel do
116d62ff719SSergio Afonso  do i = 1, 10
117d62ff719SSergio Afonso  end do
118d62ff719SSergio Afonso  !$omp end target parallel do
119d62ff719SSergio Afonso
120d62ff719SSergio Afonso  ! ----------------------------------------------------------------------------
121d62ff719SSergio Afonso  ! TARGET SIMD
122d62ff719SSergio Afonso  ! ----------------------------------------------------------------------------
123d62ff719SSergio Afonso  ! CHECK: omp.target
124d62ff719SSergio Afonso  ! CHECK: omp.simd
125d62ff719SSergio Afonso  ! CHECK-NEXT: omp.loop_nest
126d62ff719SSergio Afonso  !$omp target simd
127d62ff719SSergio Afonso  do i = 1, 10
128d62ff719SSergio Afonso  end do
129d62ff719SSergio Afonso  !$omp end target simd
130d62ff719SSergio Afonso
131d62ff719SSergio Afonso  ! ----------------------------------------------------------------------------
132d62ff719SSergio Afonso  ! TARGET TEAMS DISTRIBUTE
133d62ff719SSergio Afonso  ! ----------------------------------------------------------------------------
134d62ff719SSergio Afonso  ! CHECK: omp.target
135d62ff719SSergio Afonso  ! CHECK: omp.teams
136d62ff719SSergio Afonso  ! CHECK: omp.distribute
137d62ff719SSergio Afonso  ! CHECK-NEXT: omp.loop_nest
138d62ff719SSergio Afonso  !$omp target teams distribute
139d62ff719SSergio Afonso  do i = 1, 10
140d62ff719SSergio Afonso  end do
141d62ff719SSergio Afonso  !$omp end target teams distribute
142d62ff719SSergio Afonso
143d62ff719SSergio Afonso  ! ----------------------------------------------------------------------------
1449c8ce5faSSergio Afonso  ! TARGET TEAMS DISTRIBUTE PARALLEL DO
1459c8ce5faSSergio Afonso  ! ----------------------------------------------------------------------------
1469c8ce5faSSergio Afonso  ! CHECK: omp.target
1479c8ce5faSSergio Afonso  ! CHECK: omp.teams
1489c8ce5faSSergio Afonso  ! CHECK: omp.parallel
1499c8ce5faSSergio Afonso  ! CHECK: omp.distribute
1509c8ce5faSSergio Afonso  ! CHECK-NEXT: omp.wsloop
1519c8ce5faSSergio Afonso  ! CHECK-NEXT: omp.loop_nest
1529c8ce5faSSergio Afonso  !$omp target teams distribute parallel do
1539c8ce5faSSergio Afonso  do i = 1, 10
1549c8ce5faSSergio Afonso  end do
1559c8ce5faSSergio Afonso  !$omp end target teams distribute parallel do
1569c8ce5faSSergio Afonso
1579c8ce5faSSergio Afonso  ! ----------------------------------------------------------------------------
15857726c44SSergio Afonso  ! TARGET TEAMS DISTRIBUTE PARALLEL DO SIMD
15957726c44SSergio Afonso  ! ----------------------------------------------------------------------------
16057726c44SSergio Afonso  ! CHECK: omp.target
16157726c44SSergio Afonso  ! CHECK: omp.teams
16257726c44SSergio Afonso  ! CHECK: omp.parallel
16357726c44SSergio Afonso  ! CHECK: omp.distribute
16457726c44SSergio Afonso  ! CHECK-NEXT: omp.wsloop
16557726c44SSergio Afonso  ! CHECK-NEXT: omp.simd
16657726c44SSergio Afonso  ! CHECK-NEXT: omp.loop_nest
16757726c44SSergio Afonso  !$omp target teams distribute parallel do simd
16857726c44SSergio Afonso  do i = 1, 10
16957726c44SSergio Afonso  end do
17057726c44SSergio Afonso  !$omp end target teams distribute parallel do simd
17157726c44SSergio Afonso
17257726c44SSergio Afonso  ! ----------------------------------------------------------------------------
173918ac629SSergio Afonso  ! TARGET TEAMS DISTRIBUTE SIMD
174918ac629SSergio Afonso  ! ----------------------------------------------------------------------------
175918ac629SSergio Afonso  ! CHECK: omp.target
176918ac629SSergio Afonso  ! CHECK: omp.teams
177918ac629SSergio Afonso  ! CHECK: omp.distribute
178918ac629SSergio Afonso  ! CHECK-NEXT: omp.simd
179918ac629SSergio Afonso  ! CHECK-NEXT: omp.loop_nest
180918ac629SSergio Afonso  !$omp target teams distribute simd
181918ac629SSergio Afonso  do i = 1, 10
182918ac629SSergio Afonso  end do
183918ac629SSergio Afonso  !$omp end target teams distribute simd
184918ac629SSergio Afonso
185918ac629SSergio Afonso  ! ----------------------------------------------------------------------------
186d62ff719SSergio Afonso  ! TEAMS DISTRIBUTE
187d62ff719SSergio Afonso  ! ----------------------------------------------------------------------------
188d62ff719SSergio Afonso  ! CHECK: omp.teams
189d62ff719SSergio Afonso  ! CHECK: omp.distribute
190d62ff719SSergio Afonso  ! CHECK-NEXT: omp.loop_nest
191d62ff719SSergio Afonso  !$omp teams distribute
192d62ff719SSergio Afonso  do i = 1, 10
193d62ff719SSergio Afonso  end do
194d62ff719SSergio Afonso  !$omp end teams distribute
195918ac629SSergio Afonso
196918ac629SSergio Afonso  ! ----------------------------------------------------------------------------
1979c8ce5faSSergio Afonso  ! TEAMS DISTRIBUTE PARALLEL DO
1989c8ce5faSSergio Afonso  ! ----------------------------------------------------------------------------
1999c8ce5faSSergio Afonso  ! CHECK: omp.teams
2009c8ce5faSSergio Afonso  ! CHECK: omp.parallel
2019c8ce5faSSergio Afonso  ! CHECK: omp.distribute
2029c8ce5faSSergio Afonso  ! CHECK-NEXT: omp.wsloop
2039c8ce5faSSergio Afonso  ! CHECK-NEXT: omp.loop_nest
2049c8ce5faSSergio Afonso  !$omp teams distribute parallel do
2059c8ce5faSSergio Afonso  do i = 1, 10
2069c8ce5faSSergio Afonso  end do
2079c8ce5faSSergio Afonso  !$omp end teams distribute parallel do
2089c8ce5faSSergio Afonso
2099c8ce5faSSergio Afonso  ! ----------------------------------------------------------------------------
21057726c44SSergio Afonso  ! TEAMS DISTRIBUTE PARALLEL DO SIMD
21157726c44SSergio Afonso  ! ----------------------------------------------------------------------------
21257726c44SSergio Afonso  ! CHECK: omp.teams
21357726c44SSergio Afonso  ! CHECK: omp.parallel
21457726c44SSergio Afonso  ! CHECK: omp.distribute
21557726c44SSergio Afonso  ! CHECK-NEXT: omp.wsloop
21657726c44SSergio Afonso  ! CHECK-NEXT: omp.simd
21757726c44SSergio Afonso  ! CHECK-NEXT: omp.loop_nest
21857726c44SSergio Afonso  !$omp teams distribute parallel do simd
21957726c44SSergio Afonso  do i = 1, 10
22057726c44SSergio Afonso  end do
22157726c44SSergio Afonso  !$omp end teams distribute parallel do simd
22257726c44SSergio Afonso
22357726c44SSergio Afonso  ! ----------------------------------------------------------------------------
224918ac629SSergio Afonso  ! TEAMS DISTRIBUTE SIMD
225918ac629SSergio Afonso  ! ----------------------------------------------------------------------------
226918ac629SSergio Afonso  ! CHECK: omp.teams
227918ac629SSergio Afonso  ! CHECK: omp.distribute
228918ac629SSergio Afonso  ! CHECK-NEXT: omp.simd
229918ac629SSergio Afonso  ! CHECK-NEXT: omp.loop_nest
230918ac629SSergio Afonso  !$omp teams distribute simd
231918ac629SSergio Afonso  do i = 1, 10
232918ac629SSergio Afonso  end do
233918ac629SSergio Afonso  !$omp end teams distribute simd
234*2f245875SKareem Ergawy
235*2f245875SKareem Ergawy  ! ----------------------------------------------------------------------------
236*2f245875SKareem Ergawy  ! Unstructured control-flow in loop
237*2f245875SKareem Ergawy  ! ----------------------------------------------------------------------------
238*2f245875SKareem Ergawy  ! CHECK:      omp.target
239*2f245875SKareem Ergawy  ! CHECK:      omp.teams
240*2f245875SKareem Ergawy  ! CHECK:      omp.parallel
241*2f245875SKareem Ergawy  ! CHECK:      omp.distribute
242*2f245875SKareem Ergawy  ! CHECK-NEXT: omp.wsloop
243*2f245875SKareem Ergawy  ! CHECK-NEXT: omp.loop_nest
244*2f245875SKareem Ergawy  !
245*2f245875SKareem Ergawy  ! Verify the conrol-flow of the unstructured inner loop.
246*2f245875SKareem Ergawy  ! CHECK:        cf.br ^[[BB1:.*]]
247*2f245875SKareem Ergawy  ! CHECK:      ^[[BB1]]:
248*2f245875SKareem Ergawy  ! CHECK:        cf.br ^[[BB2:.*]]
249*2f245875SKareem Ergawy  ! CHECK:      ^[[BB2]]:
250*2f245875SKareem Ergawy  ! CHECK:        cf.cond_br %{{.*}}, ^[[BB3:.*]], ^[[BB6:.*]]
251*2f245875SKareem Ergawy  ! CHECK:      ^[[BB3]]:
252*2f245875SKareem Ergawy  ! CHECK:        cf.cond_br %{{.*}}, ^[[BB4:.*]], ^[[BB5:.*]]
253*2f245875SKareem Ergawy  ! CHECK:      ^[[BB4]]:
254*2f245875SKareem Ergawy  ! CHECK:        cf.br ^[[BB6]]
255*2f245875SKareem Ergawy  ! CHECK:      ^[[BB5]]:
256*2f245875SKareem Ergawy  ! CHECK:        cf.br ^[[BB2]]
257*2f245875SKareem Ergawy  ! CHECK:      ^[[BB6]]:
258*2f245875SKareem Ergawy  ! CHECK-NEXT:   omp.yield
259*2f245875SKareem Ergawy  !$omp target teams distribute parallel do
260*2f245875SKareem Ergawy  do i = 1, 10
261*2f245875SKareem Ergawy    outerloop: do j = i-1, i+i
262*2f245875SKareem Ergawy      if (j == i) then
263*2f245875SKareem Ergawy        exit outerloop
264*2f245875SKareem Ergawy      end if
265*2f245875SKareem Ergawy    end do outerloop
266*2f245875SKareem Ergawy  end do
267*2f245875SKareem Ergawy  !$omp end target teams distribute parallel do
268d62ff719SSergio Afonsoend program main
269