Skip gnat.dg/prot7.adb on hppa.
[official-gcc.git] / libgomp / testsuite / libgomp.c / linear-2.c
blobfd549a894905aa1e88ebe218169db2f72eb052aa
1 /* PR middle-end/106548. */
2 /* { dg-additional-options "-msse2" { target sse2_runtime } } */
3 /* { dg-additional-options "-mavx" { target avx_runtime } } */
5 int a[256];
7 __attribute__((noinline, noclone)) int
8 f1 (int i)
10 #pragma omp parallel for simd linear (i: 4)
11 for (int j = 16; j < 64; j++)
13 a[i] = j;
14 i += 4;
16 return i;
19 __attribute__((noinline, noclone)) short int
20 f2 (short int i, char k)
22 #pragma omp parallel for simd linear (i: k + 1)
23 for (long j = 16; j < 64; j++)
25 a[i] = j;
26 i += 4;
28 return i;
31 __attribute__((noinline, noclone)) long long int
32 f3 (long long int i, long long int k)
34 #pragma omp parallel for simd linear (i: k)
35 for (short j = 16; j < 64; j++)
37 a[i] = j;
38 i += 4;
40 return i;
43 __attribute__((noinline, noclone)) int
44 f4 (int i)
46 #pragma omp parallel for simd linear (i: 4) schedule(static, 3)
47 for (int j = 16; j < 64; j++)
49 a[i] = j;
50 i += 4;
52 return i;
55 __attribute__((noinline, noclone)) short int
56 f5 (short int i, char k)
58 #pragma omp parallel for simd linear (i: k + 1) schedule(static, 5)
59 for (long j = 16; j < 64; j++)
61 a[i] = j;
62 i += 4;
64 return i;
67 __attribute__((noinline, noclone)) long long int
68 f6 (long long int i, long long int k)
70 #pragma omp parallel for simd linear (i: k) schedule(static, 7)
71 for (short j = 16; j < 64; j++)
73 a[i] = j;
74 i += 4;
76 return i;
79 __attribute__((noinline, noclone)) int
80 f7 (int i)
82 #pragma omp parallel for simd linear (i: 4) schedule(dynamic, 3)
83 for (int j = 16; j < 64; j++)
85 a[i] = j;
86 i += 4;
88 return i;
91 __attribute__((noinline, noclone)) short int
92 f8 (short int i, char k)
94 #pragma omp parallel for simd linear (i: k + 1) schedule(dynamic, 5)
95 for (long j = 16; j < 64; j++)
97 a[i] = j;
98 i += 4;
100 return i;
103 __attribute__((noinline, noclone)) long long int
104 f9 (long long int i, long long int k)
106 #pragma omp parallel for simd linear (i: k) schedule(dynamic, 7)
107 for (short j = 16; j < 64; j++)
109 a[i] = j;
110 i += 4;
112 return i;
115 __attribute__((noinline, noclone)) int
116 f10 (int i, long step)
118 #pragma omp parallel for simd linear (i: 4)
119 for (int j = 16; j < 112; j += step)
121 a[i] = j / 2 + 8;
122 i += 4;
124 return i;
127 __attribute__((noinline, noclone)) short int
128 f11 (short int i, char k, char step)
130 #pragma omp parallel for simd linear (i: k + 1)
131 for (long j = 16; j < 112; j += step)
133 a[i] = j / 2 + 8;
134 i += 4;
136 return i;
139 __attribute__((noinline, noclone)) long long int
140 f12 (long long int i, long long int k, int step)
142 #pragma omp parallel for simd linear (i: k)
143 for (short j = 16; j < 112; j += step)
145 a[i] = j / 2 + 8;
146 i += 4;
148 return i;
151 __attribute__((noinline, noclone)) int
152 f13 (int i, long long int step)
154 #pragma omp parallel for simd linear (i: 4) schedule(static, 3)
155 for (int j = 16; j < 112; j += step)
157 a[i] = j / 2 + 8;
158 i += 4;
160 return i;
163 __attribute__((noinline, noclone)) short int
164 f14 (short int i, char k, int step)
166 #pragma omp parallel for simd linear (i: k + 1) schedule(static, 5)
167 for (long j = 16; j < 112; j += step)
169 a[i] = j / 2 + 8;
170 i += 4;
172 return i;
175 __attribute__((noinline, noclone)) long long int
176 f15 (long long int i, long long int k, long int step)
178 #pragma omp parallel for simd linear (i: k) schedule(static, 7)
179 for (short j = 16; j < 112; j += step)
181 a[i] = j / 2 + 8;
182 i += 4;
184 return i;
187 __attribute__((noinline, noclone)) int
188 f16 (int i, long long int step)
190 #pragma omp parallel for simd linear (i: 4) schedule(dynamic, 3)
191 for (int j = 16; j < 112; j += step)
193 a[i] = j / 2 + 8;
194 i += 4;
196 return i;
199 __attribute__((noinline, noclone)) short int
200 f17 (short int i, char k, int step)
202 #pragma omp parallel for simd linear (i: k + 1) schedule(dynamic, 5)
203 for (long j = 16; j < 112; j += step)
205 a[i] = j / 2 + 8;
206 i += 4;
208 return i;
211 __attribute__((noinline, noclone)) long long int
212 f18 (long long int i, long long int k, long int step)
214 #pragma omp parallel for simd linear (i: k) schedule(dynamic, 7)
215 for (short j = 16; j < 112; j += step)
217 a[i] = j / 2 + 8;
218 i += 4;
220 return i;
224 main ()
226 #define TEST(x) \
227 if (x != 8 + 48 * 4) \
228 __builtin_abort (); \
229 for (int i = 0; i < 256; i++) \
230 if (a[i] != (((i & 3) == 0 && i >= 8 \
231 && i < 8 + 48 * 4) \
232 ? ((i - 8) / 4) + 16 : 0)) \
233 __builtin_abort (); \
234 __builtin_memset (a, 0, sizeof (a))
235 TEST (f1 (8));
236 TEST (f2 (8, 3));
237 TEST (f3 (8LL, 4LL));
238 TEST (f4 (8));
239 TEST (f5 (8, 3));
240 TEST (f6 (8LL, 4LL));
241 TEST (f7 (8));
242 TEST (f8 (8, 3));
243 TEST (f9 (8LL, 4LL));
244 TEST (f10 (8, 2));
245 TEST (f11 (8, 3, 2));
246 TEST (f12 (8LL, 4LL, 2));
247 TEST (f13 (8, 2));
248 TEST (f14 (8, 3, 2));
249 TEST (f15 (8LL, 4LL, 2));
250 TEST (f16 (8, 2));
251 TEST (f17 (8, 3, 2));
252 TEST (f18 (8LL, 4LL, 2));
253 return 0;