Files
clang-p2996/flang/test/Semantics/loop-directives.f90
Jean-Didier PAILLEUX e811cb00e5 [flang] Implement !DIR$ UNROLL [N] (#123331)
This patch implements support for the UNROLL directive to control how
many times a loop should be unrolled.
It must be placed immediately before a `DO LOOP` and applies only to the
loop that follows. N is an integer that specifying the unrolling factor.
This is done by adding an attribute to the branch into the loop in LLVM
to indicate that the loop should unrolled.
The code pushed to support the directive `VECTOR ALWAYS` has been
modified to take account of the fact that several directives can be used
before a `DO LOOP`.
2025-01-29 09:44:09 +01:00

47 lines
1.1 KiB
Fortran

! RUN: %python %S/test_errors.py %s %flang_fc1 -Werror
! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenacc -Werror
subroutine empty
! WARNING: A DO loop must follow the VECTOR ALWAYS directive
!dir$ vector always
! WARNING: A DO loop must follow the UNROLL directive
!dir$ unroll
end subroutine empty
subroutine non_do
! WARNING: A DO loop must follow the VECTOR ALWAYS directive
!dir$ vector always
! WARNING: A DO loop must follow the UNROLL directive
!dir$ unroll
a = 1
end subroutine non_do
subroutine execution_part
do i=1,10
! WARNING: A DO loop must follow the VECTOR ALWAYS directive
!dir$ vector always
! WARNING: A DO loop must follow the UNROLL directive
!dir$ unroll
end do
end subroutine execution_part
! OK
subroutine test_vector_always_before_acc(a, b, c)
real, dimension(10) :: a,b,c
!dir$ vector always
!$acc loop
do i=1,N
a(i) = b(i) + c(i)
enddo
end subroutine
! OK
subroutine test_unroll_before_acc(a, b, c)
real, dimension(10) :: a,b,c
!dir$ unroll
!$acc loop
do i=1,N
a(i) = b(i) + c(i)
enddo
end subroutine