1! RUN: %python %S/../test_errors.py %s %flang -fopenacc 2 3! Check OpenACC clause validity for the following construct and directive: 4! 2.11 Kernels Loop 5 6program openacc_kernels_loop_validity 7 8 implicit none 9 10 type atype 11 real(8), dimension(10) :: arr 12 real(8) :: s 13 end type atype 14 15 integer :: i, j, b, gang_size, vector_size, worker_size 16 integer, parameter :: N = 256 17 integer, dimension(N) :: c 18 logical, dimension(N) :: d, e 19 integer :: async1 20 integer :: wait1, wait2 21 real :: reduction_r 22 logical :: reduction_l 23 real(8), dimension(N, N) :: aa, bb, cc 24 real(8), dimension(:), allocatable :: dd 25 real(8), pointer :: p 26 logical :: ifCondition = .TRUE. 27 type(atype) :: t 28 type(atype), dimension(10) :: ta 29 30 real(8), dimension(N) :: a, f, g, h 31 32 !$acc kernels loop 33 do i = 1, N 34 a(i) = 3.14 35 end do 36 37 !$acc kernels loop num_gangs(8) 38 do i = 1, N 39 a(i) = 3.14 40 end do 41 42 !$acc kernels loop num_gangs(gang_size) 43 do i = 1, N 44 a(i) = 3.14 45 end do 46 47 !$acc kernels loop num_gangs(8) 48 do i = 1, N 49 a(i) = 3.14 50 end do 51 52 !$acc kernels loop num_workers(worker_size) 53 do i = 1, N 54 a(i) = 3.14 55 end do 56 57 !$acc kernels loop num_workers(8) 58 do i = 1, N 59 a(i) = 3.14 60 end do 61 62 !$acc kernels loop vector_length(vector_size) 63 do i = 1, N 64 a(i) = 3.14 65 end do 66 67 !$acc kernels loop vector_length(128) 68 do i = 1, N 69 a(i) = 3.14 70 end do 71 72 !$acc kernels loop num_gangs(gang_size) 73 do i = 1, N 74 a(i) = 3.14 75 end do 76 77 78 !$acc kernels loop if(.TRUE.) 79 do i = 1, N 80 a(i) = 3.14 81 end do 82 83 !$acc kernels loop if(ifCondition) 84 do i = 1, N 85 a(i) = 3.14 86 end do 87 88 !$acc kernels loop 89 do i = 1, N 90 a(i) = 3.14 91 end do 92 !ERROR: Unmatched END SERIAL LOOP directive 93 !$acc end serial loop 94 95 !ERROR: Clause IF is not allowed after clause DEVICE_TYPE on the KERNELS LOOP directive 96 !$acc kernels loop device_type(*) if(.TRUE.) 97 do i = 1, N 98 a(i) = 3.14 99 end do 100 !$acc end kernels loop 101 102 !$acc kernels loop async 103 do i = 1, N 104 a(i) = 3.14 105 end do 106 107 !$acc kernels loop async(1) 108 do i = 1, N 109 a(i) = 3.14 110 end do 111 112 !$acc kernels loop async(async1) 113 do i = 1, N 114 a(i) = 3.14 115 end do 116 117 !$acc kernels loop wait(wait1) 118 do i = 1, N 119 a(i) = 3.14 120 end do 121 122 !$acc kernels loop wait(wait1, wait2) 123 do i = 1, N 124 a(i) = 3.14 125 end do 126 127 !$acc kernels loop wait(wait1) wait(wait2) 128 do i = 1, N 129 a(i) = 3.14 130 end do 131 132 !$acc kernels loop wait(1, 2) async(3) 133 do i = 1, N 134 a(i) = 3.14 135 end do 136 137 !$acc kernels loop wait(queues: 1, 2) async(3) 138 do i = 1, N 139 a(i) = 3.14 140 end do 141 142 !$acc kernels loop wait(devnum: 1: 1, 2) async(3) 143 do i = 1, N 144 a(i) = 3.14 145 end do 146 147 !$acc kernels loop wait(devnum: 1: queues: 1, 2) async(3) 148 do i = 1, N 149 a(i) = 3.14 150 end do 151 152 !$acc kernels loop num_gangs(8) 153 do i = 1, N 154 a(i) = 3.14 155 end do 156 157 !$acc kernels loop num_workers(8) 158 do i = 1, N 159 a(i) = 3.14 160 end do 161 162 !$acc kernels loop vector_length(128) 163 do i = 1, N 164 a(i) = 3.14 165 end do 166 167 !$acc kernels loop if(.true.) 168 do i = 1, N 169 a(i) = 3.14 170 end do 171 172 !$acc kernels loop if(ifCondition) 173 do i = 1, N 174 a(i) = 3.14 175 end do 176 177 !ERROR: At most one IF clause can appear on the KERNELS LOOP directive 178 !$acc kernels loop if(.true.) if(ifCondition) 179 do i = 1, N 180 a(i) = 3.14 181 end do 182 183 !$acc kernels loop self 184 do i = 1, N 185 a(i) = 3.14 186 end do 187 188 !$acc kernels loop self(.true.) 189 do i = 1, N 190 a(i) = 3.14 191 end do 192 193 !$acc kernels loop self(ifCondition) 194 do i = 1, N 195 a(i) = 3.14 196 end do 197 198 !$acc kernels loop copy(aa) copyin(bb) copyout(cc) 199 do i = 1, N 200 a(i) = 3.14 201 end do 202 203 !$acc kernels loop copy(aa, bb) copyout(zero: cc) 204 do i = 1, N 205 a(i) = 3.14 206 end do 207 208 !$acc kernels loop present(aa, bb) create(cc) 209 do i = 1, N 210 a(i) = 3.14 211 end do 212 213 !$acc kernels loop copyin(readonly: aa, bb) create(zero: cc) 214 do i = 1, N 215 a(i) = 3.14 216 end do 217 218 !$acc kernels loop deviceptr(aa, bb) no_create(cc) 219 do i = 1, N 220 a(i) = 3.14 221 end do 222 223 !ERROR: Argument `aa` on the ATTACH clause must be a variable or array with the POINTER or ALLOCATABLE attribute 224 !$acc kernels loop attach(aa, dd, p) 225 do i = 1, N 226 a(i) = 3.14 227 end do 228 229 !$acc kernels loop private(aa, bb, cc) 230 do i = 1, N 231 a(i) = 3.14 232 end do 233 234 !$acc kernels loop default(none) 235 do i = 1, N 236 a(i) = 3.14 237 end do 238 239 !$acc kernels loop default(present) 240 do i = 1, N 241 a(i) = 3.14 242 end do 243 244 !ERROR: At most one DEFAULT clause can appear on the KERNELS LOOP directive 245 !$acc kernels loop default(none) default(present) 246 do i = 1, N 247 a(i) = 3.14 248 end do 249 250 !$acc kernels loop device_type(*) 251 do i = 1, N 252 a(i) = 3.14 253 end do 254 255 !$acc kernels loop device_type(1) 256 do i = 1, N 257 a(i) = 3.14 258 end do 259 260 !$acc kernels loop device_type(1, 3) 261 do i = 1, N 262 a(i) = 3.14 263 end do 264 265 !$acc kernels loop device_type(*) async wait num_gangs(8) num_workers(8) vector_length(128) 266 do i = 1, N 267 a(i) = 3.14 268 end do 269 270 !$acc kernels loop device_type(*) async 271 do i = 1, N 272 a(i) = 3.14 273 end do 274 275 !ERROR: Clause IF is not allowed after clause DEVICE_TYPE on the KERNELS LOOP directive 276 !$acc kernels loop device_type(*) if(.TRUE.) 277 do i = 1, N 278 a(i) = 3.14 279 end do 280 281end program openacc_kernels_loop_validity 282