i386: Adjust rtx cost for imulq and imulw [PR115749]
[official-gcc.git] / gcc / testsuite / gcc.dg / vect / vect-simd-17.c
blob79b3602a6c08969a84856bf98ba59c18b45d5b11
1 /* { dg-additional-options "-fopenmp-simd -fno-tree-vectorize" } */
2 /* { dg-additional-options "-mavx" { target avx_runtime } } */
3 /* { dg-final { scan-tree-dump "vectorized 1\[1-2] loops" "vect" { target i?86-*-* x86_64-*-* } } } */
5 #include "tree-vect.h"
7 int x, i, j;
8 volatile int a, b, c, d, e, f, g, h;
9 int k[11][101];
11 __attribute__((noipa)) void
12 doit (void)
14 int niters, err = 0;
15 for (i = 1; i <= 10; i++)
16 for (j = 1; j <= 10 * i; j++)
18 k[i][j] = 1;
19 asm volatile ("" : : : "memory");
21 a = 1; b = 11; c = 1; d = 0; e = 1; f = 10; g = 1; h = 1;
22 niters = 0; i = -100; j = -100; x = -100;
23 #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
24 for (i = 1; i <= 10; i++)
25 for (j = 1; j <= 10 * i; j++)
27 err |= (i < 1);
28 err |= (i > 10);
29 err |= (j < 1);
30 err |= (j > 10 * i);
31 err |= (k[i][j] != 1);
32 k[i][j]++;
33 x = i * 1024 + (j & 1023);
34 niters++;
36 if (i != 11 || j != 101 || x != 10340 || niters != 550 || err)
37 abort ();
38 niters = 0; i = -100; j = -100; x = -100;
39 #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
40 for (i = a; i < b; i += c)
41 for (j = d * i + e; j < g + i * f; j += h)
43 err |= (i < 1);
44 err |= (i > 10);
45 err |= (j < 1);
46 err |= (j > 10 * i);
47 err |= (k[i][j] != 2);
48 k[i][j]++;
49 x = i * 1024 + (j & 1023);
50 niters++;
52 if (i != 11 || j != 101 || x != 10340 || niters != 550 || err)
53 abort ();
54 for (i = 1; i <= 10; i++)
55 #pragma GCC novector
56 for (j = 1; j <= 10 * i; j++)
57 if (k[i][j] == 3)
58 k[i][j] = 0;
59 else
60 abort ();
61 for (i = 0; i < 11; i++)
62 #pragma GCC novector
63 for (j = 0; j < 101; j++)
64 if (k[i][j] != 0)
65 abort ();
66 for (i = 0; i < 10; i++)
67 for (j = 0; j < 10 * i; j++)
69 k[i][j] = 1;
70 asm volatile ("" : : : "memory");
72 a = 0; b = 10; c = 1; d = 0; e = 0; f = 10; g = 0; h = 1;
73 niters = 0; i = -100; j = -100; x = -100;
74 #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
75 for (i = 0; i < 10; i++)
76 for (j = 0; j < 10 * i; j++)
78 err |= (i < 0);
79 err |= (i >= 10);
80 err |= (j < 0);
81 err |= (j >= 10 * i);
82 err |= (k[i][j] != 1);
83 k[i][j]++;
84 x = i * 1024 + (j & 1023);
85 niters++;
87 if (i != 10 || j != 90 || x != 9305 || niters != 450 || err)
88 abort ();
89 niters = 0; i = -100; j = -100; x = -100;
90 #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
91 for (i = a; i < b; i += c)
92 for (j = d * i + e; j < g + i * f; j += h)
94 err |= (i < 0);
95 err |= (i >= 10);
96 err |= (j < 0);
97 err |= (j >= 10 * i);
98 err |= (k[i][j] != 2);
99 k[i][j]++;
100 x = i * 1024 + (j & 1023);
101 niters++;
103 if (i != 10 || j != 90 || x != 9305 || niters != 450 || err)
104 abort ();
105 for (i = 0; i < 10; i++)
106 #pragma GCC novector
107 for (j = 0; j < 10 * i; j++)
108 if (k[i][j] == 3)
109 k[i][j] = 0;
110 else
111 abort ();
112 for (i = 0; i < 11; i++)
113 #pragma GCC novector
114 for (j = 0; j < 101; j++)
115 if (k[i][j] != 0)
116 abort ();
117 for (i = 4; i < 10; i++)
118 for (j = -9 + 2 * i; j < i; j++)
120 k[i][j + 1] = 1;
121 asm volatile ("" : : : "memory");
123 a = 4; b = 10; c = 1; d = 2; e = -9; f = 1; g = 0; h = 1;
124 niters = 0; i = -100; j = -100; x = -100;
125 #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
126 for (i = 4; i < 10; i++)
127 for (j = -9 + 2 * i; j < i; j++)
129 err |= (i < 4);
130 err |= (i >= 10);
131 err |= (j < -9 + 2 * i);
132 err |= (j >= i);
133 err |= (k[i][j + 1] != 1);
134 k[i][j + 1]++;
135 x = i * 1024 + (j & 1023);
136 niters++;
138 if (/*i != 10 || j != 9 || */x != 8199 || niters != 15 || err)
139 abort ();
140 niters = 0; i = -100; j = -100; x = -100;
141 #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
142 for (i = a; i < b; i += c)
143 for (j = d * i + e; j < g + i * f; j += h)
145 err |= (i < 4);
146 err |= (i >= 10);
147 err |= (j < -9 + 2 * i);
148 err |= (j >= i);
149 err |= (k[i][j + 1] != 2);
150 k[i][j + 1]++;
151 x = i * 1024 + (j & 1023);
152 niters++;
154 if (/*i != 10 || j != 9 || */x != 8199 || niters != 15 || err)
155 abort ();
156 for (i = 4; i < 10; i++)
157 for (j = -9 + 2 * i; j < i; j++)
158 if (k[i][j + 1] == 3)
159 k[i][j + 1] = 0;
160 else
161 abort ();
162 for (i = 0; i < 11; i++)
163 #pragma GCC novector
164 for (j = 0; j < 101; j++)
165 if (k[i][j] != 0)
166 abort ();
167 for (i = 1; i < 10; i += 2)
168 for (j = 1; j < i + 1; j++)
170 k[i][j] = 1;
171 asm volatile ("" : : : "memory");
173 a = 1; b = 10; c = 2; d = 0; e = 1; f = 1; g = 1; h = 1;
174 niters = 0; i = -100; j = -100; x = -100;
175 #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
176 for (i = 1; i < 10; i += 2)
177 for (j = 1; j < i + 1; j++)
179 err |= (i < 1);
180 err |= (i >= 10);
181 err |= (j < 1);
182 err |= (j >= i + 1);
183 err |= (k[i][j] != 1);
184 k[i][j]++;
185 x = i * 1024 + (j & 1023);
186 niters++;
188 if (i != 11 || j != 10 || x != 9225 || niters != 25 || err)
189 abort ();
190 niters = 0; i = -100; j = -100; x = -100;
191 #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
192 for (i = a; i < b; i += c)
193 for (j = d * i + e; j < g + i * f; j += h)
195 err |= (i < 1);
196 err |= (i >= 10);
197 err |= (j < 1);
198 err |= (j >= i + 1);
199 err |= (k[i][j] != 2);
200 k[i][j]++;
201 x = i * 1024 + (j & 1023);
202 niters++;
204 if (i != 11 || j != 10 || x != 9225 || niters != 25 || err)
205 abort ();
206 for (i = 1; i < 10; i += 2)
207 #pragma GCC novector
208 for (j = 1; j < i + 1; j++)
209 if (k[i][j] == 3)
210 k[i][j] = 0;
211 else
212 abort ();
213 for (i = 0; i < 11; i++)
214 #pragma GCC novector
215 for (j = 0; j < 101; j++)
216 if (k[i][j] != 0)
217 abort ();
218 for (j = -11; j >= -41; j -= 15)
220 k[0][-j] = 1;
221 asm volatile ("" : : : "memory");
223 a = 4; b = 8; c = 12; d = -8; e = -9; f = -3; g = 6; h = 15;
224 niters = 0; i = -100; j = -100; x = -100;
225 #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
226 for (i = 4; i < 8; i += 12)
227 for (j = -8 * i - 9; j < i * -3 + 6; j += 15)
229 err |= (i != 4);
230 err |= (j < -41);
231 err |= (j > -11);
232 err |= (k[0][-j] != 1);
233 k[0][-j]++;
234 x = i * 1024 + (j & 1023);
235 niters++;
237 if (i != 16 || j != 4 || x != 5109 || niters != 3 || err)
238 abort ();
239 niters = 0; i = -100; j = -100; x = -100;
240 #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
241 for (i = a; i < b; i += c)
242 for (j = d * i + e; j < g + i * f; j += h)
244 err |= (i != 4);
245 err |= (j < -41);
246 err |= (j > -11);
247 err |= (k[0][-j] != 2);
248 k[0][-j]++;
249 x = i * 1024 + (j & 1023);
250 niters++;
252 if (i != 16 || j != 4 || x != 5109 || niters != 3 || err)
253 abort ();
254 #pragma GCC novector
255 for (j = -11; j >= -41; j -= 15)
256 if (k[0][-j] == 3)
257 k[0][-j] = 0;
258 else
259 abort ();
260 #pragma GCC novector
261 for (j = -11; j >= -41; j--)
262 if (k[0][-j] != 0)
263 abort ();
264 for (j = -34; j <= -7; j++)
266 k[0][-j] = 1;
267 asm volatile ("" : : : "memory");
269 a = -13; b = 7; c = 12; d = 3; e = 5; f = 0; g = -6; h = 1;
270 niters = 0; i = -100; j = -100; x = -100;
271 #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
272 for (i = -13; i < 7; i += 12)
273 for (j = 3 * i + 5; j < -6; j++)
275 err |= (i != -13);
276 err |= (j < -34);
277 err |= (j > -7);
278 err |= (k[0][-j] != 1);
279 k[0][-j]++;
280 x = i * 1024 + (j & 1023);
281 niters++;
283 if (/*i != 11 || j != 2 || */x != -12295 || niters != 28 || err)
284 abort ();
285 niters = 0; i = -100; j = -100; x = -100;
286 #pragma omp simd collapse(2) lastprivate (i, j, x) reduction(+:niters) reduction(|:err)
287 for (i = a; i < b; i += c)
288 for (j = d * i + e; j < g + i * f; j += h)
290 err |= (i != -13);
291 err |= (j < -34);
292 err |= (j > -7);
293 err |= (k[0][-j] != 2);
294 k[0][-j]++;
295 x = i * 1024 + (j & 1023);
296 niters++;
298 if (/*i != 11 || j != 2 || */x != -12295 || niters != 28 || err)
299 abort ();
300 #pragma GCC novector
301 for (j = -34; j <= -7; j++)
302 if (k[0][-j] == 3)
303 k[0][-j] = 0;
304 else
305 abort ();
309 main ()
311 check_vect ();
312 doit ();
313 return 0;