rs6000.md (floor<mode>2): Add support for IEEE 128-bit round to integer instructions.
[official-gcc.git] / libgomp / testsuite / libgomp.oacc-fortran / data-3.f90
blob9868cb0da9d2ef5fe8664f874521d3b0da919ede
1 ! { dg-do run }
3 program asyncwait
4 real, allocatable :: a(:), b(:), c(:), d(:), e(:)
5 integer i, N
7 N = 64
9 allocate (a(N))
10 allocate (b(N))
11 allocate (c(N))
12 allocate (d(N))
13 allocate (e(N))
15 a(:) = 3.0
16 b(:) = 0.0
18 !$acc enter data copyin (a(1:N)) copyin (b(1:N)) copyin (N) async
20 !$acc parallel async wait
21 do i = 1, N
22 b(i) = a(i)
23 end do
24 !$acc end parallel
26 !$acc wait
27 !$acc exit data copyout (a(1:N)) copyout (b(1:N))
29 do i = 1, N
30 if (a(i) .ne. 3.0) call abort
31 if (b(i) .ne. 3.0) call abort
32 end do
34 a(:) = 2.0
35 b(:) = 0.0
37 !$acc enter data copyin (a(1:N)) copyin (b(1:N)) async (1)
39 !$acc parallel async (1) wait (1)
40 do i = 1, N
41 b(i) = a(i)
42 end do
43 !$acc end parallel
45 !$acc wait (1)
46 !$acc exit data copyout (a(1:N)) copyout (b(1:N))
48 do i = 1, N
49 if (a(i) .ne. 2.0) call abort
50 if (b(i) .ne. 2.0) call abort
51 end do
53 a(:) = 3.0
54 b(:) = 0.0
55 c(:) = 0.0
56 d(:) = 0.0
58 !$acc enter data copyin (a(1:N)) create (b(1:N)) create (c(1:N)) create (d(1:N))
60 !$acc parallel async (1)
61 do i = 1, N
62 b(i) = (a(i) * a(i) * a(i)) / a(i)
63 end do
64 !$acc end parallel
66 !$acc parallel async (1)
67 do i = 1, N
68 c(i) = (a(i) * 4) / a(i)
69 end do
70 !$acc end parallel
72 !$acc parallel async (1)
73 do i = 1, N
74 d(i) = ((a(i) * a(i) + a(i)) / a(i)) - a(i)
75 end do
76 !$acc end parallel
78 !$acc wait (1)
79 !$acc exit data copyout (a(1:N)) copyout (b(1:N)) copyout (c(1:N)) copyout (d(1:N))
81 do i = 1, N
82 if (a(i) .ne. 3.0) call abort
83 if (b(i) .ne. 9.0) call abort
84 if (c(i) .ne. 4.0) call abort
85 if (d(i) .ne. 1.0) call abort
86 end do
88 a(:) = 2.0
89 b(:) = 0.0
90 c(:) = 0.0
91 d(:) = 0.0
92 e(:) = 0.0
94 !$acc enter data copyin (a(1:N)) create (b(1:N)) create (c(1:N)) create (d(1:N)) copyin (e(1:N))
96 !$acc parallel async (1)
97 do i = 1, N
98 b(i) = (a(i) * a(i) * a(i)) / a(i)
99 end do
100 !$acc end parallel
102 !$acc parallel async (1)
103 do i = 1, N
104 c(i) = (a(i) * 4) / a(i)
105 end do
106 !$acc end parallel
108 !$acc parallel async (1)
109 do i = 1, N
110 d(i) = ((a(i) * a(i) + a(i)) / a(i)) - a(i)
111 end do
112 !$acc end parallel
114 !$acc parallel wait (1) async (1)
115 do i = 1, N
116 e(i) = a(i) + b(i) + c(i) + d(i)
117 end do
118 !$acc end parallel
120 !$acc wait (1)
121 !$acc exit data copyout (a(1:N)) copyout (b(1:N)) copyout (c(1:N)) copyout (d(1:N)) copyout (e(1:N))
122 !$acc exit data delete (N)
124 do i = 1, N
125 if (a(i) .ne. 2.0) call abort
126 if (b(i) .ne. 4.0) call abort
127 if (c(i) .ne. 4.0) call abort
128 if (d(i) .ne. 1.0) call abort
129 if (e(i) .ne. 11.0) call abort
130 end do
131 end program asyncwait