llvm/flang/test/Lower/OpenACC/acc-loop-and-cpu-dir.f90

! Test that $dir loop directives (known or unknown) are not clashing
! with $acc lowering.

! RUN: %flang_fc1 -fopenacc -emit-hlfir %s -o - | FileCheck %s

subroutine test_before_acc_loop(a, b, c)
  real, dimension(10) :: a,b,c
  !dir$ myloop_directive_1
  !dir$ myloop_directive_2
  !$acc loop
  do i=1,N
    a(i) = b(i) + c(i)
  enddo
end subroutine
! CHECK-LABEL: test_before_acc_loop
! CHECK: acc.loop

subroutine test_after_acc_loop(a, b, c)
  real, dimension(10) :: a,b,c
  !$acc loop
  !dir$ myloop_directive_1
  !dir$ myloop_directive_2
  do i=1,N
    a(i) = b(i) + c(i)
  enddo
end subroutine
! CHECK-LABEL: test_after_acc_loop
! CHECK: acc.loop

subroutine test_before_acc_combined(a, b, c)
  real, dimension(10) :: a,b,c
  !dir$ myloop_directive_1
  !dir$ myloop_directive_2
  !$acc parallel loop
  do i=1,N
    a(i) = b(i) + c(i)
  enddo
end subroutine
! CHECK-LABEL: test_before_acc_combined
! CHECK: acc.parallel combined(loop)

subroutine test_after_acc_combined(a, b, c)
  real, dimension(10) :: a,b,c
  !$acc parallel loop
  !dir$ myloop_directive_1
  !dir$ myloop_directive_2
  do i=1,N
    a(i) = b(i) + c(i)
  enddo
end subroutine
! CHECK-LABEL: test_after_acc_combined
! CHECK: acc.parallel combined(loop)


subroutine test_vector_always_after_acc(a, b, c)
  real, dimension(10) :: a,b,c
  !$acc loop
  !dir$ vector always
  do i=1,N
    a(i) = b(i) + c(i)
  enddo
end subroutine
! CHECK-LABEL: test_vector_always_after_acc
! CHECK: acc.loop

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
! CHECK-LABEL: test_vector_always_before_acc
! CHECK: acc.loop