brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.2 KiB · 635dbb0 Raw
482 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.9 Loop5 6program openacc_loop_validity7 8  implicit none9 10  type atype11    real(8), dimension(10) :: arr12    real(8) :: s13    integer :: n14  end type atype15 16  integer :: i, j, k, l, m, b, gang_size, vector_size, worker_size17  integer, parameter :: N = 25618  integer, dimension(N) :: c19  logical, dimension(N) :: d, e20  integer :: async121  integer :: wait1, wait222  real :: reduction_r23  logical :: reduction_l24  real(8), dimension(N, N) :: aa, bb, cc25  logical :: ifCondition = .TRUE.26  type(atype) :: t27  type(atype), dimension(10) :: ta28 29  real(8), dimension(N) :: a, f, g, h30 31  !$acc parallel32  !$acc loop tile(2)33  do i = 1, N34    a(i) = 3.14d035  end do36  !$acc end parallel37 38  !$acc parallel device_type(*) num_gangs(2)39  !$acc loop40  do i = 1, N41    a(i) = 3.14d042  end do43  !$acc end parallel44 45  !$acc parallel46  !$acc loop seq47  do i = 1, N48    a(i) = 3.14d049  end do50  !$acc end parallel51 52  !$acc parallel53  !$acc loop independent54  do i = 1, N55    a(i) = 3.14d056  end do57  !$acc end parallel58 59  !$acc parallel60  !$acc loop auto61  do i = 1, N62    a(i) = 3.14d063  end do64  !$acc end parallel65 66  !$acc parallel67  !ERROR: At most one VECTOR clause can appear on the LOOP directive or in group separated by the DEVICE_TYPE clause68  !$acc loop vector vector(128)69  do i = 1, N70    a(i) = 3.14d071  end do72  !$acc end parallel73 74  !$acc parallel75  !$acc loop vector76  do i = 1, N77    a(i) = 3.14d078  end do79  !$acc end parallel80 81  !$acc parallel82  !$acc loop vector(10)83  do i = 1, N84    a(i) = 3.14d085  end do86  !$acc end parallel87 88  !$acc parallel89  !$acc loop vector(vector_size)90  do i = 1, N91    a(i) = 3.14d092  end do93  !$acc end parallel94 95  !$acc parallel96  !$acc loop vector(length: vector_size)97  do i = 1, N98    a(i) = 3.14d099  end do100  !$acc end parallel101 102  !$acc parallel103  !ERROR: At most one WORKER clause can appear on the LOOP directive or in group separated by the DEVICE_TYPE clause104  !$acc loop worker worker(10)105  do i = 1, N106    a(i) = 3.14d0107  end do108  !$acc end parallel109 110  !$acc parallel111  !$acc loop worker112  do i = 1, N113    a(i) = 3.14d0114  end do115  !$acc end parallel116 117  !$acc parallel118  !$acc loop worker(10)119  do i = 1, N120    a(i) = 3.14d0121  end do122  !$acc end parallel123 124  !$acc parallel125  !$acc loop worker(worker_size)126  do i = 1, N127    a(i) = 3.14d0128  end do129  !$acc end parallel130 131  !$acc parallel132  !$acc loop worker(num: worker_size)133  do i = 1, N134    a(i) = 3.14d0135  end do136  !$acc end parallel137 138  !$acc parallel139  !ERROR: At most one GANG clause can appear on the LOOP directive or in group separated by the DEVICE_TYPE clause140  !$acc loop gang gang(gang_size)141  do i = 1, N142    a(i) = 3.14d0143  end do144  !$acc end parallel145 146  !$acc loop gang device_type(default) gang(gang_size)147  do i = 1, N148    a(i) = 3.14d0149  end do150 151  !ERROR: At most one GANG clause can appear on the PARALLEL LOOP directive or in group separated by the DEVICE_TYPE clause152  !$acc parallel loop gang gang(gang_size)153  do i = 1, N154    a(i) = 3.14d0155  end do156 157  !$acc parallel loop gang device_type(default) gang(gang_size)158  do i = 1, N159    a(i) = 3.14d0160  end do161 162  !$acc parallel163  !$acc loop gang(gang_size)164  do i = 1, N165    a(i) = 3.14d0166  end do167  !$acc end parallel168 169  !$acc parallel170  !$acc loop gang(num: gang_size)171  do i = 1, N172    a(i) = 3.14d0173  end do174  !$acc end parallel175 176  !$acc parallel177  !$acc loop gang(gang_size, static:*)178  do i = 1, N179    a(i) = 3.14d0180  end do181  !$acc end parallel182 183  !$acc parallel184  !$acc loop gang(num: gang_size, static:*)185  do i = 1, N186    a(i) = 3.14d0187  end do188  !$acc end parallel189 190  !$acc parallel191  !$acc loop gang(num: gang_size, static: gang_size)192  do i = 1, N193    a(i) = 3.14d0194  end do195  !$acc end parallel196 197  !$acc parallel198  !$acc loop private(b, a(:))199  do i = 1, N200    a(i) = b201  end do202  !$acc end parallel203 204  !$acc parallel205  !$acc loop tile(*)206  do i = 1, N207    a(i) = b208  end do209  !$acc end parallel210 211  !$acc parallel212  !$acc loop tile(2, 2)213  do i = 1, N214    do j = 1, N215      a(i) = b216    end do217  end do218  !$acc end parallel219 220  !$acc parallel221  !ERROR: The parameter of the COLLAPSE clause must be a constant positive integer expression222  !$acc loop collapse(-1)223  do i = 1, N224    do j = 1, N225      a(i) = 3.14d0 + j226    end do227  end do228  !$acc end parallel229 230  !$acc parallel231  !ERROR: Clause PRIVATE is not allowed after clause DEVICE_TYPE on the LOOP directive232  !$acc loop device_type(*) private(i)233  do i = 1, N234    a(i) = 3.14d0235  end do236  !$acc end parallel237 238  !$acc parallel239  !ERROR: Clause GANG is not allowed if clause SEQ appears on the LOOP directive240  !$acc loop gang seq241  do i = 1, N242    a(i) = 3.14d0243  end do244  !$acc end parallel245 246  !$acc parallel247  !ERROR: Clause WORKER is not allowed if clause SEQ appears on the LOOP directive248  !$acc loop worker seq249  do i = 1, N250    a(i) = 3.14d0251  end do252  !$acc end parallel253 254  !$acc parallel255  !ERROR: Clause VECTOR is not allowed if clause SEQ appears on the LOOP directive256  !$acc loop vector seq257  do i = 1, N258    a(i) = 3.14d0259  end do260  !$acc end parallel261 262  !$acc parallel263  !$acc loop gang264  do i = 1, n265    !$acc loop worker266    do j = 1, n267      !ERROR: GANG clause is not allowed in the region of a loop with the WORKER clause268      !ERROR: GANG clause is not allowed in the region of a loop with the GANG clause269      !$acc loop gang vector270      do k = 1, i271      end do272    end do273  end do274  !$acc end parallel275 276  !$acc parallel loop vector277  do  i = 1, n278    !ERROR: GANG clause is not allowed in the region of a loop with the VECTOR clause279    !$acc loop gang280    do j = 1, n281      !ERROR: WORKER clause is not allowed in the region of a loop with the VECTOR clause282      !$acc loop worker283      do k = 1, i284        !ERROR: VECTOR clause is not allowed in the region of a loop with the VECTOR clause285        !$acc loop vector286        do l = 1, 1287        end do288      end do289    end do290  end do291  !$acc end parallel loop292 293  !$acc kernels294  do  i = 1, n295    !$acc loop gang worker296    do j = 1, n297      !ERROR: WORKER clause is not allowed in the region of a loop with the WORKER clause298      !$acc loop worker vector299      do k = 1, i300      end do301    end do302  end do303  !$acc end kernels304 305  !$acc parallel306  !$acc loop gang(dim:1)307  do i = 1, n308    !ERROR: GANG(dim:1) clause is not allowed in the region of a loop with the GANG(dim:1) clause309    !$acc loop gang(dim:1)310    do j = 1, n311      !ERROR: GANG(dim:2) clause is not allowed in the region of a loop with the GANG(dim:1) clause312      !$acc loop gang(dim:2)313      do k = 1, i314        !ERROR: GANG(dim:3) clause is not allowed in the region of a loop with the GANG(dim:2) clause315        !ERROR: GANG(dim:3) clause is not allowed in the region of a loop with the GANG(dim:1) clause316        !$acc loop gang(dim:3)317        do l = 1, 1318          !ERROR: GANG(dim:3) clause is not allowed in the region of a loop with the GANG(dim:3) clause319          !ERROR: GANG(dim:3) clause is not allowed in the region of a loop with the GANG(dim:2) clause320          !ERROR: GANG(dim:3) clause is not allowed in the region of a loop with the GANG(dim:1) clause321          !$acc loop gang(dim:3)322          do m = 1, 1323          end do324        end do325      end do326    end do327  end do328  !$acc end parallel329 330  !$acc parallel loop gang(dim:3)331  do i = 1, n332    !$acc loop gang(dim:2)333    do j = 1, n334      !$acc loop gang(dim:1) worker vector335      do k = 1, i336      end do337    end do338  end do339  !$acc end parallel loop340 341  !$acc kernels loop gang(dim:3)342  do i = 1, n343    !ERROR: Nested GANG loops are not allowed in the region of a KERNELS construct344    !$acc loop gang(dim:2)345    do j = 1, n346      !ERROR: Nested GANG loops are not allowed in the region of a KERNELS construct347      !$acc loop gang(dim:1) worker vector348      do k = 1, i349      end do350    end do351  end do352  !$acc end kernels loop353 354  !ERROR: Clause IF is not allowed after clause DEVICE_TYPE on the PARALLEL directive355  !$acc parallel device_type(*) if(.TRUE.)356  !$acc loop357  do i = 1, N358    a(i) = 3.14d0359  end do360  !$acc end parallel361 362  !$acc loop collapse(2)363  do i = 1, N364    !ERROR: Loop control is not present in the DO LOOP365    do366      a(i) = 3.14d0367    end do368  end do369 370  !ERROR: The num argument is not allowed when dim is specified371  !$acc loop gang(1, dim: 2)372  do i = 1, N373  end do374 375  !$acc loop376  do i = 1, N377  end do378  !$acc end loop379 380  !$acc loop collapse(2)381  do i = 1, 10382    !ERROR: LOOP directive not expected in COLLAPSE loop nest383    !$acc loop384    do j = 1, 10385    end do386  end do387 388  !$acc parallel389  !$acc loop390  do i = 1, n391    if(i == 10) cycle392  end do393  !$acc end parallel394 395  !$acc loop gang device_type(nvidia) gang(num: 8)396  DO i = 1, n397  END DO398 399  !$acc loop vector device_type(default) vector(16)400  DO i = 1, n401  END DO402 403  !$acc loop worker device_type(*) worker(8)404  DO i = 1, n405  END DO406 407  !$acc loop device_type(multicore) collapse(2)408  DO i = 1, n409    DO j = 1, n410    END DO411  END DO412 413  !ERROR: Trip count must be computable and invariant414  !$acc loop collapse(2)415  DO i = 1, n416    DO j = 1, c(i)417    END DO418  END DO419 420  !ERROR: Trip count must be computable and invariant421  !$acc loop collapse(2)422  DO i = 1, n423    DO j = 1, i424    END DO425  END DO426 427  !ERROR: Trip count must be computable and invariant428  !$acc loop collapse(2)429  DO i = 1, n430    DO j = 1, ta(i)%n431    END DO432  END DO433 434  !ERROR: Trip count must be computable and invariant435  !$acc parallel loop collapse(2)436  DO i = 1, n437    DO j = 1, ta(i)%n438    END DO439  END DO440 441  !ERROR: Trip count must be computable and invariant442  !$acc loop collapse(3)443  DO i = 1, n444    DO j = 1, n445      DO k = 1, i446      END DO447    END DO448  END DO449 450contains451 452  subroutine sub1()453    !$acc routine gang(dim:2)454    implicit none455    integer, parameter :: N = 256456    integer :: i, j457 458    !$acc loop gang(dim:2)459    DO j = 1, N460       !$acc loop gang(dim:1) vector461       DO i = 1, N462       END DO463    END DO464  end subroutine sub1465 466  subroutine sub2()467    !$acc routine gang(dim:2)468    implicit none469    integer, parameter :: N = 256470    integer :: i, j471 472    !$acc loop gang(dim:2)473    DO j = 1, N474       !ERROR: GANG(dim:2) clause is not allowed in the region of a loop with the GANG(dim:2) clause475       !$acc loop gang(dim:2) vector476       DO i = 1, N477       END DO478    END DO479  end subroutine sub2480 481end program openacc_loop_validity482