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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgomp/] [testsuite/] [libgomp.fortran/] [vla3.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
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
!$omp parallel default (none) shared (c, d, e, f, g, h, i, j, k) &
39
!$omp & shared (s, t, u, v) reduction (.or.:l) num_threads (6) &
40
!$omp private (p, q, r, w, x, y)
41
    l = l .or. c .ne. 'abcdefghijkl'
42
    l = l .or. d .ne. 'ABCDEFG'
43
    l = l .or. s .ne. 'PQRSTUV'
44
    do 100, p = 1, 2
45
      do 100, q = 3, 7
46
        do 100, r = 1, 7
47
          if (q .lt. 6) l = l .or. e(p, q, r) .ne. 5 + p + q + 2 * r
48
          l = l .or. f(p, q, r) .ne. 25 + p + q + 2 * r
49
          if (r .lt. 6 .and. q + r .le. 8) l = l .or. g(r, q) .ne. '0123456789AB'
50
          if (r .lt. 6 .and. q + r .gt. 8) l = l .or. g(r, q) .ne. '9876543210ZY'
51
          if (r .lt. 6 .and. q + r .le. 8) l = l .or. h(r, q) .ne. '0123456'
52
          if (r .lt. 6 .and. q + r .gt. 8) l = l .or. h(r, q) .ne. '9876543'
53
          if (q .lt. 6) l = l .or. t(p, q, r) .ne. -10 + p - q + 2 * r
54
          l = l .or. u(p, q, r) .ne. 30 - p + q - 2 * r
55
          if (r .lt. 6 .and. q + r .le. 8) l = l .or. v(r, q) .ne. '_+|/Oo_'
56
          if (r .lt. 6 .and. q + r .gt. 8) l = l .or. v(r, q) .ne. '///|||!'
57
100 continue
58
    do 101, p = 3, 5
59
      do 101, q = 2, 6
60
        do 101, r = 1, 7
61
          l = l .or. i(p - 2, q - 1, r) .ne. 7.5 * p * q * r
62
          l = l .or. j(p, q + 3, r + 6) .ne. 9.5 * p * q * r
63
101 continue
64
    do 102, p = 1, 5
65
      do 102, q = 4, 6
66
        l = l .or. k(p, 1, q - 3) .ne. 19 + p + 7 + 3 * q
67
102 continue
68
    do 110 z = 0, omp_get_num_threads () - 1
69
!$omp barrier
70
      x = omp_get_thread_num ()
71
      w = ''
72
      if (z .eq. 0) w = 'thread0thr_number_0THREAD0THR_NUMBER_0'
73
      if (z .eq. 1) w = 'thread1thr_number_1THREAD1THR_NUMBER_1'
74
      if (z .eq. 2) w = 'thread2thr_number_2THREAD2THR_NUMBER_2'
75
      if (z .eq. 3) w = 'thread3thr_number_3THREAD3THR_NUMBER_3'
76
      if (z .eq. 4) w = 'thread4thr_number_4THREAD4THR_NUMBER_4'
77
      if (z .eq. 5) w = 'thread5thr_number_5THREAD5THR_NUMBER_5'
78
      if (x .eq. z) then
79
        c = w(8:19)
80
        d = w(1:7)
81
        forall (p = 1:2, q = 3:5, r = 1:7) e(p, q, r) = 5 * x + p + q + 2 * r
82
        forall (p = 1:2, q = 3:7, r = 1:7) f(p, q, r) = 25 * x + p + q + 2 * r
83
        forall (p = 1:5, q = 3:7, p + q .le. 8) g(p, q) = w(8:19)
84
        forall (p = 1:5, q = 3:7, p + q .gt. 8) g(p, q) = w(27:38)
85
        forall (p = 1:5, q = 3:7, p + q .le. 8) h(p, q) = w(1:7)
86
        forall (p = 1:5, q = 3:7, p + q .gt. 8) h(p, q) = w(20:26)
87
        forall (p = 3:5, q = 2:6, r = 1:7) i(p - 2, q - 1, r) = (7.5 + x) * p * q * r
88
        forall (p = 3:5, q = 2:6, r = 1:7) j(p, q + 3, r + 6) = (9.5 + x) * p * q * r
89
        forall (p = 1:5, q = 7:7, r = 4:6) k(p, q - 6, r - 3) = 19 + x + p + q + 3 * r
90
        s = w(20:26)
91
        forall (p = 1:2, q = 3:5, r = 1:7) t(p, q, r) = -10 + x + p - q + 2 * r
92
        forall (p = 1:2, q = 3:7, r = 1:7) u(p, q, r) = 30 - x - p + q - 2 * r
93
        forall (p = 1:5, q = 3:7, p + q .le. 8) v(p, q) = w(1:7)
94
        forall (p = 1:5, q = 3:7, p + q .gt. 8) v(p, q) = w(20:26)
95
      end if
96
!$omp barrier
97
      x = z
98
      y = ''
99
      if (x .eq. 0) y = '0'
100
      if (x .eq. 1) y = '1'
101
      if (x .eq. 2) y = '2'
102
      if (x .eq. 3) y = '3'
103
      if (x .eq. 4) y = '4'
104
      if (x .eq. 5) y = '5'
105
      l = l .or. w(7:7) .ne. y
106
      l = l .or. w(19:19) .ne. y
107
      l = l .or. w(26:26) .ne. y
108
      l = l .or. w(38:38) .ne. y
109
      l = l .or. c .ne. w(8:19)
110
      l = l .or. d .ne. w(1:7)
111
      l = l .or. s .ne. w(20:26)
112
      do 103, p = 1, 2
113
        do 103, q = 3, 7
114
          do 103, r = 1, 7
115
            if (q .lt. 6) l = l .or. e(p, q, r) .ne. 5 * x + p + q + 2 * r
116
            l = l .or. f(p, q, r) .ne. 25 * x + p + q + 2 * r
117
            if (r .lt. 6 .and. q + r .le. 8) l = l .or. g(r, q) .ne. w(8:19)
118
            if (r .lt. 6 .and. q + r .gt. 8) l = l .or. g(r, q) .ne. w(27:38)
119
            if (r .lt. 6 .and. q + r .le. 8) l = l .or. h(r, q) .ne. w(1:7)
120
            if (r .lt. 6 .and. q + r .gt. 8) l = l .or. h(r, q) .ne. w(20:26)
121
            if (q .lt. 6) l = l .or. t(p, q, r) .ne. -10 + x + p - q + 2 * r
122
            l = l .or. u(p, q, r) .ne. 30 - x - p + q - 2 * r
123
            if (r .lt. 6 .and. q + r .le. 8) l = l .or. v(r, q) .ne. w(1:7)
124
            if (r .lt. 6 .and. q + r .gt. 8) l = l .or. v(r, q) .ne. w(20:26)
125
103   continue
126
      do 104, p = 3, 5
127
        do 104, q = 2, 6
128
          do 104, r = 1, 7
129
            l = l .or. i(p - 2, q - 1, r) .ne. (7.5 + x) * p * q * r
130
            l = l .or. j(p, q + 3, r + 6) .ne. (9.5 + x) * p * q * r
131
104   continue
132
      do 105, p = 1, 5
133
        do 105, q = 4, 6
134
          l = l .or. k(p, 1, q - 3) .ne. 19 + x + p + 7 + 3 * q
135
105   continue
136
110 continue
137
    call check (size (e, 1), 2, l)
138
    call check (size (e, 2), 3, l)
139
    call check (size (e, 3), 7, l)
140
    call check (size (e), 42, l)
141
    call check (size (f, 1), 2, l)
142
    call check (size (f, 2), 5, l)
143
    call check (size (f, 3), 7, l)
144
    call check (size (f), 70, l)
145
    call check (size (g, 1), 5, l)
146
    call check (size (g, 2), 5, l)
147
    call check (size (g), 25, l)
148
    call check (size (h, 1), 5, l)
149
    call check (size (h, 2), 5, l)
150
    call check (size (h), 25, l)
151
    call check (size (i, 1), 3, l)
152
    call check (size (i, 2), 5, l)
153
    call check (size (i, 3), 7, l)
154
    call check (size (i), 105, l)
155
    call check (size (j, 1), 4, l)
156
    call check (size (j, 2), 5, l)
157
    call check (size (j, 3), 7, l)
158
    call check (size (j), 140, l)
159
    call check (size (k, 1), 5, l)
160
    call check (size (k, 2), 1, l)
161
    call check (size (k, 3), 3, l)
162
    call check (size (k), 15, l)
163
!$omp end parallel
164
    if (l) call abort
165
  end subroutine foo
166
 
167
  subroutine test
168
    character (len = 12) :: c
169
    character (len = 7) :: d
170
    integer, dimension (2, 3:5, 7) :: e
171
    integer, dimension (2, 3:7, 7) :: f
172
    character (len = 12), dimension (5, 3:7) :: g
173
    character (len = 7), dimension (5, 3:7) :: h
174
    real, dimension (3:5, 2:6, 1:7) :: i
175
    double precision, dimension (3:6, 2:6, 1:7) :: j
176
    integer, dimension (1:5, 7:7, 4:6) :: k
177
    integer :: p, q, r
178
    c = 'abcdefghijkl'
179
    d = 'ABCDEFG'
180
    forall (p = 1:2, q = 3:5, r = 1:7) e(p, q, r) = 5 + p + q + 2 * r
181
    forall (p = 1:2, q = 3:7, r = 1:7) f(p, q, r) = 25 + p + q + 2 * r
182
    forall (p = 1:5, q = 3:7, p + q .le. 8) g(p, q) = '0123456789AB'
183
    forall (p = 1:5, q = 3:7, p + q .gt. 8) g(p, q) = '9876543210ZY'
184
    forall (p = 1:5, q = 3:7, p + q .le. 8) h(p, q) = '0123456'
185
    forall (p = 1:5, q = 3:7, p + q .gt. 8) h(p, q) = '9876543'
186
    forall (p = 3:5, q = 2:6, r = 1:7) i(p, q, r) = 7.5 * p * q * r
187
    forall (p = 3:6, q = 2:6, r = 1:7) j(p, q, r) = 9.5 * p * q * r
188
    forall (p = 1:5, q = 7:7, r = 4:6) k(p, q, r) = 19 + p + q + 3 * r
189
    call foo (c, d, e, f, g, h, i, j, k, 7)
190
  end subroutine test
191
end

powered by: WebSVN 2.1.0

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