OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgomp/] [testsuite/] [libgomp.fortran/] [vla5.f90] - Blame information for rev 735

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 735 jeremybenn
! { dg-do run }
2
 
3
  call test
4
contains
5
  subroutine check (x, y, l)
6
    integer :: x, y
7
    logical :: l
8
    l = l .or. x .ne. y
9
  end subroutine check
10
 
11
  subroutine foo (c, d, e, f, g, h, i, j, k, n)
12
    use omp_lib
13
    integer :: n
14
    character (len = *) :: c
15
    character (len = n) :: d
16
    integer, dimension (2, 3:5, n) :: e
17
    integer, dimension (2, 3:n, n) :: f
18
    character (len = *), dimension (5, 3:n) :: g
19
    character (len = n), dimension (5, 3:n) :: h
20
    real, dimension (:, :, :) :: i
21
    double precision, dimension (3:, 5:, 7:) :: j
22
    integer, dimension (:, :, :) :: k
23
    logical :: l
24
    integer :: p, q, r
25
    character (len = n) :: s
26
    integer, dimension (2, 3:5, n) :: t
27
    integer, dimension (2, 3:n, n) :: u
28
    character (len = n), dimension (5, 3:n) :: v
29
    character (len = 2 * n + 24) :: w
30
    integer :: x, z, z2
31
    character (len = 1) :: y
32
    s = 'PQRSTUV'
33
    forall (p = 1:2, q = 3:5, r = 1:7) t(p, q, r) = -10 + p - q + 2 * r
34
    forall (p = 1:2, q = 3:7, r = 1:7) u(p, q, r) = 30 - p + q - 2 * r
35
    forall (p = 1:5, q = 3:7, p + q .le. 8) v(p, q) = '_+|/Oo_'
36
    forall (p = 1:5, q = 3:7, p + q .gt. 8) v(p, q) = '///|||!'
37
    l = .false.
38
    call omp_set_dynamic (.false.)
39
    call omp_set_num_threads (6)
40
!$omp parallel do default (none) lastprivate (c, d, e, f, g, h, i, j, k) &
41
!$omp & lastprivate (s, t, u, v) reduction (.or.:l) num_threads (6) &
42
!$omp private (p, q, r, w, x, y) schedule (static) shared (z2)
43
    do 110 z = 0, omp_get_num_threads () - 1
44
    if (omp_get_thread_num () .eq. 0) z2 = omp_get_num_threads ()
45
    x = omp_get_thread_num ()
46
    w = ''
47
    if (x .eq. 0) w = 'thread0thr_number_0THREAD0THR_NUMBER_0'
48
    if (x .eq. 1) w = 'thread1thr_number_1THREAD1THR_NUMBER_1'
49
    if (x .eq. 2) w = 'thread2thr_number_2THREAD2THR_NUMBER_2'
50
    if (x .eq. 3) w = 'thread3thr_number_3THREAD3THR_NUMBER_3'
51
    if (x .eq. 4) w = 'thread4thr_number_4THREAD4THR_NUMBER_4'
52
    if (x .eq. 5) w = 'thread5thr_number_5THREAD5THR_NUMBER_5'
53
    c = w(8:19)
54
    d = w(1:7)
55
    forall (p = 1:2, q = 3:5, r = 1:7) e(p, q, r) = 5 * x + p + q + 2 * r
56
    forall (p = 1:2, q = 3:7, r = 1:7) f(p, q, r) = 25 * x + p + q + 2 * r
57
    forall (p = 1:5, q = 3:7, p + q .le. 8) g(p, q) = w(8:19)
58
    forall (p = 1:5, q = 3:7, p + q .gt. 8) g(p, q) = w(27:38)
59
    forall (p = 1:5, q = 3:7, p + q .le. 8) h(p, q) = w(1:7)
60
    forall (p = 1:5, q = 3:7, p + q .gt. 8) h(p, q) = w(20:26)
61
    forall (p = 3:5, q = 2:6, r = 1:7) i(p - 2, q - 1, r) = (7.5 + x) * p * q * r
62
    forall (p = 3:5, q = 2:6, r = 1:7) j(p, q + 3, r + 6) = (9.5 + x) * p * q * r
63
    forall (p = 1:5, q = 7:7, r = 4:6) k(p, q - 6, r - 3) = 19 + x + p + q + 3 * r
64
    s = w(20:26)
65
    forall (p = 1:2, q = 3:5, r = 1:7) t(p, q, r) = -10 + x + p - q + 2 * r
66
    forall (p = 1:2, q = 3:7, r = 1:7) u(p, q, r) = 30 - x - p + q - 2 * r
67
    forall (p = 1:5, q = 3:7, p + q .le. 8) v(p, q) = w(1:7)
68
    forall (p = 1:5, q = 3:7, p + q .gt. 8) v(p, q) = w(20:26)
69
!$omp barrier           ! { dg-warning "may not be closely nested" }
70
    y = ''
71
    if (x .eq. 0) y = '0'
72
    if (x .eq. 1) y = '1'
73
    if (x .eq. 2) y = '2'
74
    if (x .eq. 3) y = '3'
75
    if (x .eq. 4) y = '4'
76
    if (x .eq. 5) y = '5'
77
    l = l .or. w(7:7) .ne. y
78
    l = l .or. w(19:19) .ne. y
79
    l = l .or. w(26:26) .ne. y
80
    l = l .or. w(38:38) .ne. y
81
    l = l .or. c .ne. w(8:19)
82
    l = l .or. d .ne. w(1:7)
83
    l = l .or. s .ne. w(20:26)
84
    do 103, p = 1, 2
85
      do 103, q = 3, 7
86
        do 103, r = 1, 7
87
          if (q .lt. 6) l = l .or. e(p, q, r) .ne. 5 * x + p + q + 2 * r
88
          l = l .or. f(p, q, r) .ne. 25 * x + p + q + 2 * r
89
          if (r .lt. 6 .and. q + r .le. 8) l = l .or. g(r, q) .ne. w(8:19)
90
          if (r .lt. 6 .and. q + r .gt. 8) l = l .or. g(r, q) .ne. w(27:38)
91
          if (r .lt. 6 .and. q + r .le. 8) l = l .or. h(r, q) .ne. w(1:7)
92
          if (r .lt. 6 .and. q + r .gt. 8) l = l .or. h(r, q) .ne. w(20:26)
93
          if (q .lt. 6) l = l .or. t(p, q, r) .ne. -10 + x + p - q + 2 * r
94
          l = l .or. u(p, q, r) .ne. 30 - x - p + q - 2 * r
95
          if (r .lt. 6 .and. q + r .le. 8) l = l .or. v(r, q) .ne. w(1:7)
96
          if (r .lt. 6 .and. q + r .gt. 8) l = l .or. v(r, q) .ne. w(20:26)
97
103 continue
98
    do 104, p = 3, 5
99
      do 104, q = 2, 6
100
        do 104, r = 1, 7
101
          l = l .or. i(p - 2, q - 1, r) .ne. (7.5 + x) * p * q * r
102
          l = l .or. j(p, q + 3, r + 6) .ne. (9.5 + x) * p * q * r
103
104 continue
104
    do 105, p = 1, 5
105
      do 105, q = 4, 6
106
        l = l .or. k(p, 1, q - 3) .ne. 19 + x + p + 7 + 3 * q
107
105 continue
108
    call check (size (e, 1), 2, l)
109
    call check (size (e, 2), 3, l)
110
    call check (size (e, 3), 7, l)
111
    call check (size (e), 42, l)
112
    call check (size (f, 1), 2, l)
113
    call check (size (f, 2), 5, l)
114
    call check (size (f, 3), 7, l)
115
    call check (size (f), 70, l)
116
    call check (size (g, 1), 5, l)
117
    call check (size (g, 2), 5, l)
118
    call check (size (g), 25, l)
119
    call check (size (h, 1), 5, l)
120
    call check (size (h, 2), 5, l)
121
    call check (size (h), 25, l)
122
    call check (size (i, 1), 3, l)
123
    call check (size (i, 2), 5, l)
124
    call check (size (i, 3), 7, l)
125
    call check (size (i), 105, l)
126
    call check (size (j, 1), 4, l)
127
    call check (size (j, 2), 5, l)
128
    call check (size (j, 3), 7, l)
129
    call check (size (j), 140, l)
130
    call check (size (k, 1), 5, l)
131
    call check (size (k, 2), 1, l)
132
    call check (size (k, 3), 3, l)
133
    call check (size (k), 15, l)
134
110 continue
135
!$omp end parallel do
136
    if (l) call abort
137
    if (z2 == 6) then
138
      x = 5
139
      w = 'thread5thr_number_5THREAD5THR_NUMBER_5'
140
      y = '5'
141
      l = l .or. w(7:7) .ne. y
142
      l = l .or. w(19:19) .ne. y
143
      l = l .or. w(26:26) .ne. y
144
      l = l .or. w(38:38) .ne. y
145
      l = l .or. c .ne. w(8:19)
146
      l = l .or. d .ne. w(1:7)
147
      l = l .or. s .ne. w(20:26)
148
      do 113, p = 1, 2
149
        do 113, q = 3, 7
150
          do 113, r = 1, 7
151
            if (q .lt. 6) l = l .or. e(p, q, r) .ne. 5 * x + p + q + 2 * r
152
            l = l .or. f(p, q, r) .ne. 25 * x + p + q + 2 * r
153
            if (r .lt. 6 .and. q + r .le. 8) l = l .or. g(r, q) .ne. w(8:19)
154
            if (r .lt. 6 .and. q + r .gt. 8) l = l .or. g(r, q) .ne. w(27:38)
155
            if (r .lt. 6 .and. q + r .le. 8) l = l .or. h(r, q) .ne. w(1:7)
156
            if (r .lt. 6 .and. q + r .gt. 8) l = l .or. h(r, q) .ne. w(20:26)
157
            if (q .lt. 6) l = l .or. t(p, q, r) .ne. -10 + x + p - q + 2 * r
158
            l = l .or. u(p, q, r) .ne. 30 - x - p + q - 2 * r
159
            if (r .lt. 6 .and. q + r .le. 8) l = l .or. v(r, q) .ne. w(1:7)
160
            if (r .lt. 6 .and. q + r .gt. 8) l = l .or. v(r, q) .ne. w(20:26)
161
113   continue
162
      do 114, p = 3, 5
163
        do 114, q = 2, 6
164
          do 114, r = 1, 7
165
            l = l .or. i(p - 2, q - 1, r) .ne. (7.5 + x) * p * q * r
166
            l = l .or. j(p, q + 3, r + 6) .ne. (9.5 + x) * p * q * r
167
114   continue
168
      do 115, p = 1, 5
169
        do 115, q = 4, 6
170
          l = l .or. k(p, 1, q - 3) .ne. 19 + x + p + 7 + 3 * q
171
115   continue
172
      if (l) call abort
173
    end if
174
  end subroutine foo
175
 
176
  subroutine test
177
    character (len = 12) :: c
178
    character (len = 7) :: d
179
    integer, dimension (2, 3:5, 7) :: e
180
    integer, dimension (2, 3:7, 7) :: f
181
    character (len = 12), dimension (5, 3:7) :: g
182
    character (len = 7), dimension (5, 3:7) :: h
183
    real, dimension (3:5, 2:6, 1:7) :: i
184
    double precision, dimension (3:6, 2:6, 1:7) :: j
185
    integer, dimension (1:5, 7:7, 4:6) :: k
186
    integer :: p, q, r
187
    c = 'abcdefghijkl'
188
    d = 'ABCDEFG'
189
    forall (p = 1:2, q = 3:5, r = 1:7) e(p, q, r) = 5 + p + q + 2 * r
190
    forall (p = 1:2, q = 3:7, r = 1:7) f(p, q, r) = 25 + p + q + 2 * r
191
    forall (p = 1:5, q = 3:7, p + q .le. 8) g(p, q) = '0123456789AB'
192
    forall (p = 1:5, q = 3:7, p + q .gt. 8) g(p, q) = '9876543210ZY'
193
    forall (p = 1:5, q = 3:7, p + q .le. 8) h(p, q) = '0123456'
194
    forall (p = 1:5, q = 3:7, p + q .gt. 8) h(p, q) = '9876543'
195
    forall (p = 3:5, q = 2:6, r = 1:7) i(p, q, r) = 7.5 * p * q * r
196
    forall (p = 3:6, q = 2:6, r = 1:7) j(p, q, r) = 9.5 * p * q * r
197
    forall (p = 1:5, q = 7:7, r = 4:6) k(p, q, r) = 19 + p + q + 3 * r
198
    call foo (c, d, e, f, g, h, i, j, k, 7)
199
  end subroutine test
200
end

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.