124 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 Serial Loop5 6program openacc_serial_loop_validity7 8 implicit none9 10 integer :: i, b11 integer, parameter :: N = 25612 integer, dimension(N) :: c13 logical, dimension(N) :: d, e14 integer :: async115 integer :: wait1, wait216 real :: reduction_r17 logical :: reduction_l18 logical :: ifCondition = .TRUE.19 real(8), dimension(N) :: a20 21 22 !$acc serial loop reduction(+: reduction_r)23 do i = 1, N24 reduction_r = a(i) + i25 end do26 27 !$acc serial loop reduction(*: reduction_r)28 do i = 1, N29 reduction_r = reduction_r * (a(i) + i)30 end do31 32 !$acc serial loop reduction(min: reduction_r)33 do i = 1, N34 reduction_r = min(reduction_r, a(i) * i)35 end do36 37 !$acc serial loop reduction(max: reduction_r)38 do i = 1, N39 reduction_r = max(reduction_r, a(i) * i)40 end do41 42 !$acc serial loop reduction(iand: b)43 do i = 1, N44 b = iand(b, c(i))45 end do46 47 !$acc serial loop reduction(ior: b)48 do i = 1, N49 b = ior(b, c(i))50 end do51 52 !$acc serial loop reduction(ieor: b)53 do i = 1, N54 b = ieor(b, c(i))55 end do56 57 !$acc serial loop reduction(.and.: reduction_l)58 do i = 1, N59 reduction_l = d(i) .and. e(i)60 end do61 62 !$acc serial loop reduction(.or.: reduction_l)63 do i = 1, N64 reduction_l = d(i) .or. e(i)65 end do66 67 !$acc serial loop reduction(.eqv.: reduction_l)68 do i = 1, N69 reduction_l = d(i) .eqv. e(i)70 end do71 72 !$acc serial loop reduction(.neqv.: reduction_l)73 do i = 1, N74 reduction_l = d(i) .neqv. e(i)75 end do76 77 !ERROR: Clause IF is not allowed after clause DEVICE_TYPE on the SERIAL LOOP directive78 !$acc serial loop device_type(*) if(.TRUE.)79 do i = 1, N80 a(i) = 3.14d081 end do82 !$acc end serial loop83 84 !$acc serial loop if(ifCondition)85 do i = 1, N86 a(i) = 3.14d087 end do88 !$acc end serial loop89 90 !$acc serial loop91 do i = 1, N92 a(i) = 3.14d093 end do94 !ERROR: Unmatched END PARALLEL LOOP directive95 !$acc end parallel loop96 97 !$acc serial loop98 do i = 1, N99 a(i) = 3.14d0100 end do101 !$acc end serial loop102 103 !$acc serial loop104 do i = 1, N105 a(i) = 3.14d0106 end do107 !$acc end serial108 109 !$acc serial loop110 do i = 1, n111 if(i == 10) cycle112 end do113 114 !$acc serial loop async(1) device_type(nvidia) async(3)115 do i = 1, n116 end do117 118!ERROR: At most one ASYNC clause can appear on the SERIAL LOOP directive or in group separated by the DEVICE_TYPE clause119 !$acc serial loop async(1) device_type(nvidia) async async120 do i = 1, n121 end do122 123end program openacc_serial_loop_validity124