annotate gcc/testsuite/c-c++-common/gomp/ordered-1.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* { dg-do run } */
kono
parents:
diff changeset
2 /* { dg-options "-O2 -fopenmp-simd" } */
kono
parents:
diff changeset
3 /* { dg-additional-options "-msse2" { target sse2_runtime } } */
kono
parents:
diff changeset
4 /* { dg-additional-options "-mavx" { target avx_runtime } } */
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 #define N 1024
kono
parents:
diff changeset
7 extern
kono
parents:
diff changeset
8 #ifdef __cplusplus
kono
parents:
diff changeset
9 "C"
kono
parents:
diff changeset
10 #endif
kono
parents:
diff changeset
11 void abort (void);
kono
parents:
diff changeset
12
kono
parents:
diff changeset
13 int last;
kono
parents:
diff changeset
14
kono
parents:
diff changeset
15 void
kono
parents:
diff changeset
16 bar (unsigned char *a, int i, int safelen)
kono
parents:
diff changeset
17 {
kono
parents:
diff changeset
18 int j, k;
kono
parents:
diff changeset
19 if (i != last++)
kono
parents:
diff changeset
20 abort ();
kono
parents:
diff changeset
21 for (j = i - safelen - 32; j < i; j++)
kono
parents:
diff changeset
22 if (j >= 0 && a[j] != 2)
kono
parents:
diff changeset
23 break;
kono
parents:
diff changeset
24 if (j <= i - safelen || a[j] != 1)
kono
parents:
diff changeset
25 abort ();
kono
parents:
diff changeset
26 for (k = j; k < i + safelen + 32; k++)
kono
parents:
diff changeset
27 if (k >= N || a[k] != 1)
kono
parents:
diff changeset
28 break;
kono
parents:
diff changeset
29 if (k <= i || k > j + safelen)
kono
parents:
diff changeset
30 abort ();
kono
parents:
diff changeset
31 if (k < N && a[k] != 0)
kono
parents:
diff changeset
32 abort ();
kono
parents:
diff changeset
33 for (; k < i + safelen + 32; k++)
kono
parents:
diff changeset
34 if (k < N && a[k] != 0)
kono
parents:
diff changeset
35 abort ();
kono
parents:
diff changeset
36 }
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 static inline void
kono
parents:
diff changeset
39 foo (unsigned char *a, int i)
kono
parents:
diff changeset
40 {
kono
parents:
diff changeset
41 #pragma omp ordered simd
kono
parents:
diff changeset
42 bar (a, i, 64);
kono
parents:
diff changeset
43 }
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45 int
kono
parents:
diff changeset
46 main ()
kono
parents:
diff changeset
47 {
kono
parents:
diff changeset
48 unsigned char a[N], b[N];
kono
parents:
diff changeset
49 int i;
kono
parents:
diff changeset
50 #pragma omp simd
kono
parents:
diff changeset
51 for (i = 0; i < N; i++)
kono
parents:
diff changeset
52 a[i] = 0;
kono
parents:
diff changeset
53 #pragma omp simd safelen (64)
kono
parents:
diff changeset
54 for (i = 0; i < N; i++)
kono
parents:
diff changeset
55 {
kono
parents:
diff changeset
56 a[i]++;
kono
parents:
diff changeset
57 foo (a, i);
kono
parents:
diff changeset
58 a[i]++;
kono
parents:
diff changeset
59 }
kono
parents:
diff changeset
60 #pragma omp simd
kono
parents:
diff changeset
61 for (i = 0; i < N; i++)
kono
parents:
diff changeset
62 {
kono
parents:
diff changeset
63 a[i] = 0;
kono
parents:
diff changeset
64 b[i] = 0;
kono
parents:
diff changeset
65 }
kono
parents:
diff changeset
66 last = 0;
kono
parents:
diff changeset
67 #pragma omp simd safelen (32)
kono
parents:
diff changeset
68 for (i = 0; i < N; i++)
kono
parents:
diff changeset
69 {
kono
parents:
diff changeset
70 a[i]++;
kono
parents:
diff changeset
71 #pragma omp ordered simd
kono
parents:
diff changeset
72 bar (a, i, 32);
kono
parents:
diff changeset
73 a[i]++;
kono
parents:
diff changeset
74 }
kono
parents:
diff changeset
75 for (i = 0; i < N; i++)
kono
parents:
diff changeset
76 if (a[i] != 2)
kono
parents:
diff changeset
77 abort ();
kono
parents:
diff changeset
78 #pragma omp simd safelen (32)
kono
parents:
diff changeset
79 for (i = 1; i < N; i++)
kono
parents:
diff changeset
80 {
kono
parents:
diff changeset
81 #pragma omp ordered simd
kono
parents:
diff changeset
82 b[i] = b[i - 1] + 1;
kono
parents:
diff changeset
83 a[i]++;
kono
parents:
diff changeset
84 #pragma omp ordered simd
kono
parents:
diff changeset
85 a[i] += a[i - 1];
kono
parents:
diff changeset
86 }
kono
parents:
diff changeset
87 for (i = 0; i < N; i++)
kono
parents:
diff changeset
88 if (a[i] != (unsigned char) (2 + 3 * i) || b[i] != (unsigned char) i)
kono
parents:
diff changeset
89 abort ();
kono
parents:
diff changeset
90 return 0;
kono
parents:
diff changeset
91 }