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