Value Range: Add range op for builtin isnormal
[official-gcc.git] / gcc / testsuite / c-c++-common / gomp / tile-4.c
blobbcffbccf39e87851bdbcbd9ebfdd14369772736e
1 /* { dg-do run } */
2 /* { dg-options "-O0 -fopenmp-simd" } */
4 #include <stdio.h>
6 #define ASSERT_EQ(var, val) \
7 do \
8 { \
9 if ((var) != (val)) \
10 { \
11 fprintf (stderr, "%s:%d: Unexpected value %d, expected %d\n", \
12 __FILE__, __LINE__, (var), (val)); \
13 __builtin_abort (); \
14 } \
15 } \
16 while (0)
18 int
19 test1 (void)
21 int iter = 0;
22 int i;
23 #pragma omp tile sizes(3)
24 for (i = 0; i < 10; i = i + 2)
26 ASSERT_EQ (i, iter);
27 iter = iter + 2;
30 ASSERT_EQ (i, 10);
31 return iter;
34 int
35 test2 (void)
37 int iter = 0;
38 int i;
39 #pragma omp tile sizes(3)
40 for (i = 0; i < 10; i = i + 2)
42 ASSERT_EQ (i, iter);
43 iter = iter + 2;
46 ASSERT_EQ (i, 10);
47 return iter;
50 int
51 test3 (void)
53 int iter = 0;
54 int i;
55 #pragma omp tile sizes(8)
56 for (i = 0; i < 10; i = i + 2)
58 ASSERT_EQ (i, iter);
59 iter = iter + 2;
62 ASSERT_EQ (i, 10);
63 return iter;
66 int
67 test4 (void)
69 int iter = 10;
70 int i;
71 #pragma omp tile sizes(8)
72 for (i = 10; i > 0; i = i - 2)
74 ASSERT_EQ (i, iter);
75 iter = iter - 2;
77 ASSERT_EQ (i, 0);
78 return iter;
81 int
82 test5 (void)
84 int iter = 10;
85 int i;
86 #pragma omp tile sizes(71)
87 for (i = 10; i > 0; i = i - 2)
89 ASSERT_EQ (i, iter);
90 iter = iter - 2;
93 ASSERT_EQ (i, 0);
94 return iter;
97 int
98 test6 (void)
100 int iter = 10;
101 int i;
102 #pragma omp tile sizes(1)
103 for (i = 10; i > 0; i = i - 2)
105 ASSERT_EQ (i, iter);
106 iter = iter - 2;
108 ASSERT_EQ (i, 0);
109 return iter;
113 test7 (void)
115 int iter = 5;
116 int i;
117 #pragma omp tile sizes(2)
118 for (i = 5; i < -5; i = i - 3)
120 fprintf (stderr, "%d\n", i);
121 __builtin_abort ();
122 iter = iter - 3;
125 /* No iteration expected */
126 return iter;
130 test8 (void)
132 int iter = 5;
133 int i;
134 #pragma omp tile sizes(2)
135 for (i = 5; i > -5; i = i - 3)
137 ASSERT_EQ (i, iter);
138 /* Expect only first iteration of the last tile to execute */
139 if (iter != -4)
140 iter = iter - 3;
143 ASSERT_EQ (i, -7);
144 return iter;
149 test9 (void)
151 int iter = 5;
152 int i;
153 #pragma omp tile sizes(5)
154 for (i = 5; i >= -5; i = i - 4)
156 ASSERT_EQ (i, iter);
157 /* Expect only first iteration of the last tile to execute */
158 if (iter != - 3)
159 iter = iter - 4;
162 ASSERT_EQ (i, -7);
163 return iter;
167 test10 (void)
169 int iter = 5;
170 int i;
171 #pragma omp tile sizes(5)
172 for (i = 5; i >= -5; i--)
174 ASSERT_EQ (i, iter);
175 iter--;
178 ASSERT_EQ (i, -6);
179 return iter;
183 test11 (void)
185 int iter = 5;
186 int i;
187 #pragma omp tile sizes(15)
188 for (i = 5; i != -5; i--)
190 ASSERT_EQ (i, iter);
191 iter--;
193 ASSERT_EQ (i, -5);
194 return iter;
198 test12 (void)
200 int iter = 0;
201 unsigned i;
202 #pragma omp tile sizes(3)
203 for (i = 0; i != 5; i++)
205 ASSERT_EQ (i, iter);
206 iter++;
209 ASSERT_EQ (i, 5);
210 return iter;
214 test13 (void)
216 int iter = -5;
217 long long unsigned int i = 42;
218 #pragma omp tile sizes(15)
219 for (int i = -5; i < 5; i = i + 3)
221 ASSERT_EQ (i, iter);
222 iter += 3;
225 ASSERT_EQ (i, 42);
226 return iter;
230 test14 (unsigned init, int step)
232 int iter = init;
233 long long unsigned int i;
234 #pragma omp tile sizes(8)
235 for (i = init; i < 2 * init; i = i + step)
236 iter++;
238 if (init)
239 ASSERT_EQ (i, 2 * init + (init == 5));
240 return iter;
244 test15 (unsigned init, int step)
246 int iter = init;
247 int i;
248 #pragma omp tile sizes(8)
249 for (unsigned i = init; i > 2 * init; i = i + step)
250 iter++;
252 return iter;
256 main ()
258 int last_iter;
260 last_iter = test1 ();
261 ASSERT_EQ (last_iter, 10);
263 last_iter = test2 ();
264 ASSERT_EQ (last_iter, 10);
266 last_iter = test3 ();
267 ASSERT_EQ (last_iter, 10);
269 last_iter = test4 ();
270 ASSERT_EQ (last_iter, 0);
272 last_iter = test5 ();
273 ASSERT_EQ (last_iter, 0);
275 last_iter = test6 ();
276 ASSERT_EQ (last_iter, 0);
278 last_iter = test7 ();
279 ASSERT_EQ (last_iter, 5);
281 last_iter = test8 ();
282 ASSERT_EQ (last_iter, -4);
284 last_iter = test9 ();
285 ASSERT_EQ (last_iter, -3);
287 last_iter = test10 ();
288 ASSERT_EQ (last_iter, -6);
290 last_iter = test11 ();
291 ASSERT_EQ (last_iter, -5);
293 last_iter = test12 ();
294 ASSERT_EQ (last_iter, 5);
296 last_iter = test13 ();
297 ASSERT_EQ (last_iter, 7);
299 last_iter = test14 (0, 1);
300 ASSERT_EQ (last_iter, 0);
302 last_iter = test14 (0, -1);
303 ASSERT_EQ (last_iter, 0);
305 last_iter = test14 (8, 2);
306 ASSERT_EQ (last_iter, 12);
308 last_iter = test14 (5, 3);
309 ASSERT_EQ (last_iter, 7);
311 last_iter = test15 (8, -1);
312 ASSERT_EQ (last_iter, 8);
314 last_iter = test15 (8, -2);
315 ASSERT_EQ (last_iter, 8);
317 last_iter = test15 (5, -3);
318 ASSERT_EQ (last_iter, 5);
319 return 0;