1! OpenACC 'routine' directives inside a Fortran module.
2
3! { dg-additional-options "-fopt-info-optimized-omp" }
4
5module routine_module_mod_1
6contains
7  subroutine s_1
8    implicit none
9    !$acc routine
10
11    integer :: i
12
13    !$acc loop ! { dg-message "optimized: assigned OpenACC seq loop parallelism" }
14    ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 }
15    do i = 1, 3
16    end do
17  end subroutine s_1
18
19  subroutine s_2
20    implicit none
21    !$acc routine (s_2) seq
22
23    integer :: i
24
25    !$acc loop ! { dg-message "optimized: assigned OpenACC seq loop parallelism" }
26    ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 }
27    do i = 1, 3
28    end do
29  end subroutine s_2
30
31  subroutine v_1
32    implicit none
33    !$acc routine vector
34
35    integer :: i
36
37    !$acc loop ! { dg-message "optimized: assigned OpenACC vector loop parallelism" }
38    do i = 1, 3
39    end do
40  end subroutine v_1
41
42  subroutine w_1
43    implicit none
44    !$acc routine (w_1) worker
45
46    integer :: i
47
48    !$acc loop ! { dg-message "optimized: assigned OpenACC worker vector loop parallelism" }
49    do i = 1, 3
50    end do
51  end subroutine w_1
52
53  subroutine g_1
54    implicit none
55    !$acc routine gang
56
57    integer :: i
58
59    !$acc loop ! { dg-message "optimized: assigned OpenACC gang vector loop parallelism" }
60    do i = 1, 3
61    end do
62  end subroutine g_1
63
64  subroutine pl_1
65    implicit none
66
67    integer :: i
68
69    !$acc parallel loop ! { dg-message "optimized: assigned OpenACC seq loop parallelism" }
70    ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 }
71    do i = 1, 3
72       call s_1 ! { dg-message "optimized: assigned OpenACC seq loop parallelism" }
73       call s_2 ! { dg-message "optimized: assigned OpenACC seq loop parallelism" }
74       call v_1 ! { dg-message "optimized: assigned OpenACC vector loop parallelism" }
75       call w_1 ! { dg-message "optimized: assigned OpenACC worker vector loop parallelism" }
76       call g_1 ! { dg-message "optimized: assigned OpenACC gang worker vector loop parallelism" }
77    end do
78  end subroutine pl_1
79end module routine_module_mod_1
80