| ! Testing the Semantics of loop sequences combined with |
| ! nested Loop Transformation Constructs |
| |
| !RUN: %python %S/../test_errors.py %s %flang -fopenmp -fopenmp-version=60 |
| |
| subroutine loop_transformation_construct1 |
| implicit none |
| |
| !$omp do |
| !ERROR: This construct should contain a DO-loop or a loop-nest-generating OpenMP construct |
| !$omp fuse |
| end subroutine |
| |
| subroutine loop_transformation_construct2 |
| implicit none |
| |
| !$omp do |
| !ERROR: This construct should contain a DO-loop or a loop-nest-generating OpenMP construct |
| !$omp fuse |
| !$omp end fuse |
| end subroutine |
| |
| subroutine loop_transformation_construct3 |
| implicit none |
| integer, parameter :: i = 5 |
| integer :: x |
| integer :: v(i) |
| |
| !$omp do |
| !$omp fuse |
| do x = 1, i |
| v(x) = v(x) * 2 |
| end do |
| do x = 1, i |
| v(x) = v(x) * 2 |
| end do |
| !$omp end fuse |
| !$omp end do |
| !ERROR: Misplaced OpenMP end-directive |
| !$omp end fuse |
| end subroutine |
| |
| subroutine loop_transformation_construct4 |
| implicit none |
| integer, parameter :: i = 5 |
| integer :: x |
| integer :: v(i) |
| |
| !$omp do |
| do x = 1, i |
| v(x) = v(x) * 2 |
| end do |
| !ERROR: This construct should contain a DO-loop or a loop-nest-generating OpenMP construct |
| !$omp fuse |
| !$omp end fuse |
| end subroutine |
| |
| subroutine loop_transformation_construct5 |
| implicit none |
| integer, parameter :: i = 5 |
| integer :: x |
| integer :: v(i) |
| |
| !$omp do |
| !ERROR: OpenMP loop construct cannot apply to a fully unrolled loop |
| !$omp fuse |
| !$omp unroll full |
| do x = 1, i |
| v(x) = v(x) * 2 |
| end do |
| do x = 1, i |
| v(x) = v(x) * 2 |
| end do |
| !$omp end fuse |
| end subroutine |
| |
| subroutine loop_transformation_construct6 |
| implicit none |
| integer, parameter :: i = 5 |
| integer :: x |
| integer :: v(i) |
| |
| !ERROR: This construct applies to a loop nest, but has a loop sequence of length 2 |
| !$omp do |
| !$omp fuse looprange(1,1) |
| !$omp unroll partial(2) |
| do x = 1, i |
| v(x) = v(x) * 2 |
| end do |
| do x = 1, i |
| v(x) = v(x) * 2 |
| end do |
| !$omp end fuse |
| end subroutine |