xref: /llvm-project/flang/test/Semantics/OpenACC/acc-canonicalization-validity.f90 (revision 760eca1d1079d46e430722c8d8999b327b083240)
1! RUN: %python %S/../test_errors.py %s %flang -fopenacc
2
3! Check OpenACC canonalization validity for the construct defined below:
4!   2.9 Loop
5!   2.11 Parallel Loop
6!   2.11 Kernels Loop
7!   2.11 Serial Loop
8
9program openacc_clause_validity
10
11  implicit none
12
13  integer :: i, j
14  integer :: N = 256
15  real(8) :: a(256)
16  real(8) :: aa(256, 256)
17
18  i = 0
19
20  !ERROR: DO loop after the LOOP directive must have loop control
21  !$acc loop
22  do
23  end do
24
25  !$acc parallel loop
26  do i = 1, N
27    a(i) = 3.14
28  end do
29
30  !$acc kernels loop
31  do i = 1, N
32    a(i) = 3.14
33  end do
34
35  !$acc serial loop
36  do i = 1, N
37    a(i) = 3.14
38  end do
39
40  !$acc parallel loop
41  do i = 1, N
42    a(i) = 3.14
43  end do
44  !$acc end parallel loop
45
46  !$acc kernels loop
47  do i = 1, N
48    a(i) = 3.14
49  end do
50  !$acc end kernels loop
51
52  !$acc serial loop
53  do i = 1, N
54    a(i) = 3.14
55  end do
56  !$acc end serial loop
57
58  !ERROR: DO loop after the PARALLEL LOOP directive must have loop control
59  !$acc parallel loop
60  do
61  end do
62
63  !ERROR: DO loop after the KERNELS LOOP directive must have loop control
64  !$acc kernels loop
65  do
66  end do
67
68  !ERROR: DO loop after the SERIAL LOOP directive must have loop control
69  !$acc serial loop
70  do
71  end do
72
73  !$acc parallel
74  !ERROR: The loop construct with the TILE clause must be followed by 2 tightly-nested loops
75  !$acc loop tile(2, 2)
76  do i = 1, N
77    a(i) = 3.14
78  end do
79  !$acc end parallel
80
81  !ERROR: The loop construct with the TILE clause must be followed by 2 tightly-nested loops
82  !$acc parallel loop tile(2, 2)
83  do i = 1, N
84    a(i) = 3.14
85  end do
86
87  !$acc parallel
88  !ERROR: TILE and COLLAPSE clause may not appear on loop construct associated with DO CONCURRENT
89  !$acc loop collapse(2)
90  do concurrent (i = 1:N, j = 1:N)
91    aa(i, j) = 3.14
92  end do
93  !$acc end parallel
94
95  !$acc parallel
96  !ERROR: TILE and COLLAPSE clause may not appear on loop construct associated with DO CONCURRENT
97  !$acc loop tile(2, 2)
98  do concurrent (i = 1:N, j = 1:N)
99    aa(i, j) = 3.14
100  end do
101  !$acc end parallel
102
103end program openacc_clause_validity
104