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