aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/goacc/routine-module-mod-1.f90
blob: 10e109675dcc399e86c3baa06c1c89722b8332d3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
! OpenACC 'routine' directives inside a Fortran module.

! { dg-additional-options "-fopt-info-optimized-omp" }

! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
! aspects of that functionality.

module routine_module_mod_1
contains
  subroutine s_1
    implicit none
    !$acc routine

    integer :: i

    !$acc loop ! { dg-message "optimized: assigned OpenACC seq loop parallelism" }
    ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 }
    do i = 1, 3
    end do
  end subroutine s_1

  subroutine s_1_nh
    implicit none
    !$acc routine nohost

    integer :: i

    !$acc loop ! { dg-bogus "assigned OpenACC .* loop parallelism" }
    do i = 1, 3
    end do
  end subroutine s_1_nh

  subroutine s_2
    implicit none
    !$acc routine (s_2) seq

    integer :: i

    !$acc loop ! { dg-message "optimized: assigned OpenACC seq loop parallelism" }
    ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 }
    do i = 1, 3
    end do
  end subroutine s_2

  subroutine s_2_nh
    implicit none
    !$acc routine (s_2_nh) seq nohost

    integer :: i

    !$acc loop ! { dg-bogus "assigned OpenACC .* loop parallelism" }
    do i = 1, 3
    end do
  end subroutine s_2_nh

  subroutine v_1
    implicit none
    !$acc routine vector

    integer :: i

    !$acc loop ! { dg-message "optimized: assigned OpenACC vector loop parallelism" }
    do i = 1, 3
    end do
  end subroutine v_1

  subroutine v_1_nh
    implicit none
    !$acc routine vector nohost

    integer :: i

    !$acc loop ! { dg-bogus "assigned OpenACC .* loop parallelism" }
    do i = 1, 3
    end do
  end subroutine v_1_nh

  subroutine w_1
    implicit none
    !$acc routine (w_1) worker

    integer :: i

    !$acc loop ! { dg-message "optimized: assigned OpenACC worker vector loop parallelism" }
    do i = 1, 3
    end do
  end subroutine w_1

  subroutine w_1_nh
    implicit none
    !$acc routine (w_1_nh) worker nohost

    integer :: i

    !$acc loop ! { dg-bogus "assigned OpenACC .* loop parallelism" }
    do i = 1, 3
    end do
  end subroutine w_1_nh

  subroutine g_1
    implicit none
    !$acc routine gang
    ! { dg-bogus "\[Ww\]arning: region is worker partitioned but does not contain worker partitioned code" "TODO default 'gang' 'vector'" { xfail *-*-* } .-3 }

    integer :: i

    !$acc loop ! { dg-message "optimized: assigned OpenACC gang vector loop parallelism" }
    do i = 1, 3
    end do
  end subroutine g_1

  subroutine g_1_nh
    implicit none
    !$acc routine gang nohost

    integer :: i

    !$acc loop ! { dg-bogus "assigned OpenACC .* loop parallelism" }
    do i = 1, 3
    end do
  end subroutine g_1_nh

  subroutine pl_1
    implicit none

    integer :: i

    !$acc parallel loop ! { dg-message "optimized: assigned OpenACC seq loop parallelism" }
    ! { dg-warning "insufficient partitioning available to parallelize loop" "" { target *-*-* } .-1 }
    do i = 1, 3
       call s_1 ! { dg-message "optimized: assigned OpenACC seq loop parallelism" }
       call s_1_nh ! { dg-message "optimized: assigned OpenACC seq loop parallelism" }
       call s_2 ! { dg-message "optimized: assigned OpenACC seq loop parallelism" }
       call s_2_nh ! { dg-message "optimized: assigned OpenACC seq loop parallelism" }
       call v_1 ! { dg-message "optimized: assigned OpenACC vector loop parallelism" }
       call v_1_nh ! { dg-message "optimized: assigned OpenACC vector loop parallelism" }
       call w_1 ! { dg-message "optimized: assigned OpenACC worker vector loop parallelism" }
       call w_1_nh ! { dg-message "optimized: assigned OpenACC worker vector loop parallelism" }
       call g_1 ! { dg-message "optimized: assigned OpenACC gang worker vector loop parallelism" }
       call g_1_nh ! { dg-message "optimized: assigned OpenACC gang worker vector loop parallelism" }
    end do
  end subroutine pl_1
end module routine_module_mod_1