1 #include <omp.h>
2 #include <stdlib.h>
3 #include <string.h>
4 
5 int
test1()6 test1 ()
7 {
8   short int buf[64], *p;
9   int i;
10   memset (buf, '\0', sizeof (buf));
11 #pragma omp parallel for
12   for (p = &buf[10]; &buf[54] > p; p++)
13     *p = 5;
14   for (i = 0; i < 64; i++)
15     if (buf[i] != 5 * (i >= 10 && i < 54))
16       abort ();
17   memset (buf, '\0', sizeof (buf));
18 #pragma omp parallel for
19   for (p = &buf[3]; &buf[63] >= p; p += 2)
20     p[-2] = 6;
21   for (i = 0; i < 64; i++)
22     if (buf[i] != 6 * ((i & 1) && i <= 61))
23       abort ();
24   memset (buf, '\0', sizeof (buf));
25 #pragma omp parallel for
26   for (p = &buf[16]; &buf[51] > p; p = 4 + p)
27     p[2] = 7;
28   for (i = 0; i < 64; i++)
29     if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
30       abort ();
31   memset (buf, '\0', sizeof (buf));
32 #pragma omp parallel for
33   for (p = &buf[16]; &buf[40] >= p; p = p + 4ULL)
34     p[2] = -7;
35   for (i = 0; i < 64; i++)
36     if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
37       abort ();
38   memset (buf, '\0', sizeof (buf));
39 #pragma omp parallel for
40   for (p = &buf[53]; &buf[9] < p; --p)
41     *p = 5;
42   for (i = 0; i < 64; i++)
43     if (buf[i] != 5 * (i >= 10 && i < 54))
44       abort ();
45   memset (buf, '\0', sizeof (buf));
46 #pragma omp parallel for
47   for (p = &buf[63]; &buf[3] <= p; p -= 2)
48     p[-2] = 6;
49   for (i = 0; i < 64; i++)
50     if (buf[i] != 6 * ((i & 1) && i <= 61))
51       abort ();
52   memset (buf, '\0', sizeof (buf));
53 #pragma omp parallel for
54   for (p = &buf[48]; &buf[15] < p; p = -4 + p)
55     p[2] = 7;
56   for (i = 0; i < 64; i++)
57     if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
58       abort ();
59   memset (buf, '\0', sizeof (buf));
60 #pragma omp parallel for
61   for (p = &buf[40]; &buf[16] <= p; p = p - 4ULL)
62     p[2] = -7;
63   for (i = 0; i < 64; i++)
64     if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
65       abort ();
66   return 0;
67 }
68 
69 int
test2()70 test2 ()
71 {
72   int buf[64], *p;
73   int i;
74   memset (buf, '\0', sizeof (buf));
75 #pragma omp parallel for schedule (static, 3)
76   for (p = &buf[10]; &buf[54] > p; p++)
77     *p = 5;
78   for (i = 0; i < 64; i++)
79     if (buf[i] != 5 * (i >= 10 && i < 54))
80       abort ();
81   memset (buf, '\0', sizeof (buf));
82 #pragma omp parallel for schedule (static, 3)
83   for (p = &buf[3]; &buf[63] >= p; p += 2)
84     p[-2] = 6;
85   for (i = 0; i < 64; i++)
86     if (buf[i] != 6 * ((i & 1) && i <= 61))
87       abort ();
88   memset (buf, '\0', sizeof (buf));
89 #pragma omp parallel for schedule (static, 3)
90   for (p = &buf[16]; &buf[51] > p; p = 4 + p)
91     p[2] = 7;
92   for (i = 0; i < 64; i++)
93     if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
94       abort ();
95   memset (buf, '\0', sizeof (buf));
96 #pragma omp parallel for schedule (static, 3)
97   for (p = &buf[16]; &buf[40] >= p; p = p + 4ULL)
98     p[2] = -7;
99   for (i = 0; i < 64; i++)
100     if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
101       abort ();
102   memset (buf, '\0', sizeof (buf));
103 #pragma omp parallel for schedule (static, 3)
104   for (p = &buf[53]; &buf[9] < p; --p)
105     *p = 5;
106   for (i = 0; i < 64; i++)
107     if (buf[i] != 5 * (i >= 10 && i < 54))
108       abort ();
109   memset (buf, '\0', sizeof (buf));
110 #pragma omp parallel for schedule (static, 3)
111   for (p = &buf[63]; &buf[3] <= p; p -= 2)
112     p[-2] = 6;
113   for (i = 0; i < 64; i++)
114     if (buf[i] != 6 * ((i & 1) && i <= 61))
115       abort ();
116   memset (buf, '\0', sizeof (buf));
117 #pragma omp parallel for schedule (static, 3)
118   for (p = &buf[48]; &buf[15] < p; p = -4 + p)
119     p[2] = 7;
120   for (i = 0; i < 64; i++)
121     if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
122       abort ();
123   memset (buf, '\0', sizeof (buf));
124 #pragma omp parallel for schedule (static, 3)
125   for (p = &buf[40]; &buf[16] <= p; p = p - 4ULL)
126     p[2] = -7;
127   for (i = 0; i < 64; i++)
128     if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
129       abort ();
130   return 0;
131 }
132 
133 int
test3()134 test3 ()
135 {
136   int buf[64], *p;
137   int i;
138   memset (buf, '\0', sizeof (buf));
139 #pragma omp parallel for schedule (dynamic, 3)
140   for (p = &buf[10]; &buf[54] > p; p++)
141     *p = 5;
142   for (i = 0; i < 64; i++)
143     if (buf[i] != 5 * (i >= 10 && i < 54))
144       abort ();
145   memset (buf, '\0', sizeof (buf));
146 #pragma omp parallel for schedule (dynamic, 3)
147   for (p = &buf[3]; &buf[63] >= p; p += 2)
148     p[-2] = 6;
149   for (i = 0; i < 64; i++)
150     if (buf[i] != 6 * ((i & 1) && i <= 61))
151       abort ();
152   memset (buf, '\0', sizeof (buf));
153 #pragma omp parallel for schedule (dynamic, 3)
154   for (p = &buf[16]; &buf[51] > p; p = 4 + p)
155     p[2] = 7;
156   for (i = 0; i < 64; i++)
157     if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
158       abort ();
159   memset (buf, '\0', sizeof (buf));
160 #pragma omp parallel for schedule (dynamic, 3)
161   for (p = &buf[16]; &buf[40] >= p; p = p + 4ULL)
162     p[2] = -7;
163   for (i = 0; i < 64; i++)
164     if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
165       abort ();
166   memset (buf, '\0', sizeof (buf));
167 #pragma omp parallel for schedule (dynamic, 3)
168   for (p = &buf[53]; &buf[9] < p; --p)
169     *p = 5;
170   for (i = 0; i < 64; i++)
171     if (buf[i] != 5 * (i >= 10 && i < 54))
172       abort ();
173   memset (buf, '\0', sizeof (buf));
174 #pragma omp parallel for schedule (dynamic, 3)
175   for (p = &buf[63]; &buf[3] <= p; p -= 2)
176     p[-2] = 6;
177   for (i = 0; i < 64; i++)
178     if (buf[i] != 6 * ((i & 1) && i <= 61))
179       abort ();
180   memset (buf, '\0', sizeof (buf));
181 #pragma omp parallel for schedule (dynamic, 3)
182   for (p = &buf[48]; &buf[15] < p; p = -4 + p)
183     p[2] = 7;
184   for (i = 0; i < 64; i++)
185     if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
186       abort ();
187   memset (buf, '\0', sizeof (buf));
188 #pragma omp parallel for schedule (dynamic, 3)
189   for (p = &buf[40]; &buf[16] <= p; p = p - 4ULL)
190     p[2] = -7;
191   for (i = 0; i < 64; i++)
192     if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
193       abort ();
194   return 0;
195 }
196 
197 int
test4()198 test4 ()
199 {
200   int buf[64], *p;
201   int i;
202   memset (buf, '\0', sizeof (buf));
203 #pragma omp parallel for schedule (runtime)
204   for (p = &buf[10]; &buf[54] > p; p++)
205     *p = 5;
206   for (i = 0; i < 64; i++)
207     if (buf[i] != 5 * (i >= 10 && i < 54))
208       abort ();
209   memset (buf, '\0', sizeof (buf));
210 #pragma omp parallel for schedule (runtime)
211   for (p = &buf[3]; &buf[63] >= p; p += 2)
212     p[-2] = 6;
213   for (i = 0; i < 64; i++)
214     if (buf[i] != 6 * ((i & 1) && i <= 61))
215       abort ();
216   memset (buf, '\0', sizeof (buf));
217 #pragma omp parallel for schedule (runtime)
218   for (p = &buf[16]; &buf[51] > p; p = 4 + p)
219     p[2] = 7;
220   for (i = 0; i < 64; i++)
221     if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
222       abort ();
223   memset (buf, '\0', sizeof (buf));
224 #pragma omp parallel for schedule (runtime)
225   for (p = &buf[16]; &buf[40] >= p; p = p + 4ULL)
226     p[2] = -7;
227   for (i = 0; i < 64; i++)
228     if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
229       abort ();
230   memset (buf, '\0', sizeof (buf));
231 #pragma omp parallel for schedule (runtime)
232   for (p = &buf[53]; &buf[9] < p; --p)
233     *p = 5;
234   for (i = 0; i < 64; i++)
235     if (buf[i] != 5 * (i >= 10 && i < 54))
236       abort ();
237   memset (buf, '\0', sizeof (buf));
238 #pragma omp parallel for schedule (runtime)
239   for (p = &buf[63]; &buf[3] <= p; p -= 2)
240     p[-2] = 6;
241   for (i = 0; i < 64; i++)
242     if (buf[i] != 6 * ((i & 1) && i <= 61))
243       abort ();
244   memset (buf, '\0', sizeof (buf));
245 #pragma omp parallel for schedule (runtime)
246   for (p = &buf[48]; &buf[15] < p; p = -4 + p)
247     p[2] = 7;
248   for (i = 0; i < 64; i++)
249     if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
250       abort ();
251   memset (buf, '\0', sizeof (buf));
252 #pragma omp parallel for schedule (runtime)
253   for (p = &buf[40]; &buf[16] <= p; p = p - 4ULL)
254     p[2] = -7;
255   for (i = 0; i < 64; i++)
256     if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
257       abort ();
258   return 0;
259 }
260 
261 int
main()262 main ()
263 {
264   test1 ();
265   test2 ();
266   test3 ();
267   omp_set_schedule (omp_sched_static, 0);
268   test4 ();
269   omp_set_schedule (omp_sched_static, 3);
270   test4 ();
271   omp_set_schedule (omp_sched_dynamic, 5);
272   test4 ();
273   omp_set_schedule (omp_sched_guided, 2);
274   test4 ();
275   return 0;
276 }
277