315 lines · plain
1! RUN: %python %S/../test_errors.py %s %flang -fopenacc2 3! Check OpenACC clause validity for the following construct and directive:4! 2.11 Kernels Loop5 6program openacc_kernels_loop_validity7 8 implicit none9 10 type atype11 real(8), dimension(10) :: arr12 real(8) :: s13 end type atype14 15 integer :: i, j, b, gang_size, vector_size, worker_size16 integer, parameter :: N = 25617 integer, dimension(N) :: c18 logical, dimension(N) :: d, e19 integer :: async120 integer :: wait1, wait221 real :: reduction_r22 logical :: reduction_l23 real(8), dimension(N, N) :: aa, bb, cc24 real(8), dimension(:), allocatable :: dd25 real(8), pointer :: p26 logical :: ifCondition = .TRUE.27 type(atype) :: t28 type(atype), dimension(10) :: ta29 30 real(8), dimension(N) :: a, f, g, h31 32 !$acc kernels loop33 do i = 1, N34 a(i) = 3.14d035 end do36 37 !$acc kernels loop38 do i = 1, N39 a(i) = 3.14d040 end do41 !$acc end kernels loop42 43 !$acc kernels loop44 do i = 1, N45 a(i) = 3.14d046 end do47 !$acc end kernels loop48 49 !$acc kernels loop num_gangs(8)50 do i = 1, N51 a(i) = 3.14d052 end do53 54 !$acc kernels loop num_gangs(gang_size)55 do i = 1, N56 a(i) = 3.14d057 end do58 59 !$acc kernels loop num_gangs(8)60 do i = 1, N61 a(i) = 3.14d062 end do63 64 !$acc kernels loop num_workers(worker_size)65 do i = 1, N66 a(i) = 3.14d067 end do68 69 !$acc kernels loop num_workers(8)70 do i = 1, N71 a(i) = 3.14d072 end do73 74 !$acc kernels loop vector_length(vector_size)75 do i = 1, N76 a(i) = 3.14d077 end do78 79 !$acc kernels loop vector_length(128)80 do i = 1, N81 a(i) = 3.14d082 end do83 84 !$acc kernels loop num_gangs(gang_size)85 do i = 1, N86 a(i) = 3.14d087 end do88 89 90 !$acc kernels loop if(.TRUE.)91 do i = 1, N92 a(i) = 3.14d093 end do94 95 !$acc kernels loop if(ifCondition)96 do i = 1, N97 a(i) = 3.14d098 end do99 100 !$acc kernels loop101 do i = 1, N102 a(i) = 3.14d0103 end do104 !ERROR: Unmatched END SERIAL LOOP directive105 !$acc end serial loop106 107 !ERROR: Clause IF is not allowed after clause DEVICE_TYPE on the KERNELS LOOP directive108 !$acc kernels loop device_type(*) if(.TRUE.)109 do i = 1, N110 a(i) = 3.14d0111 end do112 !$acc end kernels loop113 114 !$acc kernels loop async115 do i = 1, N116 a(i) = 3.14d0117 end do118 119 !$acc kernels loop async(1)120 do i = 1, N121 a(i) = 3.14d0122 end do123 124 !$acc kernels loop async(async1)125 do i = 1, N126 a(i) = 3.14d0127 end do128 129 !$acc kernels loop wait(wait1)130 do i = 1, N131 a(i) = 3.14d0132 end do133 134 !$acc kernels loop wait(wait1, wait2)135 do i = 1, N136 a(i) = 3.14d0137 end do138 139 !$acc kernels loop wait(wait1) wait(wait2)140 do i = 1, N141 a(i) = 3.14d0142 end do143 144 !$acc kernels loop wait(1, 2) async(3)145 do i = 1, N146 a(i) = 3.14d0147 end do148 149 !$acc kernels loop wait(queues: 1, 2) async(3)150 do i = 1, N151 a(i) = 3.14d0152 end do153 154 !$acc kernels loop wait(devnum: 1: 1, 2) async(3)155 do i = 1, N156 a(i) = 3.14d0157 end do158 159 !$acc kernels loop wait(devnum: 1: queues: 1, 2) async(3)160 do i = 1, N161 a(i) = 3.14d0162 end do163 164 !$acc kernels loop num_gangs(8)165 do i = 1, N166 a(i) = 3.14d0167 end do168 169 !$acc kernels loop num_workers(8)170 do i = 1, N171 a(i) = 3.14d0172 end do173 174 !$acc kernels loop vector_length(128)175 do i = 1, N176 a(i) = 3.14d0177 end do178 179 !$acc kernels loop if(.true.)180 do i = 1, N181 a(i) = 3.14d0182 end do183 184 !$acc kernels loop if(ifCondition)185 do i = 1, N186 a(i) = 3.14d0187 end do188 189 !ERROR: At most one IF clause can appear on the KERNELS LOOP directive190 !$acc kernels loop if(.true.) if(ifCondition)191 do i = 1, N192 a(i) = 3.14d0193 end do194 195 !$acc kernels loop self196 do i = 1, N197 a(i) = 3.14d0198 end do199 200 !$acc kernels loop self(.true.)201 do i = 1, N202 a(i) = 3.14d0203 end do204 205 !$acc kernels loop self(ifCondition)206 do i = 1, N207 a(i) = 3.14d0208 end do209 210 !$acc kernels loop copy(aa) copyin(bb) copyout(cc)211 do i = 1, N212 a(i) = 3.14d0213 end do214 215 !$acc kernels loop copy(aa, bb) copyout(zero: cc)216 do i = 1, N217 a(i) = 3.14d0218 end do219 220 !$acc kernels loop present(aa, bb) create(cc)221 do i = 1, N222 a(i) = 3.14d0223 end do224 225 !$acc kernels loop copyin(readonly: aa, bb) create(zero: cc)226 do i = 1, N227 a(i) = 3.14d0228 end do229 230 !$acc kernels loop deviceptr(aa, bb) no_create(cc)231 do i = 1, N232 a(i) = 3.14d0233 end do234 235 !ERROR: Argument `aa` on the ATTACH clause must be a variable or array with the POINTER or ALLOCATABLE attribute236 !$acc kernels loop attach(aa, dd, p)237 do i = 1, N238 a(i) = 3.14d0239 end do240 241 !$acc kernels loop private(aa, bb, cc)242 do i = 1, N243 a(i) = 3.14d0244 end do245 246 !$acc kernels loop default(none) private(N, a)247 do i = 1, N248 a(i) = 3.14d0249 end do250 251 !$acc kernels loop default(none)252 !ERROR: The DEFAULT(NONE) clause requires that 'n' must be listed in a data-mapping clause253 do i = 1, N254 !ERROR: The DEFAULT(NONE) clause requires that 'a' must be listed in a data-mapping clause255 a(i) = 3.14d0256 end do257 258 !$acc kernels loop default(present)259 do i = 1, N260 a(i) = 3.14d0261 end do262 263 !ERROR: At most one DEFAULT clause can appear on the KERNELS LOOP directive264 !$acc kernels loop default(none) default(present)265 do i = 1, N266 a(i) = 3.14d0267 end do268 269 !$acc kernels loop device_type(*)270 do i = 1, N271 a(i) = 3.14d0272 end do273 274 !$acc kernels loop device_type(multicore)275 do i = 1, N276 a(i) = 3.14d0277 end do278 279 !$acc kernels loop device_type(host, multicore)280 do i = 1, N281 a(i) = 3.14d0282 end do283 284 !$acc kernels loop device_type(*) async wait num_gangs(8) num_workers(8) vector_length(128)285 do i = 1, N286 a(i) = 3.14d0287 end do288 289 !$acc kernels loop device_type(*) async290 do i = 1, N291 a(i) = 3.14d0292 end do293 294 !ERROR: Clause IF is not allowed after clause DEVICE_TYPE on the KERNELS LOOP directive295 !$acc kernels loop device_type(*) if(.TRUE.)296 do i = 1, N297 a(i) = 3.14d0298 end do299 300 !$acc parallel loop301 do i = 1, N302 if(i == 10) cycle303 end do304 305 !$acc kernels loop async(1) device_type(nvidia) async(3)306 do i = 1, n307 end do308 309!ERROR: At most one ASYNC clause can appear on the KERNELS LOOP directive or in group separated by the DEVICE_TYPE clause310 !$acc kernels loop async(1) device_type(nvidia) async async311 do i = 1, n312 end do313 314end program openacc_kernels_loop_validity315