brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 96962bb Raw
154 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 Parallel Loop5 6program openacc_parallel_loop_validity7 8  implicit none9 10  integer :: i, j, b11  integer, parameter :: N = 25612  integer, dimension(N) :: c13  logical, dimension(N) :: d, e14  real :: reduction_r15  logical :: reduction_l16  logical :: ifCondition = .TRUE.17  real(8), dimension(N) :: a, f, g, h18  real(8), dimension(N, N) :: aa, bb, cc19 20  !$acc parallel loop21  do i = 1, N22    a(i) = 3.14d023  end do24 25  !$acc parallel loop26  do i = 1, N27    a(i) = 3.14d028  end do29  !$acc end parallel loop30 31  !$acc parallel loop32  do i = 1, N33    a(i) = 3.14d034  end do35  !$acc end parallel36 37  !$acc parallel loop tile(2)38  do i = 1, N39    a(i) = 3.14d040  end do41 42  !$acc parallel loop self43  do i = 1, N44    a(i) = 3.14d045  end do46 47  !ERROR: SELF clause on the PARALLEL LOOP directive only accepts optional scalar logical expression48  !$acc parallel loop self(bb, cc(:,:))49  do i = 1, N50    a(i) = 3.14d051  end do52 53  !$acc parallel loop self(.true.)54  do i = 1, N55    a(i) = 3.14d056  end do57 58  !$acc parallel loop self(ifCondition)59  do i = 1, N60    a(i) = 3.14d061  end do62 63  !$acc parallel loop tile(2, 2)64  do i = 1, N65    do j = 1, N66      aa(i, j) = 3.14d067    end do68  end do69 70  !ERROR: Clause IF is not allowed after clause DEVICE_TYPE on the PARALLEL LOOP directive71  !$acc parallel loop device_type(*) if(.TRUE.)72  do i = 1, N73    a(i) = 3.14d074  end do75  !$acc end parallel loop76 77  !$acc kernels loop78  do i = 1, N79    a(i) = 3.14d080  end do81  !ERROR: Unmatched END PARALLEL LOOP directive82  !$acc end parallel loop83 84  !$acc parallel loop reduction(+: reduction_r)85  do i = 1, N86    reduction_r = a(i) + i87  end do88 89  !$acc parallel loop reduction(*: reduction_r)90  do i = 1, N91    reduction_r = reduction_r * (a(i) + i)92  end do93 94  !$acc parallel loop reduction(min: reduction_r)95  do i = 1, N96    reduction_r = min(reduction_r, a(i) * i)97  end do98 99  !$acc parallel loop reduction(max: reduction_r)100  do i = 1, N101    reduction_r = max(reduction_r, a(i) * i)102  end do103 104  !$acc parallel loop reduction(iand: b)105  do i = 1, N106    b = iand(b, c(i))107  end do108 109  !$acc parallel loop reduction(ior: b)110  do i = 1, N111    b = ior(b, c(i))112  end do113 114  !$acc parallel loop reduction(ieor: b)115  do i = 1, N116    b = ieor(b, c(i))117  end do118 119  !$acc parallel loop reduction(.and.: reduction_l)120  do i = 1, N121    reduction_l = d(i) .and. e(i)122  end do123 124  !$acc parallel loop reduction(.or.: reduction_l)125  do i = 1, N126    reduction_l = d(i) .or. e(i)127  end do128 129  !$acc parallel loop reduction(.eqv.: reduction_l)130  do i = 1, N131    reduction_l = d(i) .eqv. e(i)132  end do133 134  !$acc parallel loop reduction(.neqv.: reduction_l)135  do i = 1, N136    reduction_l = d(i) .neqv. e(i)137  end do138 139  !$acc parallel loop140  do i = 1, N141    if(i == 10) cycle142  end do143 144  !$acc parallel loop async(1) device_type(nvidia) async(3)145  do i = 1, n146  end do147 148!ERROR: At most one ASYNC clause can appear on the PARALLEL LOOP directive or in group separated by the DEVICE_TYPE clause149  !$acc parallel loop async(1) device_type(nvidia) async async150  do i = 1, n151  end do152 153end program openacc_parallel_loop_validity154